راه اندزای MYSQL به صورت MASTER-MASTER

دیتا بیس ها میتونن به صورت Standalone باشند یا با هم در ارتباط باشن وقتی با هم در ارتباط باشن میتونن به صورت های MASTER-SLAVE یا MASTER-MASTER باشن در حالت اول روی سرور مستر عملیات خواندن و نوشتن انجام میشه و روی سرورهای SLAVE فقط خواندن انجام میشه در حالت دوم روی هر دوتا سرور عملیات خواندن و نشتن انجام میشه .صورت مسئلهچون دوتا سرور فیزیکی داریم و این دوتا از طریق SAN Storage به هم وصل نیستن و دوست داریم که Redundancy داشته باشیم از حالت master-master استفاده میکنیم تا وب اپ ها از روی دوتا سرور بتونن روی هر دوتا دیتابیس بنویسند .برای راه اندازی از دوتا سرور Cent Os 7 و دیتا بیس Maria Db ورژن 10.3 استفاده کردیم.برای نصب Maria DB روی Cent Os اول باید ریپازیتوری زیر رو اد کنید /etc/yum.repos.d/MariaDB.repoبعد محتویات زیر رو بریزید توش [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1بعد هم دستور زیر yum updateبعد هم دستور yum install MariaDB-server MariaDB-clien بعد از نصب دستور زیر رو اجرا کنید و کلمه عبور ست کنید mysql_secure_installation و ادامه ماجرا روی سرور اول بعد از نصب سرویس mariadb رو استپ کنید (مطمین باشید که استپ هست )systemctl stop mariadbبعد به مسیر زیر برید و فایل my.cnf رو ویرایش کنید ./etc/my.cnfو قسمت Mysql رو به صورت زیر تغییر بدید :# bind-address = 127.0.0.1 server-id = 61 report_host = master1 log_bin = /var/log/mariadb/mariadb-bin log_bin_index = /var/log/mariadb/mariadb-bin.index relay_log = /var/log/mariadb/relay-bin relay_log_index = /var/log/mariadb/relay-bin.index # replicate-do-db = testdb auto_increment_increment = 5 auto_increment_offset = 1و بعد سرویس رو استارت میکنیم systemctl stop mariadbحالا وارد محیط Mysql میشیم mysql -uroot -p بعد از ورود یک یوزر میسازیم MariaDB [(none)]> create user 'replusr'@'%' identified by 'replusr'; و دسترسی میدیم بش MariaDB [(none)]> grant replication slave on *.* to 'replusr'@'%'; حالا وضعیت مستر رو بررسی میکنیم MariaDB [(none)]> show master status; خروجیش شبیه این میشه که اسم فایل و Position مهمه که باید نیگه داریم +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mariadb-bin.000009 | 634 | | | +--------------------+----------+--------------+------------------+حالا روی سرور دوم تقریبا تمام مراحلی رو که در سرور 1 اجرا کردیم در این سرور هم اجرا میکنیم با یه تفاوت های کوچیک اولیش تغییرات داخل این فایله (بقیه مراحل عیناً مثل سرور1 اجرا میشه )داخل این فایل /etc/my.cnfمحتویات رو به صورت زیر تغییر میدیم # bind-address = 127.0.0.1 server-id = 62 report_host = master2 log_bin = /var/log/mariadb/mariadb-bin log_bin_index = /var/log/mariadb/mariadb-bin.index relay_log = /var/log/mariadb/relay-bin relay_log_index = /var/log/mymariadbql/relay-bin.index # replicate-do-db = testdb auto_increment_increment = 5 auto_increment_offset = 1قابل توجه اینکه روی سرور اول باید بتونید master2 رو پینگ کنید و روی سرور دوم بتونید master1 رو پینگ کنید اگر به هر دلیلی نمیتونید و نمیخواید میتونید آی پی ست کنید .خوب حالا دستور زیر رو توی سرور دوم اجرا میکنیم (بعدش با کمی تغییر توی سرور اول )MariaDB [(none)]> STOP SLAVE;MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000009', MASTER_LOG_POS=;MariaDB [(none)]> START SLAVE;توی متن بالا مقدار master1 = اسم سرور اول مقدار mariadb-bin.000009 = اسم فایلی که با دستور show master status; به دست آوردیم مقدار 634 = پوزیشنی که با دستور show master status; به دست آوردیم برای بررسی دستور زیر رو میزنیم MariaDB [(none)]> SHOW SLAVE STATUS\G نتیجه باید همچین چیزی بشه اگر ارور یا موردی دیدید باید دلیلش رو بررسی کنید *************************** 1. row ***************************Slave_IO_State: Waiting for master to send event Master_Host: master1 Master_User: replusr Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mariadb-bin.000009 Read_Master_Log_Pos: 634 Relay_Log_File: relay-bin.000002 Relay_Log_Pos: 537 Relay_Master_Log_File: mariadb-bin.000009 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: testdb Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 634 Relay_Log_Space: 828 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos:خوب باید همه مراحل رو برای سرور اول هم انجام بدید در صورتی که همه چیز درست باشه وقتی روی یکی از سرور ها یه دیتا بیسی ایجاد کنید یا هرکاری بکنید روی سرور اول هم اجرا خواهد شد .