MySQL-MMM高可用数据库集群配置

准备:

已有环境mysql主主从从:master1、master2、slave1、slave2和monitor主机

192.168.4.10    master1.tedu.cn master1
192.168.4.11    master2.tedu.cn master2
192.168.4.12    slave1.tedu.cn  slave1
192.168.4.13    slave2.tedu.cn  slave2
192.168.4.14    monitor.tedu.cn monitor

安装包:mysql-mmm.zip

下载地址:

https://download.csdn.net/download/platowg/10297539

**************MySQL-MMM高可用集群配置*************************


1、5台主机均需安装编译工具perl、perl-*、gcc、gcc-c++

[root@monitor mysql-mmm]# yum -y install perl perl-* gcc gcc-c++  

2、拷贝mysql-mmm.zip到5台主机,并解压

[root@room1pc01 ~]# for i in `seq 10 14`;do scp mysql-mmm.zip 192.168.4.$i:/opt/; done  
mysql-mmm.zip                                                                                                          100%  673KB 673.1KB/s   00:00      
mysql-mmm.zip                                                                                                          100%  673KB 673.1KB/s   00:00      
mysql-mmm.zip                                                                                                          100%  673KB 673.1KB/s   00:00      
mysql-mmm.zip                                                                                                          100%  673KB 673.1KB/s   00:00      
mysql-mmm.zip 
[root@monitor opt]# ls mysql-mmm.zip   
mysql-mmm.zip  
[root@slave2 opt]# unzip mysql-mmm.zip   
Archive:  mysql-mmm.zip  
   creating: mysql-mmm/  
 extracting: mysql-mmm/Algorithm-Diff-1.1902.tar.gz    
 extracting: mysql-mmm/Net-ARP-1.0.8.tgz    
 extracting: mysql-mmm/Proc-Daemon-0.03.tar.gz    
  inflating: mysql-mmm/install.sh      
 extracting: mysql-mmm/mysql-mmm-2.2.1.tar.gz    
  inflating: mysql-mmm/mysql-mmm-L.docx    
  inflating: mysql-mmm/mysql-mmm-P.txt    
  inflating: mysql-mmm/perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm  

3、安装mysql-mmm

通过脚本自动安装

[root@slave2 mysql-mmm]# sh install.sh   
warning: perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY  
Preparing...                ########################################### [100%]  
   1:perl-Log-Log4perl      ########################################### [100%]  
