Skill

MariaDB এর সিঙ্ক্রোনাইজেশন এবং রিপ্লিকেশন

মারিয়া ডিবি (MariaDB) - Database Tutorials

276

MariaDB রিপ্লিকেশন হল একটি শক্তিশালী প্রযুক্তি, যা মূল (master) ডেটাবেস সার্ভার থেকে একটি বা একাধিক গন্তব্য (slave) সার্ভারে ডেটার কপি সিঙ্ক্রোনাইজ করতে ব্যবহৃত হয়। রিপ্লিকেশন সাধারণত ডেটাবেসের পারফরম্যান্স উন্নত করতে, ব্লকিং অপারেশন এড়াতে, এবং ডেটাবেস ফাল্ট টলারেন্স নিশ্চিত করতে ব্যবহৃত হয়। এটি সিঙ্ক্রোনাইজেশন প্রক্রিয়া তৈরি করে যাতে একটি সার্ভার থেকে অন্য সার্ভারে ডেটা স্বয়ংক্রিয়ভাবে কপি হয়।


MariaDB রিপ্লিকেশন কী?

MariaDB রিপ্লিকেশন একটি প্রক্রিয়া যেখানে একটি মূল সার্ভার (master) থেকে ডেটা কপি বা প্রেরণ করা হয় একটি বা একাধিক গন্তব্য সার্ভারে (slave)। এতে ডেটা এক্সিকিউট হওয়ার পর, সে সব পরিবর্তনগুলো binary logs তে লেখা হয় এবং গন্তব্য সার্ভার (slave) সেই লগগুলো পড়ে এবং ডেটাবেস আপডেট করে।

রিপ্লিকেশন প্রক্রিয়ায়, একাধিক সার্ভার ব্যবহার করা যায়, যেখানে একটি সার্ভার (master) ডেটা সংগ্রহ করে এবং অন্যান্য সার্ভারগুলি (slaves) সেই ডেটার কপি রাখে। এই কৌশলটি পরবর্তীতে load balancing, backup, এবং disaster recovery এর জন্যও ব্যবহৃত হয়।


MariaDB রিপ্লিকেশন কনফিগারেশন

MariaDB তে রিপ্লিকেশন কনফিগার করার জন্য প্রধানত দুটি ধাপ রয়েছে:

  1. Master সার্ভার কনফিগারেশন
  2. Slave সার্ভার কনফিগারেশন

১. Master সার্ভার কনফিগারেশন

Master সার্ভারে রিপ্লিকেশন সক্রিয় করার জন্য কিছু প্রাথমিক কনফিগারেশন সেট করতে হয়।

কনফিগারেশন ফাইল আপডেট করা

MariaDB এর কনফিগারেশন ফাইল (my.cnf বা my.ini) এ কিছু প্যারামিটার যোগ করতে হবে:

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log     # Binary log ফাইলের পাথ
server-id = 1                              # ইউনিক সার্ভার আইডি (এটি 1 হতে হবে master সার্ভারের জন্য)
binlog-do-db = my_database                 # যে ডেটাবেসটি রিপ্লিকেট করতে চান

এটি binary log সক্রিয় করবে, যা সার্ভারে সমস্ত ট্রানজেকশন লগ করবে এবং server-id নির্ধারণ করবে, যা রিপ্লিকেশন ব্যবস্থায় প্রতিটি সার্ভারকে আলাদা করবে।

MariaDB সার্ভার রিস্টার্ট করা

কনফিগারেশন পরিবর্তন করার পর MariaDB সার্ভার রিস্টার্ট করতে হবে:

sudo systemctl restart mariadb
Master সার্ভারে Replication User তৈরি করা

Master সার্ভারে রিপ্লিকেশন ব্যবহারকারী (replication user) তৈরি করতে হবে:

CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

এটি একটি ব্যবহারকারী তৈরি করবে যার সাহায্যে slave সার্ভার master সার্ভারের সঙ্গে সংযোগ স্থাপন করতে পারবে।

Master সার্ভারের Binary Log File অবস্থান জানতে

রিপ্লিকেশন শুরু করার জন্য, আপনি master সার্ভারে চলমান বাইনারি লগ ফাইল এবং পজিশন জানবেন। এটি ব্যবহার করবে slave সার্ভার, যাতে সে সঠিক স্থান থেকে ডেটা পেতে পারে।

SHOW MASTER STATUS;

উদাহরণস্বরূপ, এটি এমন কিছু আউটপুট দেবে:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 154       | my_database  |                  |
+------------------+----------+--------------+------------------+

এখানে, File হল বর্তমান বাইনারি লগ ফাইলের নাম এবং Position হল লগের অবস্থান। এই তথ্যটি slave সার্ভারে ব্যবহার করতে হবে।


২. Slave সার্ভার কনফিগারেশন

Slave সার্ভারে রিপ্লিকেশন কনফিগার করতে নিম্নলিখিত ধাপগুলো অনুসরণ করতে হবে।

কনফিগারেশন ফাইল আপডেট করা

Slave সার্ভারে, my.cnf ফাইলটি আপডেট করতে হবে:

[mysqld]
server-id = 2                      # ইউনিক সার্ভার আইডি (এটি 2 হতে হবে slave সার্ভারের জন্য)
relay-log = /var/log/mysql/mysql-relay-bin.log   # রিলেতে লগ ফাইলের পাথ

এটি slave সার্ভারকে আলাদা করবে এবং তাকে relay logs ব্যবহার করতে সক্ষম করবে।

MariaDB সার্ভার রিস্টার্ট করা
sudo systemctl restart mariadb
Slave সার্ভারে Master সার্ভারের তথ্য কনফিগার করা

Slave সার্ভারে master সার্ভারের তথ্য সেট করতে হবে, যেমন master সার্ভারের IP ঠিকানা, replication user, এবং বাইনারি লগ ফাইলের অবস্থান:

