MariaDB 10 (MySQL DB) 多主複製並實現讀寫分離

MariaDB 10 (MySQL DB)  多主複製並實現讀寫分離 - 姜名則

                                                                                          原文                 http://www.cnblogs.com/xiaocen/p/3703552.html                    javascript

     2、      資源配置      php

  • 主機屬性html

系統 名字 角色 主機名 ip地址 關係
Centos6.5x86_64         DB1         Master         essun.mariadb1.com         192.168.1.109         與DB2互爲主從        
Centos6.5x86_64         DB2         Master         essun.mariadb2.com         192.168.1.112         與DB1互爲主從        
Centos6.5x86_64         DB3         Slave         essun.mariadb3.com         192.168.1.113         DB1的從庫        
Centos6.5x86_64         Monitor         Monitor         essun.monitor.com         192.168.1.116         監控全部主機        
  • 虛擬ip(VIP)java

DB1    192.168.1.109   192.168.1.24mysql

DB2    192.168.1.112    192.168.1.24,192.168.1.22sql

DB3    192.168.1.113    192.168.1.23數據庫

     3、      拓撲圖      ruby

               wKiom1NbD-vBYTbaAAH9IMbCsBM351.bmp                    

     4、實現過程      bash

一、配置DB1服務器

修改配置文件/etc/my.cnf,添加以下語句

server-id=1log_bin=/mariadb/data/mysql-bin
binlog_format=row
log-slave-updates 
sync_binlog=1auto_increment_increment=2  # 默認地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。auto_increment_offset=1

             

受權用戶

MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.112' identified by 'replpass';Query OK, 0 rows affected (0.12 sec)
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.113' identified by 'replpass';Query OK, 0 rows affected (0.00 sec)

             

查看binlog日誌標記

MariaDB [(none)]> show master status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+| mysql-bin.000003 |      756 |              |                  |
+------------------+----------+--------------+------------------+1 row in set (0.00 sec)

             

二、配置DB2

修改配置文件/etc/my.cnf,添加以下語句

log-bin=mysql-bin
binlog_format=ROW
log-slave-updates
sync_binlog=1auto_increment_increment=2auto_increment_offset=2server-id=2

             

受權用戶

MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.109' identified by 'replpass';Query OK, 0 rows affected (0.15 sec)

             

查看binlog日誌標記

MariaDB [(none)]> show master status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+| mysql-bin.000007 |      548 |              |                  |
+------------------+----------+--------------+------------------+1 row in set (0.00 sec)

             

鏈接DB1

MariaDB [(none)]> show master status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+| mysql-bin.000007 |      548 |              |                  |
+------------------+----------+--------------+------------------+1 row in set (0.00 sec)

             

三、配置DB3

修改配置文件/etc/my.cnf添加以下語句

server-id=3log-bin=mysql-binlog-slave-updatesrelay-log=relay-log-bin

             

鏈接DB1

MariaDB [(none)]> change master to master_host='192.168.1.109',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000003',master_log_pos=756;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.109
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 756
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          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: 756
              Relay_Log_Space: 830
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /etc/slave/cacert.pem
           Master_SSL_CA_Path:
              Master_SSL_Cert: /etc/slave/mysql.crt
            Master_SSL_Cipher:
               Master_SSL_Key: /etc/slave/mysql.key
        Seconds_Behind_Master: 0Master_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: /etc/slave/cacert.pem
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:1 row in set (0.00 sec)

   

DB1鏈接DB2

MariaDB [(none)]> change master to master_host='192.168.1.112',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000007',master_log_pos=548;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.112
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 548
               Relay_Log_File: essun-relay-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          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: 548
              Relay_Log_Space: 832
              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: 0Master_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: 2
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:1 row in set (0.00 sec)

   

四、測試

在DB2中創建一個數據庫testdb

MariaDB [(none)]> change master to master_host='192.168.1.112',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000007',master_log_pos=548;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show slave status\G*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.112
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000007
          Read_Master_Log_Pos: 548
               Relay_Log_File: essun-relay-bin.000002
                Relay_Log_Pos: 535
        Relay_Master_Log_File: mysql-bin.000007
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          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: 548
              Relay_Log_Space: 832
              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: 0Master_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: 2
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:1 row in set (0.00 sec)

         

在DB1中對testdb,插入一條數據

MariaDB [testdb]> insert t1 values ('tom',24);Query OK, 1 row affected (0.01 sec)

           

 在DB3中查看結果

MariaDB [(none)]> select * from testdb.t1;+------+-----+| name | age |
+------+-----+| tom  |  24 |
| king |  24 |
+------+-----+2 rows in set (0.00 sec)
MariaDB [(none)]>

         

OK!三臺DB的主從配置正常工做

在DB1~3上安裝mysql-mmmo-agent

注:mysql-mmm-agent是在epel源中,因此要下載EPEL源安裝包便可    http://download.fedoraproject.org/pub/epel/6/i386/repoview/epel-release.html  

下載對應的版本就能夠的。

#rpm -ivh epel-release-6-8.noarch.rpmyum -y install mysql-mmm-agent

             

每個節點都要安裝

在每個節點上要給Monitor受權用戶