Algorithm-Diff-1.1902/  
Algorithm-Diff-1.1902/diffnew.pl  
Algorithm-Diff-1.1902/t/  
Algorithm-Diff-1.1902/t/oo.t  
Algorithm-Diff-1.1902/t/base.t  
Algorithm-Diff-1.1902/htmldiff.pl  
Algorithm-Diff-1.1902/lib/  
Algorithm-Diff-1.1902/lib/Algorithm/  
Algorithm-Diff-1.1902/lib/Algorithm/Diff.pm  
Algorithm-Diff-1.1902/lib/Algorithm/DiffOld.pm  
Algorithm-Diff-1.1902/META.yml  
Algorithm-Diff-1.1902/Changes  
Algorithm-Diff-1.1902/cdiff.pl  
Algorithm-Diff-1.1902/MANIFEST  
...  
mysql-mmm-2.2.1/sbin/mmm_clone  
mkdir -p  /usr/share/perl5/vendor_perl/MMM /usr/lib/mysql-mmm /usr/sbin /var/log/mysql-mmm /etc /etc/mysql-mmm /etc/init.d/  
cp -r lib/Common/ /usr/share/perl5/vendor_perl/MMM  
[ -f /etc/mysql-mmm/mmm_common.conf ] || cp etc/mysql-mmm/mmm_common.conf /etc/mysql-mmm/  
mkdir -p /usr/lib/mysql-mmm/agent/  
cp -r lib/Agent/ /usr/share/perl5/vendor_perl/MMM  
cp -r bin/agent/* /usr/lib/mysql-mmm/agent/  
cp -r etc/init.d/mysql-mmm-agent /etc/init.d/  
cp sbin/mmm_agentd /usr/sbin  
[ -f /etc/mysql-mmm/mmm_agent.conf  ] || cp etc/mysql-mmm/mmm_agent.conf  /etc/mysql-mmm/  
mkdir -p /usr/lib/mysql-mmm/monitor/  
cp -r lib/Monitor/ /usr/share/perl5/vendor_perl/MMM  
cp -r bin/monitor/* /usr/lib/mysql-mmm/monitor/  
cp -r etc/init.d/mysql-mmm-monitor /etc/init.d/  
cp sbin/mmm_control sbin/mmm_mond /usr/sbin  
[ -f /etc/mysql-mmm/mmm_mon.conf    ] || cp etc/mysql-mmm/mmm_mon.conf    /etc/mysql-mmm/  
mkdir -p /usr/lib/mysql-mmm/tools/  
cp -r lib/Tools/ /usr/share/perl5/vendor_perl/MMM  
cp -r bin/tools/* /usr/lib/mysql-mmm/tools/  
cp sbin/mmm_backup sbin/mmm_clone sbin/mmm_restore /usr/sbin  
[ -f /etc/mysql-mmm/mmm_tools.conf  ] || cp etc/mysql-mmm/mmm_tools.conf  /etc/mysql-mmm/  

4、检查安装目录确认配置文件、启动脚本已成功安装

[root@monitor mysql-mmm]# ls /etc/mysql-mmm/  
mmm_agent.conf  mmm_common.conf  mmm_mon.conf  mmm_tools.conf  
[root@monitor mysql-mmm]# ls /etc/init.d/mysql*  
/etc/init.d/mysql  /etc/init.d/mysql-mmm-agent  /etc/init.d/mysql-mmm-monitor 

5、修改mmm_common.conf,并拷贝到其他四台主机

[root@monitor mysql-mmm]# vim /etc/mysql-mmm/mmm_common.conf   
  
<host default>  
    cluster_interface       eth0  
  
    pid_path                /var/run/mmm_agentd.pid  
    bin_path                /usr/lib/mysql-mmm/  
  
    replication_user        slaveuser  
    replication_password    abc123  
  
    agent_user              agent  
    agent_password          agent123  
</host>  
  
<host master1>  
    ip                      192.168.4.10  
    mode                    master  
    peer                    master2  
</host>  
  
<host master2>  
    ip                      192.168.4.11  
    mode                    master  
    peer                    master1  
</host>  
  
<host slave1>  
    ip                      192.168.4.12  
    mode                    slave  
</host>  
  
<host slave2>  
    ip                      192.168.4.13  
    mode                    slave  
</host>  
  
  
<role writer>  
    hosts                   master1, master2  
    ips                     192.168.4.50  
    mode                    exclusive  
</role>  
  
<role reader>  
    hosts                   slave1, slave2  
    ips                     192.168.4.12, 192.168.4.13  
    mode                    balanced  
</role>  
[root@monitor ~]# for i in `seq 10 13`;do scp mmm_common.conf 192.168.4.$i:/etc/mysql-mmm/mmm_common.conf;done  
mmm_common.conf                                                                                                        100%  754     0.7KB/s   00:00      
mmm_common.conf                                                                                                        100%  754     0.7KB/s   00:00      
mmm_common.conf                                                                                                        100%  754     0.7KB/s   00:00      
mmm_common.conf                                                                                                        100%  754     0.7KB/s   00:00  

6、5台主机修mmm_agent.conf

[root@master1 mysql-mmm]# cat /etc/mysql-mmm/mmm_agent.conf  
include mmm_common.conf  
this master1  
[root@master2 mysql-mmm]# cat /etc/mysql-mmm/mmm_agent.conf  
include mmm_common.conf  
this master2  
[root@salve1 mysql-mmm]# cat /etc/mysql-mmm/mmm_agent.conf  
include mmm_common.conf  
this salve1  
[root@salve2 mysql-mmm]# cat /etc/mysql-mmm/mmm_agent.conf  
include mmm_common.conf  
this salve2  
[root@monitor mysql-mmm]# cat /etc/mysql-mmm/mmm_agent.conf  
include mmm_common.conf  
this monitor 

7、monitor主机修改mmm_mon.conf

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf 
include mmm_common.conf
<monitor>
    ip                        192.168.4.14        //设置管理主机IP地址
    pid_path                /var/run/mmm_mond.pid
    bin_path                /usr/lib/mysql-mmm/
    status_path                /var/lib/misc/mmm_mond.status
    ping_ips                192.168.4.10,192.168.4.11,192.168.4.12,192.168.4.13
                                                //设置被监控数据库
</monitor>
<host default>
    monitor_user            monitor                    //监控数据库MySQL用户    
    monitor_password        non123                    //监控数据库MySQL用户密码
</host>
debug 0

8、在master1上对agent、monitor用户进行授权(slaveuser已授权)

mysql> grant replication client on *.* to monitor@'192.168.4.14' identified by "mon123";  
Query OK, 0 rows affected (0.91 sec)  
mysql> grant replication client,super,process on *.* to agent@"192.168.4.%" identified by "agent123";  
Query OK, 0 rows affected (0.03 sec)  

9、在master1、master2、slave1、slave2主机上开启agent

[root@master1 mysql-mmm]# /etc/init.d/mysql-mmm-agent start  
Daemon bin: '/usr/sbin/mmm_agentd'  
Daemon pid: '/var/run/mmm_agentd.pid'  
Starting MMM Agent daemon...  already running.  

10、在monitor主机上开启monitor,并查看集群中各个主机的状态

[root@monitor mysql-mmm]# /etc/init.d/mysql-mmm-monitor start  
Daemon bin: '/usr/sbin/mmm_mond'  
Daemon pid: '/var/run/mmm_mond.pid'  
Starting MMM Monitor daemon:  already running.  

[plain] view plain copy
[root@monitor mysql-mmm]# mmm_control show  
  master1(192.168.4.10) master/AWAITING_RECOVERY. Roles:   
  master2(192.168.4.11) master/AWAITING_RECOVERY. Roles:   
  slave1(192.168.4.12) slave/AWAITING_RECOVERY. Roles:   
  slave2(192.168.4.13) slave/AWAITING_RECOVERY. Roles:

11、在monitor主机上设置集群中的主机为online,再次查看集群中各个主机的状态

[root@monitor mysql-mmm]# mmm_control set_online master1  
OK: State of 'master1' changed to ONLINE. Now you can wait some time and check its new roles!  
[root@monitor mysql-mmm]# mmm_control set_online master2  
OK: State of 'master2' changed to ONLINE. Now you can wait some time and check its new roles!  
[root@monitor mysql-mmm]# mmm_control set_online slave1  
OK: State of 'slave1' changed to ONLINE. Now you can wait some time and check its new roles!  
[root@monitor mysql-mmm]# mmm_control set_online slave2  
OK: State of 'slave2' changed to ONLINE. Now you can wait some time and check its new roles! 

[root@monitor mysql-mmm]# mmm_control show  
  master1(192.168.4.10) master/ONLINE. Roles: writer(192.168.4.50)  
  master2(192.168.4.11) master/ONLINE. Roles:   
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.13)  
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.12)  

**************MySQL-MMM高可用集群环境测试*************************

测试MySQL-MMM集群高可用效果

1)在master1数据库服务器上创建stu用户,并授权

mysql> grant all on *.* to stu@"%" identified by "stu123";
Query OK, 0 rows affected (0.22 sec)

2)通过客户机访问虚IPwriter(192.168.4.50)reader(192.168.4.13)reader(192.168.4.12),测试访问效果

[root@stu ~]# mysql -h192.168.4.50 -ustu -p -e "show databases"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@stu ~]# mysql -h192.168.4.13 -ustu -p -e "show databases"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@stu ~]# mysql -h192.168.4.12 -ustu -p -e "show databases"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| test               |
+--------------------+

3)master1主机关闭数据库服务

[root@master1 ~]# /etc/init.d/mysql status
 SUCCESS! MySQL running (17615)
[root@master1 ~]# /etc/init.d/mysql stop
Shutting down MySQL..... SUCCESS! 

4)在monitor主机上查看当前MMM集群状态,发现“写虚IP”已自动转移到master2主机上

[root@monitor ~]# mmm_control show    #master1主机关闭数据库服务前,MMM集群各个主机状态
  master1(192.168.4.10) master/ONLINE. Roles: writer(192.168.4.50)
  master2(192.168.4.11) master/ONLINE. Roles: 
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.13)
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.12)

[root@monitor ~]# mmm_control show    #master1主机关闭数据库服务后,MMM集群各个主机状态
  master1(192.168.4.10) master/HARD_OFFLINE. Roles: 
  master2(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.50)
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.13)
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.12)

5)通过stu客户机连接“写虚IP”,创建新数据库studb,测试同步效果

[root@stu ~]# mysql -h192.168.4.50 -ustu -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11046
Server version: 5.6.15-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> create database studb;
Query OK, 1 row affected (0.13 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| studb              |
| test               |
+--------------------+
6 rows in set (0.01 sec)

6)在slave1、slave2上查看同步效果

[root@salve1 ~]# mysql -uroot -p -e "show databases"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| studb              |
| test               |
+--------------------+

[root@salve2 ~]# mysql -uroot -p -e "show databases"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| studb              |
| test               |
+--------------------+

**************MySQL-MMM高可用集群异常处理*************************

1)问题:slave1、slave2误删同步master主机的数据库导致Slave_SQL_Running: No

    解决办法:stop slave;reset slave;startslave

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| studb              |
| test               |
+--------------------+
6 rows in set (0.00 sec)
mysql> drop database studb;
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
*******此时在往master主机中写入或修改数据*******
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.11
                  Master_User: slaveuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master2.000003
          Read_Master_Log_Pos: 537
               Relay_Log_File: salve1-relay-bin.000002
                Relay_Log_Pos: 562
        Relay_Master_Log_File: master2.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 1049
                   Last_Error: Error 'Unknown database 'studb'' on query. Default database: ''. Query: 'create table studb.stu_id(
id int(3) zerofill,
name varchar(10)
)'
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 401
              Relay_Log_Space: 872
              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: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1049
               Last_SQL_Error: Error 'Unknown database 'studb'' on query. Default database: ''. Query: 'create table studb.stu_id(
id int(3) zerofill,
name varchar(10)
)'
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 11
                  Master_UUID: 1fcc51f4-2b04-11e8-b606-545201011101
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: 
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 180320 09:55:43
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)

mysql> stop slave;
Query OK, 0 rows affected (0.03 sec)

mysql> reset slave;
Query OK, 0 rows affected (0.67 sec)

mysql> start slave;
Query OK, 0 rows affected (0.39 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.11
                  Master_User: slaveuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master2.000003
          Read_Master_Log_Pos: 537
               Relay_Log_File: salve1-relay-bin.000005
                Relay_Log_Pos: 698
        Relay_Master_Log_File: master2.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: 537
              Relay_Log_Space: 1033
              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: 11
                  Master_UUID: 1fcc51f4-2b04-11e8-b606-545201011101
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbsdb              |
| mysql              |
| performance_schema |
| studb              |
| test               |
+--------------------+
6 rows in set (0.01 sec)

mysql> show tables from studb;
+-----------------+
| Tables_in_studb |
+-----------------+
| stu_id          |
+-----------------+
1 row in set (0.03 sec)

2)两台master主机中一台master主机宕掉,宕掉的主机修复后数据同步

[root@monitor ~]# mmm_control show    #master1在线
  master1(192.168.4.10) master/ONLINE. Roles: writer(192.168.4.50)
  master2(192.168.4.11) master/ONLINE. Roles: 
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.13)
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.12)
[root@monitor ~]# mmm_control show    #master1宕掉
  master1(192.168.4.10) master/HARD_OFFLINE. Roles: 
  master2(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.50)
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.13)
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.12)
[root@monitor ~]# mmm_control show    #master修复,并开启mysql服务
  master1(192.168.4.10) master/AWAITING_RECOVERY. Roles: 
  master2(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.50)
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.12)
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.13)

[root@monitor ~]# mmm_control set_online master1    #monitor主机设置master1上线
OK: State of 'master1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control show    #master1主机恢复为online状态,查看master1数据已同步为最新数据
  master1(192.168.4.10) master/ONLINE. Roles: 
  master2(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.50)
  slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.12)
  slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.13)


猜你喜欢

转载自blog.csdn.net/platowg/article/details/79614130