CHANGE MASTER TO
  MASTER_HOST='master_ip_address',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='your_password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=154;

এখানে:

  • MASTER_HOST: Master সার্ভারের আইপি ঠিকানা।
  • MASTER_USER: রিপ্লিকেশন ব্যবহারকারী।
  • MASTER_PASSWORD: রিপ্লিকেশন ব্যবহারকারীর পাসওয়ার্ড।
  • MASTER_LOG_FILE: Master সার্ভারের বাইনারি লগ ফাইল।
  • MASTER_LOG_POS: বাইনারি লগের পজিশন।
Slave সার্ভারে রিপ্লিকেশন শুরু করা

এখন, slave সার্ভারে রিপ্লিকেশন শুরু করতে হবে:

START SLAVE;
Slave সার্ভারের রিপ্লিকেশন স্ট্যাটাস চেক করা

Slave সার্ভারের রিপ্লিকেশন সঠিকভাবে চলছে কিনা তা পরীক্ষা করতে পারেন:

SHOW SLAVE STATUS\G

এটি একটি বিস্তারিত আউটপুট দিবে, যেখানে আপনি Slave_IO_Running এবং Slave_SQL_Running দেখতে পারবেন, যেগুলি যদি Yes হয়, তাহলে রিপ্লিকেশন সঠিকভাবে কাজ করছে।


MariaDB এর সিঙ্ক্রোনাইজেশন এবং রিপ্লিকেশন কৌশল

  1. Master-Slave রিপ্লিকেশন: এটি সবচেয়ে প্রচলিত রিপ্লিকেশন কৌশল, যেখানে একটি master সার্ভার থাকে এবং এক বা একাধিক slave সার্ভার থাকে। এখানে master সার্ভার ডেটার পরিবর্তনগুলি করে এবং slave সার্ভারগুলি সেই পরিবর্তনগুলি গ্রহণ করে।
  2. Multi-Master রিপ্লিকেশন: এটি এমন একটি কৌশল যেখানে একাধিক সার্ভার (master) একে অপরের সাথে ডেটা সিঙ্ক্রোনাইজ করে। এটি উচ্চ প্রাপ্যতা এবং লোড ব্যালান্সিংয়ের জন্য ব্যবহৃত হয়।
  3. Circular রিপ্লিকেশন: এটি একটি বিশেষ ধরনের multi-master রিপ্লিকেশন, যেখানে তিনটি বা তার বেশি সার্ভার পরস্পরের সাথে ডেটা সিঙ্ক্রোনাইজ করে।
  4. Galera Cluster: MariaDB এর একটি অত্যন্ত জনপ্রিয় এবং শক্তিশালী synchronous multi-master replication প্রযুক্তি, যা সমস্ত সার্ভারের মধ্যে সিঙ্ক্রোনাইজেশন নিশ্চিত করে। এটি বিশেষভাবে high availability এবং fault tolerance প্রদান করে।

সারাংশ

MariaDB তে রিপ্লিকেশন হল ডেটাবেসের ডেটা একাধিক সার্ভারের মধ্যে সিঙ্ক্রোনাইজ করার একটি প্রক্রিয়া, যা প্রধানত master-slave মডেলে ব্যবহৃত হয়। এর মাধ্যমে আপনি ডেটাবেসের পারফরম্যান্স বৃদ্ধি, ডেটা রিড/রাইট লোড ব্যালান্সিং, এবং ডেটাবেস ফাল্ট টলারেন্স নিশ্চিত করতে পারেন। MariaDB তে রিপ্লিকেশন কনফিগার করতে binary logs এবং replication users ব্যবহার করা হয়, যা master এবং slave সার্ভারের মধ্যে ডেটার সঠিক সিঙ্ক্রোনাইজেশন নিশ্চিত করে।

Content added By

ডেটা রেপ্লিকেশন (Data Replication) হল একটি প্রক্রিয়া যার মাধ্যমে এক ডেটাবেসের ডেটা অন্য একটি ডেটাবেসে কপি করা হয়। মারিয়া ডিবি (MariaDB) তে রেপ্লিকেশন একাধিক সার্ভার মধ্যে ডেটা শেয়ার করার একটি অত্যন্ত গুরুত্বপূর্ণ টুল। এটি মূলত সিস্টেমের স্কেলিং, রেডানডেন্সি এবং ফেইলওভার ব্যবস্থাপনার জন্য ব্যবহৃত হয়। রেপ্লিকেশন একাধিক ডেটাবেস সার্ভারে একই ডেটা রেখে তা নিশ্চিত করে যে সার্ভারগুলো একই অবস্থা বজায় রাখছে।


