Master-Master Replication MySQL এর একটি বিশেষ কনফিগারেশন, যেখানে দুটি MySQL সার্ভার একে অপরকে রেপ্লিকেট করে, অর্থাৎ একটি সার্ভার Master হিসাবে কাজ করে এবং অপরটি একইভাবে Master হয়ে অন্য সার্ভারকে রেপ্লিকেট করে। এটি একটি দ্বৈত রেপ্লিকেশন কনফিগারেশন, যেখানে দুটি সার্ভারই একে অপরের ডেটা সিঙ্ক্রোনাইজ করে। এতে করে ডেটাবেসের উচ্চ অ্যাভেইলেবিলিটি এবং ব্যালান্সড লোড অর্জন করা যায়।
Master-Master Replication কেন প্রয়োজন?
- হাই অ্যাভেইলেবিলিটি (High Availability):
- এক সার্ভার ডাউন হলে, অন্য সার্ভারটি কাজ চালিয়ে যেতে পারে, যাতে সিস্টেমের কোনো বিঘ্ন ঘটবে না।
- লোড ব্যালান্সিং:
- দুইটি সার্ভারের মধ্যে ডেটার আপডেট সমানভাবে ভাগ করে নেওয়া হয়, ফলে লোড ব্যালান্সিংয়ের মাধ্যমে কর্মক্ষমতা বৃদ্ধি পায়।
- ডেটাবেসের অ্যাক্সেস পাথ:
- ব্যবহারকারীরা উভয় সার্ভার থেকে ডেটা অ্যাক্সেস করতে পারেন, যা সার্ভার একটিতে ব্যর্থ হলে অন্যটি স্বয়ংক্রিয়ভাবে কাজ চালিয়ে যায়।
Master-Master Replication কনফিগারেশন
ধাপ ১: প্রাথমিক প্রস্তুতি
আপনার দুটি সার্ভারে MySQL ইনস্টল করা থাকা উচিত এবং উভয় সার্ভারের মধ্যে নেটওয়ার্ক কানেকটিভিটি থাকতে হবে। এর মধ্যে একটি সার্ভার "Master1" এবং অন্যটি "Master2" হিসেবে কাজ করবে।
MySQL ইনস্টল করুন:
- দুইটি সার্ভারে MySQL ইনস্টল করা থাকতে হবে। যদি না থাকে, তবে আপনি MySQL ইনস্টল করে নিন:
sudo apt-get update sudo apt-get install mysql-server- নেটওয়ার্ক কানেকটিভিটি:
- নিশ্চিত করুন যে সার্ভার দুটি একে অপরকে পিং করতে পারে এবং পোর্ট 3306 খোলা আছে।
ধাপ ২: MySQL কনফিগারেশন ফাইল সম্পাদনা
Master1 এবং Master2 উভয় সার্ভারের জন্য একই কনফিগারেশন প্রক্রিয়া অনুসরণ করতে হবে।
MySQL কনফিগারেশন ফাইল সম্পাদনা:
my.cnfফাইলটি প্রতিটি সার্ভারে সম্পাদনা করুন:sudo nano /etc/mysql/my.cnfকনফিগারেশন ফাইলে নিচের লাইনগুলো যোগ করুন (প্রতিটি সার্ভারে আলাদা আলাদা আইডি এবং লোকাল আইপি ব্যবহার করবেন):
Master1:
[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog-do-db = my_database replicate-same-server-id = 0 auto_increment_increment = 2 auto_increment_offset = 1Master2:
[mysqld] server-id = 2 log_bin = /var/log/mysql/mysql-bin.log binlog-do-db = my_database replicate-same-server-id = 0 auto_increment_increment = 2 auto_increment_offset = 2server-id: প্রতিটি সার্ভারের জন্য ইউনিক আইডি দিতে হবে।log_bin: বাইনারি লগ ফাইলটি সক্রিয় করতে হবে যাতে রেপ্লিকেশন সম্ভব হয়।binlog-do-db: আপনি কোন ডেটাবেসের জন্য রেপ্লিকেশন করতে চান তা নির্ধারণ করুন।auto_increment_incrementএবংauto_increment_offset: এই সেটিংগুলি নিশ্চিত করে যে ইনক্রিমেন্টাল ID গুলি দুটি সার্ভারের মধ্যে সংঘর্ষ করবে না।
MySQL সার্ভিস রিস্টার্ট করুন:
কনফিগারেশন পরিবর্তনের পর, MySQL সার্ভিস রিস্টার্ট করুন:
sudo systemctl restart mysql
ধাপ ৩: ইউজার এবং রেপ্লিকেশন সিড তৈরী করা
প্রতিটি সার্ভারের জন্য একটি রেপ্লিকেশন ইউজার তৈরি করতে হবে, যাতে সার্ভার দুটি একে অপরকে রেপ্লিকেট করতে পারে।
Master1 (অথবা Master2) এ ইউজার তৈরি করুন:
MySQL-এ লগইন করুন:
mysql -u root -pরেপ্লিকেশন ইউজার তৈরি করুন:
CREATE USER 'replica'@'%' IDENTIFIED BY 'replica_password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;Master1 এ সিড (Binlog Position) সংগ্রহ করুন:
রেপ্লিকেশন শুরু করার জন্য Master1 এর বাইনারি লগ পজিশন সংগ্রহ করতে হবে:
SHOW MASTER STATUS;এটি আপনাকে
FileএবংPositionনামের দুটি ফিল্ড প্রদান করবে। এই মানগুলি Master2 সার্ভারে ব্যবহার করতে হবে।
ধাপ ৪: Slave Configuration
এখন Master2 সার্ভারে রেপ্লিকেশন কনফিগার করুন। প্রথমে Master1 এর বাইনারি লগ পজিশন ব্যবহার করে রেপ্লিকেশন শুরু করুন।
Master2 এ রেপ্লিকেশন কনফিগার করুন:
MySQL-এ লগইন করুন:
mysql -u root -pরেপ্লিকেশন কনফিগারেশন সেট করুন:
CHANGE MASTER TO MASTER_HOST = 'Master1_IP', MASTER_USER = 'replica', MASTER_PASSWORD = 'replica_password', MASTER_LOG_FILE = 'mysql-bin.000001', -- 'File' এর মান MASTER_LOG_POS = 123; -- 'Position' এর মানSlave শুরু করুন:
START SLAVE;Slave status চেক করুন:
রেপ্লিকেশন সঠিকভাবে চলছে কিনা তা দেখতে:
SHOW SLAVE STATUS\Gএখানে
Slave_IO_RunningএবংSlave_SQL_Runningদুটি ফিল্ডের মানYesহওয়া উচিত।
ধাপ ৫: Master2 থেকে Master1 এ রেপ্লিকেশন কনফিগার করুন
এখন Master2 থেকে Master1 এর রেপ্লিকেশন কনফিগার করুন। পুনরায় উপরের ধাপ অনুসরণ করুন, তবে এবার MASTER_HOST = 'Master2_IP' হবে এবং প্রয়োজনীয় File ও Position মানগুলি ব্যবহার করুন।
ধাপ ৬: রেপ্লিকেশন যাচাই
ডেটা আপডেট করুন এবং যাচাই করুন:
এখন আপনি Master1 এবং Master2 উভয় সার্ভারে ডেটা আপডেট করে পরীক্ষা করতে পারেন। উদাহরণস্বরূপ:
INSERT INTO my_database.my_table (column1, column2) VALUES ('value1', 'value2');এই আপডেটটি দুইটি সার্ভারেই সিঙ্ক্রোনাইজ হবে।
টেবিলের ডেটা চেক করুন:
উভয় সার্ভারে
SELECTকরে দেখুন যে ডেটা সিঙ্ক্রোনাইজ হয়েছে কি না।SELECT * FROM my_database.my_table;
সারাংশ
MySQL Master-Master Replication কনফিগারেশন দুটি সার্ভারের মধ্যে ডেটা সিঙ্ক্রোনাইজেশন বজায় রাখতে সাহায্য করে এবং এটি হাই অ্যাভেইলেবিলিটি ও লোড ব্যালান্সিং নিশ্চিত করে। এই কনফিগারেশনে প্রতিটি সার্ভারই একে অপরকে রেপ্লিকেট করে এবং দুটি সার্ভারই Master হিসেবে কাজ করে, ফলে ডেটা রিড এবং রাইট অ্যাক্সেস একে অপরের সাথে ভাগ করা যায়।
Read more