آموزش ایجاد Master-to-Master Replication در MariaDB

 

 

در این آموزش قصد داریم به بحث sql master-to-master replication بپردازیم، اگر نمیدانید که replication به شیوه master-to-master چیست در ادامه در این آموزش با ما همراه باشید تا هم نحوه ایجاد و هم با این نوع replication آشنا شوید. در این شیوه اجازه داده می‌شود که اطلاعات و داده ها توسط گروهی از سرورها ذخیره شوند و در هر زمان با آپدیت شدن این اطلاعات در هر کدام از این سرورها اطلاعات و داده‌های ما بروزرسانی و آپدیت شود.

در مثال زیر ما از دو سرور استفاده می‌کنیم و همزمان در پیکربندی این سرورها آنها را Master و slave یکدیگر قرار می‌دهیم.

موارد مورد نیاز ایجاد master-to-master replication

برای آموزش پیش رو ما فرض می‌کنیم که شما موارد زیر را در اختیار دارید و می‌توانید آن‌ها پیکربندی نمایید.

  • دو سرور با دیتابیس MariaDB که از پیش نصب شده باشد.
  • یک دیتابیس نمونه
  • دسترسی روت به سرور
  • کلاینت SSH

در ادامه روند آموزش ما نام دیتابیس سمپل را replicate.db در نظر گرفته‌ایم. این دیتابیس در شروع آموزش اطلاعاتی در خود ندارد. اگر تمامی موارد بالا را در اختیار دارید می‌توانیم به سراغ ایجاد master-to-master replication برویم.

 

پیکربندی سرور A

این سرور قرار است اولین Master server ما باشد و باید آن را برای پروسه replication و فعال کردن آن آماده نماییم. برای این منظور دستور زیر را اجرا نمایید.

sudo nano /etc/my.cnf

در بخش [mysqld] باید بخش‌های زیر را اضافه نمایید.

log-bin
server_id=1
replicate-do-db=replicate
bind-address=192.168.0.12

سپس sql سرور خود را دوباره راه اندازی نمایید.

systemctl restart mariadb

به MariaDB خود با دسترسی روت لاگین نمایید. و یک یوزر master با دسترسی‌های مورد نیاز ایجاد نمایید.

CREATE USER '$master_username'@'%' IDENTIFIED BY '$master_password';
GRANT REPLICATION SLAVE ON *.* TO '$master_username'@'%';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;

کامند ‘SHOW MASTER STATUS’  لاگ باینری فعلی موقعیتی که master باید از آن replication را شروع نماید را نشان می‌دهد. مانند زیر:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB|
+------------------+----------+--------------+------------------+
| mariadb-bin.000001 |      626 |            |                 |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

در نظر داشته باشید که موقعیت و فایل مورد نظر ر ا به خاطر بسپارید و ذخیره نمایید چون بعدا به آن نیاز خواهید داشت.

 

پیکربندی سرور B

قبل از شروع پروسه replication توجه داشته باشید که دیتابیس ساخته شده در سرور A را کپی نموده و به اینجا منتقل نمایید. این سرور دومین master سرور ما می‌باشد و برای عملیات replication باید آن را پیکربندی نماییم. برای شروع مثل قبل دوباره از دستور:

sudo nano /etc/my.cnf

در بخش [mysqld] باید بخش‌های زیر را اضافه نمایید.

log-bin
server_id=2
replicate-do-db=replicate
bind-address=192.168.0.15

سپس sql سرور خود را دوباره راه اندازی نمایید.

systemctl restart mariadb

مانند قبل به صورت روت به دیتابیس خود متصل شوید و یک یوزر master با دسترسی‌های مورد نیاز ایجاد نمایید.

CREATE USER '$master_username'@'%' IDENTIFIED BY '$master_password';
GRANT REPLICATION SLAVE ON *.* TO '$master_username'@'%';
FLUSH PRIVILEGES;

قدم بعدی شامل بعضی از اطلاعات سرور A می‌شود که باید در سرور B نیز وارد شوند برای وارد نمودن این اطلاعات باید مانند زیر عمل نمایید.

SLAVE STOP;
CHANGE MASTER TO MASTER_HOST = '192.168.0.12', MASTER_USER = '$master_username', MASTER_PASSWORD = '$master_password', MASTER_LOG_FILE = 'mariadb-bin.000001', MASTER_LOG_POS = 626;
SLAVE START;

قدم آخری که در سرور B باید برای تکمیل مراحل replication انجام دهیم تا اطلاعات را دریافت نماید بر مستر لاگ ذخیره کند و به سرور A ارسال نماید.

SHOW MASTER STATUS;

دستور ‘SHOW MASTER STATUS’ لاگ باینری فعلی موقعیتی که master باید از آن replication را شروع نماید را نشان می‌دهد. مانند زیر:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB|
+------------------+----------+--------------+------------------+
| mariadb-bin.000002 |      635 |            |                 |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

در نظر داشته باشید که موقعیت و فایل مورد نظر ر ا به خاطر بسپارید و ذخیره نمایید چون بعدا به آن نیاز خواهید داشت.

کامل کردن replication بر روی سرور A

برای اتمام پروسه replication نیاز است که به سرور A وارد شوید و در MariaDB لاگین نمایید تا اطلاعتی که از سرور B دریافت کردیم را در این سرور وارد نماییم برای این منظور مانند زیر عمل نمایید:

SLAVE STOP;
CHANGE MASTER TO MASTER_HOST = '192.168.0.15', MASTER_USER = '$master_username', MASTER_PASSWORD = '$master_password', MASTER_LOG_FILE = 'mariadb-bin.000002', MASTER_LOG_POS = 635;
SLAVE START;

 

بررسی عملکرد درست master-to-master

حالا که تمام پیکربندی‌ها کامل شد نیاز است که بررسی کنیم که آیا سیستم به درستی کار می‌کند یا نه؟ برای این منظور به سرو A لاگین می‌نماییم و وارد دیتابیس MariaDB می‌شویم، حالا یک جدول در دیتابیس replicate.db می‌سازیم.

CREATE TABLE replicate.sample (`name` varchar(18));

حالا وارد سرور B شوید در این سرور نیز باید جدول ساخته شده را مشاهده نمایید.

SHOW TABLES IN replicate;

که به صورت زیر نمایش داده می‌شود:

+---------------------+
| Tables_in_replicate |
+---------------------+
| sample              |
+---------------------+
1 row in set (0.00 sec)

برای اینکه مطمئن شوید بر روی سرور B نیز این امر امکان پذیر است می‌توانید مانند عملیات بالا را برای سرور B نیز انجام دهید.