Data Replication এর গুরুত্ব

  1. ফেইলওভার এবং রেডানডেন্সি: রেপ্লিকেশন সিস্টেমের পারফরম্যান্স উন্নত করতে সাহায্য করে এবং ফেইলওভার প্রক্রিয়ায় সাহায্য করে। যদি প্রাইমারি সার্ভারটি ডাউন হয়ে যায়, তবে সেকেন্ডারি সার্ভার (Replica) ডেটাবেস সার্ভার হিসেবে কাজ করতে পারে, ফলে সিস্টেমের ডাউনটাইম কমে যায়।
  2. লোড ব্যালান্সিং: মারিয়া ডিবি তে রেপ্লিকেশন ব্যবহৃত হলে, ইউজারদের কুইয়ারি লোড বিভিন্ন সার্ভারে ভাগ করা যায়। এইভাবে, বেশিরভাগ রিড অপারেশন সেকেন্ডারি সার্ভারগুলোর মাধ্যমে পরিচালিত হয়, যার ফলে প্রাইমারি সার্ভারের উপর লোড কমে যায় এবং পারফরম্যান্স বৃদ্ধি পায়।
  3. ডেটা ব্যাকআপ এবং রিকভারি: ডেটাবেস রেপ্লিকেশনটি ব্যাকআপ এবং পুনরুদ্ধারের জন্যও গুরুত্বপূর্ণ। রিপ্লিকা সার্ভারের মাধ্যমে ডেটার একটি কপি অন্য জায়গায় সংরক্ষণ করা যায়, যা মূল সার্ভারে কোনো সমস্যা হলে কাজে আসে।
  4. স্কেলেবিলিটি: রেপ্লিকেশন মারিয়া ডিবি সিস্টেমে স্কেলিং সহজ করে তোলে। নতুন রিপ্লিকা সার্ভার যুক্ত করে রিড-হেভি লোড শেয়ার করা যায় এবং পারফরম্যান্স বাড়ানো যায়।
  5. ডাটাবেস ম্যানেজমেন্ট: মারিয়া ডিবি তে রেপ্লিকেশন ডেটাবেস ম্যানেজমেন্ট সহজ করে, কারণ একাধিক সার্ভারকে একই ডেটাবেসের উপরে কাজ করার জন্য একসাথে কনফিগার করা যায়। এটি ডেটা ম্যানিপুলেশন এবং আপডেটের সময় সহজ করে তোলে।

MariaDB Data Replication কনফিগারেশন

মারিয়া ডিবি তে রেপ্লিকেশন কনফিগার করার জন্য, প্রাথমিকভাবে আপনাকে একটি Master-Slave (বা Primary-Replica) কনফিগারেশন সেটআপ করতে হবে। নিচে এর কনফিগারেশন প্রক্রিয়া বর্ণনা করা হল।


1. প্রাইমারি (Master) সার্ভার কনফিগারেশন

প্রথমে প্রাইমারি সার্ভারের my.cnf ফাইলে কিছু সেটিংস যোগ করতে হবে।

my.cnf ফাইলের মধ্যে নিচের কনফিগারেশন সেটিংস যোগ করুন:

