در این آموزش قصد داریم به بحث sql master-to-master replication بپردازیم، اگر نمیدانید که replication به شیوه master-to-master چیست در ادامه در این آموزش با ما همراه باشید، تا هم نحوه ایجاد و هم با این نوع replication آشنا شوید.
در این شیوه اجازه داده میشود که اطلاعات و داده ها توسط گروهی از سرورها ذخیره شوند و در هر زمان با آپدیت شدن این اطلاعات در هر کدام از این سرورها اطلاعات و دادههای ما بروزرسانی و آپدیت شود. در مثال زیر ما از دو سرور استفاده میکنیم و همزمان در پیکربندی این سرورها آنها را Master و slave یکدیگر قرار میدهیم.
replication چیست
قبل از هرچیزی، به صورت مختصر به بررسی معنی کلمه Replication میرسیم، کلمه Replication، به معنی تشکیل کپیها یا Replicaها از یک استوریج (storage)، روی استوریج (مخزن اطلاعات) دیگری است، تا در صورت بروز خرابی و حادثه، کپی از اطلاعات موجود باشد و دادهها به صورت دائمی پاک نشوند. مکان این دستگاهها ممکن است از شهر یا کشور متفاوتی باشد.
استفاده از Replication، خصوصا برای شرکتهایی که اطلاعات مهم – mission critical data دارند بسیار مهم است. در پیاده سازی ریپلیکیشن باید تستهای لازم انجام شود و بررسی شود که آیا پهنای باند لازم برای این کار فراهم است یا خیر.
موارد مورد نیاز ایجاد master-to-master replication
برای آموزش پیش رو ما فرض میکنیم که شما موارد زیر را در اختیار دارید و میتوانید آنها پیکربندی نمایید.
- دو سرور با دیتابیس MariaDB که از پیش نصب شده باشد.
- یک دیتابیس نمونه
- دسترسی روت به سرور
- کلاینت SSH
در ادامه روند آموزش ما نام دیتابیس نمونه را replicate.db در نظر گرفتهایم. این دیتابیس در شروع آموزش اطلاعاتی در خود ندارد. اگر تمامی موارد بالا را در اختیار دارید میتوانیم به سراغ ایجاد master-to-master replication برویم.
پیکربندی سرور A
این سرور قرار است اولین Master server ما باشد و باید آن را برای پروسه replication و فعال کردن آن آماده نماییم. برای این منظور دستور زیر را اجرا نمایید.
1 |
sudo nano /etc/my.cnf |
در بخش [mysqld]
باید بخشهای زیر را اضافه نمایید.
1 2 3 4 |
log-bin server_id=1 replicate-do-db=replicate bind-address=192.168.0.12 |
سپس sql سرور خود را دوباره راه اندازی نمایید.
1 |
systemctl restart mariadb |
به MariaDB خود با دسترسی روت لاگین نمایید. و یک یوزر master با دسترسیهای مورد نیاز ایجاد نمایید.
1 |
CREATE USER '$master_username'@'%' IDENTIFIED BY '$master_password'; |
1 |
GRANT REPLICATION SLAVE ON *.* TO '$master_username'@'%'; |
1 |
FLUSH PRIVILEGES; |
1 |
SHOW MASTER STATUS; |
کامند ‘SHOW MASTER STATUS’ لاگ باینری فعلی موقعیتی که master باید از آن replication را شروع نماید را نشان میدهد. مانند زیر:
1 2 3 4 5 6 |
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB| +------------------+----------+--------------+------------------+ | mariadb-bin.000001 | 626 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) |
در نظر داشته باشید که موقعیت و فایل مورد نظر ر ا به خاطر بسپارید و ذخیره نمایید چون بعدا به آن نیاز خواهید داشت.
پیکربندی سرور B
قبل از شروع پروسه replication توجه داشته باشید که دیتابیس ساخته شده در سرور A را کپی نموده و به اینجا منتقل نمایید. این سرور دومین master سرور ما میباشد و برای عملیات replication باید آن را پیکربندی نماییم. برای شروع مثل قبل دوباره از دستور:
1 |
sudo nano /etc/my.cnf |
در بخش [mysqld]
باید بخشهای زیر را اضافه نمایید.
1 2 3 4 |
log-bin server_id=2 replicate-do-db=replicate bind-address=192.168.0.15 |
سپس sql سرور خود را دوباره راه اندازی نمایید.
1 |
systemctl restart mariadb |
مانند قبل به صورت روت به دیتابیس خود متصل شوید و یک یوزر master با دسترسیهای مورد نیاز ایجاد نمایید.
1 |
CREATE USER '$master_username'@'%' IDENTIFIED BY '$master_password'; |
1 |
GRANT REPLICATION SLAVE ON *.* TO '$master_username'@'%'; |
1 |
FLUSH PRIVILEGES; |
قدم بعدی شامل بعضی از اطلاعات سرور A میشود که باید در سرور B نیز وارد شوند برای وارد نمودن این اطلاعات باید مانند زیر عمل نمایید.
1 |
SLAVE STOP; |
1 |
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; |
1 |
SLAVE START; |
قدم آخری که در سرور B باید برای تکمیل مراحل replication انجام دهیم تا اطلاعات را دریافت نماید بر مستر لاگ ذخیره کند و به سرور A ارسال نماید.
1 |
SHOW MASTER STATUS; |
دستور ‘SHOW MASTER STATUS‘ لاگ باینری فعلی موقعیتی که master باید از آن replication را شروع نماید را نشان میدهد. مانند زیر:
1 2 3 4 5 6 |
+------------------+----------+--------------+------------------+ | 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 دریافت کردیم را در این سرور وارد نماییم برای این منظور مانند زیر عمل نمایید:
1 |
SLAVE STOP; |
1 |
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; |
1 |
SLAVE START; |
بررسی عملکرد درست master-to-master
حالا که تمام پیکربندیها کامل شد نیاز است که بررسی کنیم که آیا سیستم به درستی کار میکند یا نه؟ برای این منظور به سرو A لاگین مینماییم و وارد دیتابیس MariaDB میشویم، حالا یک جدول در دیتابیس replicate.db میسازیم.
1 |
CREATE TABLE replicate.sample (`name` varchar(18)); |
حالا وارد سرور B شوید در این سرور نیز باید جدول ساخته شده را مشاهده نمایید.
1 |
SHOW TABLES IN replicate; |
که به صورت زیر نمایش داده میشود:
1 2 3 4 5 6 |
+---------------------+ | Tables_in_replicate | +---------------------+ | sample | +---------------------+ 1 row in set (0.00 sec) |
برای اینکه مطمئن شوید بر روی سرور B نیز این امر امکان پذیر است میتوانید مانند عملیات بالا را برای سرور B نیز انجام دهید.
بدون دیدگاه