MariaDB [(none)]> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.1.116'   IDENTIFIED BY '123456';Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.1.116' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> GRANT REPLICATION CLIENT ON *.* TO 'repluser'@'192.168.1.116' IDENTIFIED BY 'replpass';Query OK, 0 rows affected (0.01 sec)

         

六、在Monitor節點上要安裝

#yum -y install mysql-mmm*

         

此包一樣也在epel源中

七、在Monitor端的設置/etc/mysql-mmm/mmm_common.conf

active_master_role	  writer<host default>  cluster_interface	   eth0  pid_path				/var/run/mysql-mmm/mmm_agentd.pid  bin_path				/usr/libexec/mysql-mmm/  replication_user		repluser #複製用戶  replication_password	replpass #複製密碼  agent_user			  mmm_agent #代理用戶  agent_password		  123456 #代理用戶的密碼</host>  <host db1>  ip	  192.168.1.109  mode	master  peer	db2</host><host db2>  ip	  192.168.1.112  mode	master  peer	db1</host>																															 <host db3>  ip	  192.168.1.113  mode	slave</host><role writer>  hosts   db1, db2  ips	 192.168.1.24  mode	exclusive #排它</role>	<role reader>  hosts	db2, db3  ips	  192.168.1.22, 192.168.1.23  mode	balanced #均衡</role>

         

將此文件分發到各DB1~3中的/etc/mysql-mmm/下

八、每個DB中都會有mmm_agent的配置文件,編輯mmm_agent.conf

在數據庫服務器上,還有一個mmm_agent.conf須要修改,其內容是:

include mmm_common.conf# The 'this' variable refers to this server.  Proper operation requires# that 'this' server (db1 by default), as well as all other servers, have the# proper IP addresses set in mmm_common.conf.this db2

             

第一行表示:將以前Monitor中的mmm_common.conf文件載入到此文件中,供此文件中的參數設用。

最後一行標記此主機的角色(引用mmm_common.conf中的host段)在不一樣的數據庫服務器上要分別改成db1和db3不然代理就會沒法啓動。

九、編輯mmm_mon.confg

在Monitor上,修改mmm_mon.conf文件,修改後內容爲:

include mmm_common.conf<monitor>  ip				  192.168.1.116 #當前monitor主機地址  pid_path			/var/run/mysql-mmm/mmm_mond.pid  bin_path			/usr/libexec/mysql-mmm  status_path		 /var/lib/mysql-mmm/mmm_mond.status  ping_ips			192.168.1.109, 192.168.1.112 #真實DB地址  auto_set_online	 10  # The kill_host_bin does not exist by default, though the monitor will  # throw a warning about it missing.  See the section 5.10 "Kill Host  # Functionality" in the PDF documentation.  #  # kill_host_bin	 /usr/libexec/mysql-mmm/monitor/kill_host  #</monitor>
<host default>  monitor_user		mmm_monitor #監控DB的用戶名  monitor_password	123456 #密碼</host>debug 0 #關閉debug功能,若是程序沒法監控獲得,可使用debug 1查錯

         

十、啓動MMM

在各DB端啓動mmm-agent

#cd /etc/init.d/# chkconfig mysql-mmm-monitor on# service mysql-mmm-monitor start

         

在Monitor端啓動監控程序

#cd /etc/init.d/# chkconfig mysql-mmm-monitor on# service mysql-mmm-monitor start

             

過幾秒鐘,就可使用mmm_control show查看在線監控端(DB)了

[root@essun ~]# service mysql-mmm-monitor statusmmm_mond (pid  5395) is running...
[root@essun ~]# mmm_control show
  db1(192.168.1.109) master/ONLINE. Roles:
  db2(192.168.1.112) master/ONLINE. Roles: reader(192.168.1.22), writer(192.168.1.24)
  db3(192.168.1.113) slave/ONLINE. Roles: reader(192.168.1.23)

   

注:可使用

[root@essun ~]# mmm_control --help
Invalid command '--help'Valid commands are:  help							  - show this message  ping							  - ping monitor  show							  - show status  checks [<host>|all [<check>|all]] - show checks status  set_online <host>				 - set host <host> online  set_offline <host>				- set host <host> offline  mode							  - print current mode.  set_active						- switch into active mode.  set_manual						- switch into manual mode.  set_passive					   - switch into passive mode.  move_role [--force] <role> <host> - move exclusive role <role> to host <host>                    (Only use --force if you know what you are doing!)  set_ip <ip> <host>				- set role with ip <ip> to host <host>

         

查看mmm_control的可用參數

十一、模擬DB2下線

Monitor當前狀態

wKioL1NbCqeRJcXLAANcNReiKZU310.jpg      

讓DB2下線,當前可寫主機是db1,db3

wKiom1NbC0rDNCvUAAIuI8SpVSI111.jpg      

db2沒有下線以前還能夠讀寫,當下線以後,可寫的切換到DB1上了,全部讀的都到了db3上了

當DB2從新上線後的狀況以下

wKiom1NbDvXRoookAAIUNUXGfXg419.jpg      

注:DB一、DB同時只能一有個寫,一個讀!

========================================== Mariadb高可用演示完畢=======================

相關文章
相關標籤/搜索