[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = my_database

এখানে:

  • server-id: প্রতিটি সার্ভারের একটি ইউনিক আইডি হতে হবে। প্রাইমারি সার্ভারের জন্য এটি 1 হতে পারে।
  • log-bin: বাইনারি লগ ফাইলকে সক্রিয় করা হয়, যাতে সব ট্রানজেকশন লগ হয়ে থাকে এবং রিপ্লিকেশন করতে পারে।
  • binlog-do-db: নির্দিষ্ট ডেটাবেসের জন্য লগিং সক্ষম করে। এখানে my_database হল সেই ডেটাবেস যার জন্য রেপ্লিকেশন করতে চান।

এরপর, MariaDB সার্ভিসটি রিস্টার্ট করুন:

sudo systemctl restart mariadb

2. রিপ্লিকা (Slave) সার্ভার কনফিগারেশন

রিপ্লিকা সার্ভারে my.cnf ফাইলেও কিছু কনফিগারেশন পরিবর্তন করতে হবে।

my.cnf ফাইলে নিচের সেটিংস যোগ করুন:

[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log-bin = /var/log/mysql/mysql-bin.log
read-only = 1

এখানে:

  • server-id: রিপ্লিকার জন্য একটি আলাদা ইউনিক আইডি দিতে হবে, যেমন 2
  • relay-log: রেপ্লিকার লগ ফাইল যেখানে মূল সার্ভারের বাইনারি লগ সঞ্চিত থাকবে।
  • read-only: রিপ্লিকার উপর লেখা নিষিদ্ধ করা হয়, যাতে কেবলমাত্র রিড অপারেশন করা যায়।

এবার MariaDB সার্ভিসটি রিস্টার্ট করুন:

sudo systemctl restart mariadb

3. Master থেকে Replication User তৈরি করা

প্রাইমারি সার্ভারে একটি রিপ্লিকেশন ইউজার তৈরি করতে হবে, যাতে রিপ্লিকা সার্ভার এটির মাধ্যমে ডেটা রেপ্লিকেট করতে পারে। এই কাজটি করতে প্রাইমারি সার্ভারে লগইন করুন:

CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;

এখানে:

  • replica_user: রিপ্লিকেশন ইউজারের নাম।
  • password: ইউজারের পাসওয়ার্ড।

4. Replica সার্ভারে Replication শুরু করা

রিপ্লিকা সার্ভারে লগইন করুন এবং নিচের SQL কমান্ডটি চালান:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=  106;
START SLAVE;

এখানে:

  • MASTER_HOST: প্রাইমারি সার্ভারের IP অ্যাড্রেস।
  • MASTER_USER: পূর্বে তৈরি করা রিপ্লিকেশন ইউজারের নাম।
  • MASTER_PASSWORD: রিপ্লিকেশন ইউজারের পাসওয়ার্ড।
  • MASTER_LOG_FILE: প্রাইমারি সার্ভারের বাইনারি লগ ফাইলের নাম।
  • MASTER_LOG_POS: লগ ফাইলের পজিশন যেখানে রিপ্লিকেশন শুরু হবে।

এটি রিপ্লিকার মাধ্যমে ডেটা সিঙ্ক্রোনাইজেশন শুরু করবে।


5. Replication Status চেক করা

রিপ্লিকেশন কনফিগারেশনের সফলতা নিশ্চিত করতে, রিপ্লিকা সার্ভারে নিচের কমান্ডটি চালান:

SHOW SLAVE STATUS\G

আপনি যদি Slave_IO_Running এবং Slave_SQL_Running উভয় ক্ষেত্রেই Yes দেখতে পান, তবে রেপ্লিকেশন সঠিকভাবে কাজ করছে।


রেপ্লিকেশন ফিচার ও স্ট্র্যাটেজি

  • Master-Slave Replication: এক প্রাইমারি সার্ভার এবং এক বা একাধিক রিপ্লিকা সার্ভার থাকে, যেখানে রিপ্লিকাগুলি শুধু রিড অপারেশন সম্পাদন করে।
  • Master-Master Replication: দুইটি সার্ভার একে অপরের মাস্টার এবং রিপ্লিকা হিসাবে কাজ করে। এটি ডেটা পরিবর্তন এবং রিড অপারেশন উভয়ের জন্য ব্যবহার করা হয়।
  • Circular Replication: একাধিক সার্ভারের মধ্যে ডেটা রেপ্লিকেশন হয় এবং প্রতিটি সার্ভার অপরটির জন্য মাস্টার এবং রিপ্লিকা হিসাবে কাজ করে।

সারাংশ

মারিয়া ডিবি তে Data Replication ডেটাবেসের রেডানডেন্সি, স্কেলেবিলিটি, এবং পারফরম্যান্স বৃদ্ধির জন্য অত্যন্ত গুরুত্বপূর্ণ। এটি বিভিন্ন সার্ভারে ডেটা কপি করে ডেটাবেসের ডাউনটাইম কমাতে, লোড ব্যালান্স করতে, এবং ফেইলওভার সক্ষম করতে সহায়তা করে। রেপ্লিকেশন কনফিগারেশন প্রাইমারি এবং রিপ্লিকা সার্ভারের মধ্যে সঠিকভাবে সিঙ্ক্রোনাইজেশন নিশ্চিত করার জন্য গুরুত্বপূর্ণ। Proper configuration and management of replication settings can provide high availability and improved performance for database systems.

Content added By

Master-Slave Replication হলো একটি ডেটাবেসের কাঠামো যেখানে একটি ডেটাবেস (Master) ডেটা লিখে এবং অন্য একটি ডেটাবেস (Slave) শুধুমাত্র পড়ার জন্য সেটি কপি করে রাখে। এটি ডেটাবেসের স্কেলিং এবং রিড-ওনলি অপারেশনগুলির জন্য উপযুক্ত, যেমন রিপোর্ট তৈরি বা উচ্চ লোড সহ অনুরোধ প্রসেসিং।

মারিয়া ডিবি (MariaDB)-তে Master-Slave Replication ডেটাবেসের ডাটা রিয়েল-টাইমে একটি বা একাধিক Slave সার্ভারে কপি করে রাখার পদ্ধতি। এতে, Master সার্ভার থেকে সব রাইট অপারেশন (INSERT, UPDATE, DELETE) করা হয়, এবং Slave সার্ভারে এসব পরিবর্তন স্বয়ংক্রিয়ভাবে প্রতিফলিত হয়, তবে Slave সার্ভার শুধুমাত্র রিড অপারেশন করতে পারে।


Master-Slave Replication কনফিগারেশন সেটআপ

Master-Slave Replication কনফিগার করতে আপনাকে বেশ কিছু ধাপ অনুসরণ করতে হবে। নিচে Master এবং Slave সার্ভারের কনফিগারেশন, ইনস্টলেশন এবং কনফিগারেশন ধাপগুলো বর্ণনা করা হলো।


১. Master সার্ভার কনফিগারেশন

১.১. MariaDB কনফিগার ফাইল এডিট করা

Master সার্ভারে /etc/my.cnf বা /etc/mysql/my.cnf ফাইলটি খুলুন এবং নিচের সেটিংসগুলো যোগ করুন:

[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = your_database_name
  • server-id: এটি সার্ভারের একটি অনন্য আইডি, Master সার্ভারের জন্য 1 বা অন্য যেকোনো সংখ্যা হতে পারে।
  • log-bin: বাইনারি লগ ফাইলের লোকেশন। বাইনারি লগইনে রাইট অপারেশনগুলো ট্র্যাক হয়, যা Slave সার্ভারে রিপ্লিকেট করা হবে।
  • binlog-do-db: কেবলমাত্র যে ডেটাবেসের জন্য রিপ্লিকেশন কার্যকর হবে, তা নির্দিষ্ট করতে এই সেটিং ব্যবহার করুন।

১.২. Master সার্ভারে রিপ্লিকেশন ব্যবহারকারী তৈরি

Master সার্ভারে একটি বিশেষ ব্যবহারকারী তৈরি করতে হবে, যার মাধ্যমে Slave সার্ভার ডেটা সিঙ্ক্রোনাইজ করতে পারবে।

CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;

এখানে:

  • replica_user: Slave সার্ভার দ্বারা ব্যবহৃত হবে এমন ব্যবহারকারীর নাম।
  • password: এই ব্যবহারকারীর পাসওয়ার্ড।

১.৩. Master সার্ভারের স্ন্যাপশট নেওয়া

Master সার্ভারে SHOW MASTER STATUS কুয়েরি চালিয়ে বাইনারি লগ ফাইলের অবস্থান এবং পজিশন জানুন।

SHOW MASTER STATUS;

এটি আপনাকে File এবং Position তথ্য দেবে, যা Slave সার্ভারের কনফিগারেশনে ব্যবহৃত হবে।


২. Slave সার্ভার কনফিগারেশন

২.১. MariaDB কনফিগার ফাইল এডিট করা

Slave সার্ভারে /etc/my.cnf বা /etc/mysql/my.cnf ফাইলটি খুলুন এবং নিচের সেটিংসগুলো যোগ করুন:

[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log-bin = /var/log/mysql/mysql-bin.log
read-only = 1
  • server-id: Slave সার্ভারের জন্য একটি অনন্য আইডি, যেমন 2
  • relay-log: Relay লগ ফাইলের লোকেশন যেখানে রিপ্লিকেট করা ডেটা সঞ্চিত হবে।
  • read-only: Slave সার্ভারে লেখার অনুমতি বন্ধ করার জন্য।

২.২. Slave সার্ভারে রিপ্লিকেশন কনফিগার করা

Slave সার্ভারে CHANGE MASTER TO কুয়েরি ব্যবহার করে Master সার্ভারের তথ্য দিন:

CHANGE MASTER TO
    MASTER_HOST = 'master_ip_address',
    MASTER_USER = 'replica_user',
    MASTER_PASSWORD = 'password',
    MASTER_LOG_FILE = 'mysql-bin.000001',
    MASTER_LOG_POS =  154;

এখানে:

  • MASTER_HOST: Master সার্ভারের আইপি ঠিকানা।
  • MASTER_USER: পূর্বে তৈরি করা রিপ্লিকেশন ব্যবহারকারীর নাম।
  • MASTER_PASSWORD: রিপ্লিকেশন ব্যবহারকারীর পাসওয়ার্ড।
  • MASTER_LOG_FILE এবং MASTER_LOG_POS: Master সার্ভারের SHOW MASTER STATUS কুয়েরি থেকে প্রাপ্ত বাইনারি লগ ফাইলের নাম এবং পজিশন।

২.৩. Slave সার্ভারে রিপ্লিকেশন শুরু করা

Slave সার্ভারে রিপ্লিকেশন শুরু করতে START SLAVE কুয়েরি চালান:

START SLAVE;

২.৪. Slave সার্ভারের রিপ্লিকেশন স্ট্যাটাস চেক করা

Slave সার্ভারে রিপ্লিকেশন সঠিকভাবে চলছে কিনা তা চেক করতে:

SHOW SLAVE STATUS\G

এটি আপনাকে রিপ্লিকেশন সম্পর্কিত বিস্তারিত তথ্য দেবে। যদি Slave_IO_Running এবং Slave_SQL_Running এ মান Yes হয়, তবে রিপ্লিকেশন সঠিকভাবে কাজ করছে।


৩. Master-Slave Replication মনিটরিং এবং সমস্যা সমাধান

  1. ব্যাচ প্রক্রিয়া বা বড় ডেটা পরিবর্তন: কোনো বড় ডেটা পরিবর্তনের সময় Slave সার্ভার সিঙ্ক্রোনাইজেশন হারিয়ে ফেলতে পারে। এটি সমাধান করতে STOP SLAVE এবং START SLAVE দিয়ে রিপ্লিকেশন রিসেট করা যেতে পারে।
  2. রিপ্লিকেশন বিলম্ব: যদি রিপ্লিকেশন বিলম্বিত হয়, তবে এটি সার্ভারের হার্ডওয়্যার এবং নেটওয়ার্ক লোডের উপর নির্ভর করে। সেক্ষেত্রে, নেটওয়ার্ক কনফিগারেশন এবং সার্ভার রিসোর্সে প্রয়োজনীয় পরিবর্তন করতে হবে।
  3. রিপ্লিকেশন অব্যাহত রাখার জন্য টুল ব্যবহার: MHA (Master High Availability), Orchestrator এবং Galera Cluster মত টুল ব্যবহার করে Master-Slave Replication এর উচ্চতর স্থিতিশীলতা এবং স্বয়ংক্রিয়ভাবে failover নিশ্চিত করা যেতে পারে।

সারাংশ

MariaDB Master-Slave Replication হলো একটি কার্যকরী পদ্ধতি, যেখানে একে অপরের সাথে ডেটা সিঙ্ক্রোনাইজ করার জন্য একাধিক সার্ভার ব্যবহৃত হয়। এটি ডেটাবেসের লোড ব্যালান্সিং, ডেটা ব্যাকআপ এবং উচ্চ অ্যাভেইলেবিলিটি নিশ্চিত করতে সাহায্য করে। Master সার্ভার থেকে ডেটা রাইট করা হয় এবং Slave সার্ভারে রিড করা হয়। রিপ্লিকেশন সঠিকভাবে কাজ করছে কিনা তা নিয়মিত পর্যবেক্ষণ এবং মনিটর করা উচিত।

Content added By

Master-Master Replication হলো MariaDB-র একটি উন্নত রেপ্লিকেশন কনফিগারেশন যেখানে দুইটি MariaDB সার্ভার একে অপরকে রেপ্লিকেট করে। অর্থাৎ, এক সার্ভারকে মাস্টার (Master) হিসেবে কনফিগার করা হয় এবং একইভাবে অন্য সার্ভারকেও মাস্টার হিসেবে কনফিগার করা হয়। এতে দুইটি সার্ভারই একে অপরের ডেটা শেয়ার করে এবং একে অপরের মধ্যে সমস্ত ডেটাবেস চেঞ্জ সমন্বয় করে।

এটি মূলত উচ্চ উপলব্ধতা (High Availability) এবং লোড ব্যালান্সিংয়ের জন্য ব্যবহৃত হয়। মাস্টার-মাস্টার রেপ্লিকেশনে একটি সার্ভারের ব্যর্থতা হলেও অন্য সার্ভারটি স্বয়ংক্রিয়ভাবে কাজ চালিয়ে যেতে পারে, ফলে ডাউনটাইম কমে যায়।


Master-Master Replication কনফিগারেশন সেটআপ

Master-Master Replication কনফিগার করতে, দুইটি MariaDB সার্ভারের মধ্যে রেপ্লিকেশন প্রক্রিয়া সঠিকভাবে কনফিগার করতে হবে। সাধারণত দুইটি সার্ভারকে "master" হিসেবে কনফিগার করা হয় এবং একে অপরের ডেটা সিঙ্ক্রোনাইজ (synchronize) রাখে।


1. প্রাথমিক প্রস্তুতি

সার্ভার এক্সপ্লোরেশন

ধরা যাক, আমাদের দুটি সার্ভার রয়েছে:

  • Server1: আইপি - 192.168.1.10
  • Server2: আইপি - 192.168.1.11

2. প্রথম সার্ভারে (Server1) কনফিগারেশন

  1. my.cnf ফাইল আপডেট করুন: MariaDB-এর কনফিগারেশন ফাইল (যেমন /etc/mysql/my.cnf অথবা /etc/my.cnf) এ নিচের পরিবর্তনগুলি করুন:

    [mysqld]
    server-id = 1
    log-bin = /var/log/mysql/mysql-bin.log
    binlog-do-db = testdb
    auto_increment_increment = 2
    auto_increment_offset = 1
    
    • server-id: প্রতিটি সার্ভারের জন্য একটি ইউনিক আইডি।
    • log-bin: বাইনরি লোগ ফাইল যা রেপ্লিকেশনকে ট্র্যাক করে।
    • binlog-do-db: যে ডেটাবেসের জন্য রেপ্লিকেশন করা হবে।
    • auto_increment_increment এবং auto_increment_offset: এই সেটিংগুলো রেপ্লিকেশন চালানো সার্ভারগুলোতে AUTO_INCREMENT মান সঠিকভাবে সিঙ্ক্রোনাইজ রাখতে সাহায্য করে।
  2. MariaDB সার্ভিস রিস্টার্ট করুন: কনফিগারেশন পরিবর্তন করার পরে MariaDB সার্ভিস রিস্টার্ট করুন।

    sudo systemctl restart mariadb
    
  3. রেপ্লিকেশন ইউজার তৈরি করুন: রেপ্লিকেশন ইউজার তৈরি করতে, MariaDB-তে লগইন করুন এবং নিচের SQL কমান্ডটি চালান:

    CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
    FLUSH PRIVILEGES;
    
  4. বাইনরি লগ চেক করুন: সঠিকভাবে রেপ্লিকেশন কাজ করছে কিনা তা নিশ্চিত করতে বাইনরি লগের নাম ও অবস্থান চেক করুন।

    SHOW MASTER STATUS;
    

    এটি কিছু তথ্য দেখাবে, যেমন File এবং Position। এই তথ্যগুলি Server2-এ কনফিগারেশনে প্রয়োজন হবে।


3. দ্বিতীয় সার্ভারে (Server2) কনফিগারেশন

  1. my.cnf ফাইল আপডেট করুন: দ্বিতীয় সার্ভারের কনফিগারেশন ফাইলেও একই পরিবর্তন করুন, কিন্তু এবার server-id পরিবর্তন করে 2 দিন:

    [mysqld]
    server-id = 2
    log-bin = /var/log/mysql/mysql-bin.log
    binlog-do-db = testdb
    auto_increment_increment = 2
    auto_increment_offset = 2
    
  2. MariaDB সার্ভিস রিস্টার্ট করুন: সার্ভিস রিস্টার্ট করুন।

    sudo systemctl restart mariadb
    
  3. রেপ্লিকেশন ইউজার তৈরি করুন (যেমন Server1-এ তৈরি করা হয়েছে): দ্বিতীয় সার্ভারে একই রেপ্লিকেশন ইউজার তৈরি করুন।

    CREATE USER 'repl_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
    FLUSH PRIVILEGES;
    
  4. স্লেভ কনফিগারেশন সেট করা: এখন, দ্বিতীয় সার্ভারটি প্রথম সার্ভারের সাথে সিঙ্ক্রোনাইজ করার জন্য CHANGE MASTER TO কমান্ডটি ব্যবহার করুন। প্রথম সার্ভারের থেকে File এবং Position মানটি ব্যবহার করতে হবে:

    CHANGE MASTER TO
    MASTER_HOST='192.168.1.10',
    MASTER_USER='repl_user',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=  154;
    

    এখানে MASTER_LOG_FILE এবং MASTER_LOG_POS প্রথম সার্ভারে SHOW MASTER STATUS কমান্ডের আউটপুট থেকে পাওয়া যায়।

  5. রেপ্লিকেশন চালু করুন: রেপ্লিকেশন চালু করার জন্য স্লেভ স্ট্যাটাস চেক করুন এবং স্লেভ চালু করুন:

    START SLAVE;
    SHOW SLAVE STATUS\G
    

    এটি নিশ্চিত করবে যে রেপ্লিকেশন সঠিকভাবে কাজ করছে। যদি সব কিছু ঠিক থাকে, তাহলে Slave_IO_Running এবং Slave_SQL_Running দুটি ফিল্ডে Yes দেখা যাবে।


4. মাস্টার-মাস্টার রেপ্লিকেশন সম্পন্ন

এখন, Server1 এবং Server2 দুটি সার্ভারই একে অপরকে রেপ্লিকেট করছে। অর্থাৎ, আপনি যে কোনও সার্ভারে ডেটা পরিবর্তন করলে তা অন্য সার্ভারে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ হয়ে যাবে।


5. মাস্টার-মাস্টার রেপ্লিকেশন ব্যবস্থাপনা

মাস্টার-মাস্টার রেপ্লিকেশন চালানোর সময় কিছু গুরুত্বপূর্ণ বিষয় খেয়াল রাখতে হবে:

  • ডেটা কনফ্লিক্ট: একই ডেটাতে দুটি পরিবর্তন যদি একে অপরকে রেপ্লিকেট করা হয়, তবে ডেটা কনফ্লিক্ট হতে পারে। এজন্য সঠিকভাবে auto_increment_offset এবং auto_increment_increment কনফিগার করা গুরুত্বপূর্ণ।
  • লগিং এবং মনিটরিং: রেপ্লিকেশন সঠিকভাবে কাজ করছে কিনা তা মনিটর করতে নিয়মিতভাবে SHOW SLAVE STATUS চেক করা উচিত।
  • ফেলওভার কনফিগারেশন: মাস্টার-মাস্টার রেপ্লিকেশনে যদি এক সার্ভার ডাউন হয়ে যায়, তাহলে অন্য সার্ভারটি ট্রাফিক পরিচালনা করতে সক্ষম থাকবে, তবে সিস্টেমে কোনো রকমের সমস্যা এড়ানোর জন্য অতিরিক্ত মনিটরিং ব্যবস্থা দরকার।

সারাংশ

MariaDB-তে Master-Master Replication একটি শক্তিশালী রেপ্লিকেশন কনফিগারেশন, যেখানে দুইটি সার্ভার একে অপরকে রেপ্লিকেট করে। এটি উচ্চ উপলব্ধতা এবং লোড ব্যালান্সিংয়ের জন্য ব্যবহৃত হয়, এবং সঠিক কনফিগারেশন ও মনিটরিংয়ের মাধ্যমে সিস্টেমের স্থিতিশীলতা বজায় রাখা যায়। দুটি সার্ভারের মধ্যে রেপ্লিকেশন কার্যকর করতে my.cnf ফাইলের কনফিগারেশন, ইউজার ক্রিয়েশন এবং স্লেভ কনফিগারেশন গুরুত্বপূর্ণ পদক্ষেপ।


Content added By

MariaDB-তে রিপ্লিকেশন হল একটি ডেটাবেস সিস্টেমের মধ্যে ডেটা কপি করার প্রক্রিয়া, যেখানে এক বা একাধিক স্লেভ সার্ভারে মূল (Master) সার্ভারের ডেটা সিঙ্ক্রোনাইজ করা হয়। MariaDB-তে রিপ্লিকেশন দুটি প্রধান পদ্ধতিতে কার্যকর করা যায়: Asynchronous Replication এবং Semi-Synchronous Replication


Asynchronous Replication

Asynchronous Replication (এনভেন্ট বা আসিঙ্ক্রোনাস রিপ্লিকেশন) হল MariaDB-তে সবচেয়ে সাধারণ এবং প্রচলিত রিপ্লিকেশন মডেল। এই মডেলে, মূল সার্ভার (Master) ক্লায়েন্টের রিকোয়েস্ট সম্পন্ন করার পর স্লেভ সার্ভারগুলোতে ডেটা রেপ্লিকেট হয়। এর মানে হল যে, মূল সার্ভার ডেটা পরিবর্তন করার পর তা স্লেভ সার্ভারে পৌঁছানোর জন্য অপেক্ষা না করেই মূল সার্ভার তার কাজ চালিয়ে যায়।

বিশেষ বৈশিষ্ট্য:

  • ব্লকিং নয়: মূল সার্ভার স্লেভের জন্য অপেক্ষা না করে তার কার্যক্রম অব্যাহত রাখে।
  • ডেটা বিলম্ব: স্লেভে ডেটা পৌঁছানোর ক্ষেত্রে কিছু বিলম্ব থাকতে পারে, কারণ রিপ্লিকেশন পদ্ধতি আসিঙ্ক্রোনাস (অর্থাৎ ডেটা একসাথে সিঙ্ক্রোনাইজ হয় না)।
  • পারফরম্যান্স: Asynchronous Replication সাধারণত উচ্চ পারফরম্যান্স প্রদান করে, কারণ এতে স্লেভ সার্ভারের জন্য অপেক্ষা করার প্রয়োজন নেই।

Asynchronous Replication-এ কিভাবে কাজ করে:

  1. মূল সার্ভার ডেটা পরিবর্তন করলে, পরিবর্তিত ডেটার একটি লগ এন্ট্রি binlog-এ লিখা হয়।
  2. স্লেভ সার্ভার periodically (নিয়মিত সময় পর) binlog থেকে ডেটা পড়ে এবং আপডেট গ্রহণ করে।
  3. মূল সার্ভার কাজ চালিয়ে যায়, স্লেভ সার্ভার ডেটা গ্রহণ করার পরে তার হালনাগাদ হয়।

Asynchronous Replication ব্যবহার:

Asynchronous Replication সাধারণত Read-Replica বা Data Distribution সিস্টেমে ব্যবহৃত হয়, যেখানে ডেটা বিলম্ব সহ গ্রহণ করা যেতে পারে এবং সিস্টেমের পারফরম্যান্স বড়ো কাজের সময় গুরুত্বপূর্ণ হয়।


Semi-Synchronous Replication

Semi-Synchronous Replication (সেমি-সিঙ্ক্রোনাস রিপ্লিকেশন) হল MariaDB-তে একটি উন্নত রিপ্লিকেশন পদ্ধতি, যেখানে মূল সার্ভার স্লেভ সার্ভারের সাথে সমন্বয় রেখে কাজ করে। এই মডেলে, মূল সার্ভার ডেটা স্লেভ সার্ভারে প্রেরণ করার পর, স্লেভ সার্ভারের নিশ্চিতকরণ (acknowledgement) পাওয়ার আগ পর্যন্ত মূল সার্ভার তার কার্যক্রম বন্ধ রাখে। অর্থাৎ, মূল সার্ভার স্লেভে ডেটা প্রেরণ করার পর, স্লেভ সার্ভার নিশ্চিত না করলে মূল সার্ভার পরবর্তী রিকোয়েস্ট প্রক্রিয়া শুরু করবে না।

বিশেষ বৈশিষ্ট্য:

  • আংশিক সিঙ্ক্রোনাইজেশন: মূল সার্ভার স্লেভ সার্ভারের জন্য অপেক্ষা করে, তবে স্লেভ সার্ভারের সংখ্যা একের বেশি হলে কেবলমাত্র একটি সার্ভারের উত্তর পাওয়ার পর মূল সার্ভার তার কাজ চালিয়ে যেতে পারে।
  • ডেটা সিঙ্ক্রোনাইজেশন: স্লেভ সার্ভারে ডেটা পৌঁছানোর সময় বিলম্ব কম থাকে।
  • পারফরম্যান্স: এটি কিছুটা পারফরম্যান্স কমাতে পারে, কারণ মূল সার্ভার স্লেভ সার্ভারের উত্তর পাওয়ার জন্য অপেক্ষা করে।

Semi-Synchronous Replication-এ কিভাবে কাজ করে:

  1. মূল সার্ভার ডেটা পরিবর্তন করলে, তা binlog-এ লিখে স্লেভ সার্ভারে প্রেরণ করে।
  2. স্লেভ সার্ভার মূল সার্ভারকে নিশ্চিত করে জানায় যে, সে ডেটা গ্রহণ করেছে (এই পদ্ধতিতে স্লেভের নিশ্চিতকরণ অপরিহার্য)।
  3. নিশ্চিতকরণের পর মূল সার্ভার তার পরবর্তী কাজ শুরু করে।

Semi-Synchronous Replication ব্যবহার:

Semi-Synchronous Replication ব্যবহৃত হয় যেখানে ডেটার সঠিকতা এবং সামঞ্জস্যতা অত্যন্ত গুরুত্বপূর্ণ এবং ডেটা বিলম্ব সহ্যযোগ্য নয়, যেমন ব্যাকআপ সার্ভার বা মিশন-ক্রিটিকাল সিস্টেমে।


Asynchronous এবং Semi-Synchronous Replication এর মধ্যে পার্থক্য

বৈশিষ্ট্যAsynchronous ReplicationSemi-Synchronous Replication
রিপ্লিকেশন মডেলএকদম আসিঙ্ক্রোনাস (অ্যাকনলেজমেন্ট ছাড়া)আংশিক সিঙ্ক্রোনাস (অ্যাকনলেজমেন্ট প্রয়োজন)
পারফরম্যান্সউচ্চ (কোনও বিলম্ব নেই)কম (স্লেভ সার্ভারের অ্যাকনলেজমেন্ট অপেক্ষা করা হয়)
ডেটা বিলম্বস্লেভে ডেটা পৌঁছানোর বিলম্ব থাকতে পারেডেটা বিলম্ব কম থাকে, কারণ স্লেভের উত্তর প্রয়োজন
সিস্টেম স্থিতিশীলতাকিছুটা কম স্থিতিশীলতা (স্লেভ সার্ভারটি সিঙ্ক্রোনাইজ হতে কিছু বিলম্ব হতে পারে)উচ্চ স্থিতিশীলতা (ডেটা সিঙ্ক্রোনাইজ হয় বেশি দ্রুত এবং নির্ভুলভাবে)
ব্যবহার ক্ষেত্রRead replicas, Data distributionমিশন-ক্রিটিকাল অ্যাপ্লিকেশন, ব্যাকআপ সার্ভার
নির্ভুলতান্যূনতম (ডেটা বিলম্ব বা হারানো হতে পারে)উচ্চ (এখানে ডেটা হারানোর সম্ভাবনা কম)

MariaDB-তে Semi-Synchronous এবং Asynchronous Replication কনফিগারেশন

Asynchronous Replication কনফিগারেশন

Asynchronous Replication ব্যবহারের জন্য, MariaDB-তে মূল সার্ভারে log-bin এবং স্লেভ সার্ভারে replicate কনফিগারেশন সেট করা হয়।

মূল সার্ভারের কনফিগারেশন (my.cnf):

[mysqld]
log-bin
server-id = 1

স্লেভ সার্ভারের কনফিগারেশন (my.cnf):

[mysqld]
server-id = 2
replicate-do-db = your_database_name

Semi-Synchronous Replication কনফিগারেশন

Semi-Synchronous Replication ব্যবহার করতে, MariaDB-তে rpl_semi_sync_master_enabled এবং rpl_semi_sync_slave_enabled ভেরিয়েবলগুলি চালু করতে হবে।

মূল সার্ভারের কনফিগারেশন (my.cnf):

[mysqld]
rpl_semi_sync_master_enabled = 1
server-id = 1
log-bin

স্লেভ সার্ভারের কনফিগারেশন (my.cnf):

[mysqld]
rpl_semi_sync_slave_enabled = 1
server-id = 2

মূল সার্ভারে সেমি-সিঙ্ক্রোনাস রিপ্লিকেশন সক্রিয় করতে:

SET GLOBAL rpl_semi_sync_master_enabled = 1;

স্লেভ সার্ভারে সেমি-সিঙ্ক্রোনাস রিপ্লিকেশন সক্রিয় করতে:

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

সারাংশ

MariaDB-তে Asynchronous Replication এবং Semi-Synchronous Replication দুটি আলাদা ধরনের রিপ্লিকেশন পদ্ধতি। Asynchronous Replication সাধারণত উচ্চ পারফরম্যান্স প্রদান করে এবং স্লেভ সার্ভারে ডেটা সিঙ্ক্রোনাইজ করার জন্য অপেক্ষা করে না, ফলে কিছু বিলম্ব হতে পারে। অন্যদিকে, Semi-Synchronous Replication ডেটা সিঙ্ক্রোনাইজ করার জন্য স্লেভ সার্ভারের নিশ্চিতকরণ প্রাপ্তির পর পরবর্তী পদক্ষেপ নেয়, যার ফলে ডেটা সিঙ্ক্রোনাইজেশন অধিক নির্ভুল এবং স্লেভ সার্ভারে দ্রুত পৌঁছায়।

Content added By
Promotion

Are you sure to start over?

Loading...