加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql-mmm主主复制定义与分析

发布时间:2023-09-05 14:42:16 所属栏目:MySql教程 来源:
导读:MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序,主要管理双主复制,而实际上在应用中只有一个主负责写的操作,另一台待机冗余,或者负责读的一部分操作。还可以
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序,主要管理双主复制,而实际上在应用中只有一个主负责写的操作,另一台待机冗余,或者负责读的一部分操作。还可以结合主从复制,分离读写请求。
 
mmm分为agent端和monitor端,agent端部署在数据库节点上,monitor部署在监控管理端。monitor在整个数据库集群中是唯一存在的单点故障的点,因为monitor端只复制监控和管理agent节点,任务量非常的轻,一般不会出现什么故障的,而且monitor端在为agent数据库云服务器分配完vip地址后,即使停止了monitor服务,也不会影响业务的,只需要及时的修复即可。实在不放心可以为monitor部署keepalived.
 
环境
 
主机名: 系统: IP地址: 安装软件: 数据库角色
 
m1 centos6.5 192.168.100.150 mysql mysql-server mysql-mmm* master
 
m2 centos6.5 192.168.100.151 mysql mysql-server mysql-mmm* master
 
m3 centos6.5 192.168.100.152 mysql mysql-server mysql-mmm* slave
 
m4 centos6.5 192.168.100.153 mysql mysql-server mysql-mmm* slave
 
monitor centos6.5 192.168.100.154 mysql   mysql-mmm* monitor监控
 
数据库角色,和对应vip:
 
主机: vip 角色
 
m1 192.168.100.250
 
write 负责写的操作
 
m2 write 平时不工作,待机冗余
 
m3 192.168.100.201 read 读的操作
 
m4 192.168.100.202 read 读的操作
 
修改主机名:依次修改m1 m2 m3 m4 monitor
 
分别在m1 - m4 安装mysql服务:
 
[root@m1 ~]# yum -y install mysql mysql-server mysql-devel
 
[root@m2 ~]# yum -y install mysql mysql-server mysql-devel
 
[root@m3 ~]# yum -y install mysql mysql-server mysql-devel
 
[root@m4 ~]# yum -y install mysql mysql-server mysql-devel
 
修改m1的mysql主配置文件:
 
[root@m1 ~]# vi /etc/my.cnf
 
    
 
[mysqld]
 
datadir=/var/lib/mysql
 
socket=/var/lib/mysql/mysql.sock
 
log-error=/var/lib/mysql/mysql.err
 
slow_query_log_file=/var/lib/mysql/slow_query_log.log
 
user=mysql
 
character-set-server=utf8
 
log-bin=mysql-bin
 
server-id=150
 
binlog-ignore-db=mysql,information_schema
 
log-slave-updates
 
sync_binlog=1
 
auto_increment_increment=2
 
auto_increment_offset=1
 
[client]
 
default_character_set=utf8
 
[mysqld_safe]
 
log-error=/var/log/mysqld.log
 
pid-file=/var/run/mysqld/mysqld.pid
 
启动mysql服务,查看是否启动
 
[root@m1 ~]# /etc/init.d/mysqld start
 
[root@m1 ~]# netstat -utpln |grep 3306
 
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1359/mysqld
 
     
 
将mysql的主配置文件同步到m2、m3、m4服务器上
 
[root@m1 ~]# for i in 1 2 3;do scp /etc/my.cnf root@192.168.100.15$i:/etc/;done
 
The authenticity of host '192.168.100.151 (192.168.100.151)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.151' (RSA) to the list of known hosts.
 
root@192.168.100.151's password:
 
my.cnf                                            100%  465     0.5KB/s   00:00    
 
The authenticity of host '192.168.100.152 (192.168.100.152)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.152' (RSA) to the list of known hosts.
 
root@192.168.100.152's password:
 
my.cnf                                            100%  465     0.5KB/s   00:00    
 
The authenticity of host '192.168.100.153 (192.168.100.153)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.153' (RSA) to the list of known hosts.
 
root@192.168.100.153's password:
 
my.cnf                                            100%  465     0.5KB/s   00:00
 
登陆数据库查看该数据库的bin-log文件名和偏移量:
 
    记下File Position的信息,等会要在m1-m2-m3数据库上用到。
 
[root@m1 ~]# mysqladmin -uroot password 123123
 
[root@m1 ~]# mysql -uroot -p123123
 
mysql> show master status;
 
+------------------+----------+--------------+--------------------------+
 
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
 
+------------------+----------+--------------+--------------------------+
 
| mysql-bin.000003 |      249 |              | mysql,information_schema |
 
+------------------+----------+--------------+--------------------------+
 
1 row in set (0.00 sec)
 
授权允许复制
 
mysql> grant replication slave on *.* to 'replication'@'192.168.100.%' identified by '123123';
 
Query OK, 0 rows affected (0.02 sec)
 
    ##授权replication用户在192.168.100.0这个网段有对数据库复制的权限
 
mysql> flush privileges;    ##刷新权限
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> quit
 
Bye
 
更改m2数据库配置文件
 
    这是m1服务器同步过来的配置文件,只需将server-id改了就可以了,server-id在mysql集群中是唯一的标识符,在这里以ip地址结尾定义了
 
[root@m2 ~]# sed -i '/server-id/s/150/151/g' /etc/my.cnf
 
[root@m2 ~]# grep id /etc/my.cnf
 
server-id=151
 
pid-file=/var/run/mysqld/mysqld.pid
 
启动登入数据库
 
[root@m2 ~]# /etc/init.d/mysqld start
 
[root@m2 ~]# mysqladmin -uroot password 123123
 
[root@m2 ~]# mysql -uroot -p123123
 
在m2上查看bin-log文件和偏移量记录下来,并授权用户复制权限
 
mysql> show master status;
 
+------------------+----------+--------------+--------------------------+
 
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         |
 
+------------------+----------+--------------+--------------------------+
 
| mysql-bin.000003 |      249 |              | mysql,information_schema |
 
+------------------+----------+--------------+--------------------------+
 
1 row in set (0.00 sec)
 
mysql> grant replication slave on *.* to 'replication'@'192.168.100.%' identified by '123123';
 
Query OK, 0 rows affected (0.01 sec)
 
mysql> flush privileges;
 
Query OK, 0 rows affected (0.05 sec)
 
在m1上添加另一个主m2 同步数据
 
[root@m1 ~]# mysql -uroot -p123123
 
mysql> change master to
 
    -> master_host='192.168.100.151',   ##m2的ip
 
    -> master_user='replication',  ##m2上面授权的用户
 
    -> master_password='123123',    ##m2上授权用户的密码
 
    -> master_log_file='mysql-bin.000003',  ##m2的bin-log文件(刚刚在m2上查到的)
 
    -> master_log_pos=249;    ##日志文件的偏移量
 
Query OK, 0 rows affected (0.08 sec)
 
指定完了以后启动同步
 
mysql> start slave;
 
Query OK, 0 rows affected (0.00 sec)
 
查看同步状态信息:
 
    这两项都为yes算是成功了
 
            Slave_IO_Running: Yes
 
            Slave_SQL_Running: Yes
 
mysql> show slave status\G;
 
*************************** 1. row ***************************
 
               Slave_IO_State: Waiting for master to send event
 
                  Master_Host: 192.168.100.151
 
                  Master_User: replication
 
                  Master_Port: 3306
 
                Connect_Retry: 60
 
              Master_Log_File: mysql-bin.000003
 
          Read_Master_Log_Pos: 495
 
               Relay_Log_File: mysqld-relay-bin.000002
 
                Relay_Log_Pos: 497
 
        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: 495
 
              Relay_Log_Space: 653
 
              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:
 
1 row in set (0.00 sec)
 
ERROR:
 
No query specified
 
在m2上添加m2的另一个主m1:
 
mysql> change master to
 
    -> master_host='192.168.100.150',
 
    -> master_user='replication',
 
    -> master_password='123123',
 
    -> master_log_file='mysql-bin.000003',
 
    -> master_log_pos=249;
 
Query OK, 0 rows affected (0.10 sec)
 
mysql> start slave;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> show slave status\G;
 
*************************** 1. row ***************************
 
               Slave_IO_State: Waiting for master to send event
 
                  Master_Host: 192.168.100.150
 
                  Master_User: replication
 
                  Master_Port: 3306
 
                Connect_Retry: 60
 
              Master_Log_File: mysql-bin.000003
 
          Read_Master_Log_Pos: 741
 
               Relay_Log_File: mysqld-relay-bin.000002
 
                Relay_Log_Pos: 497
 
        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: 741
 
              Relay_Log_Space: 653
 
              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:
 
1 row in set (0.00 sec)
 
ERROR:
 
No query specified
 
验证:
 
在m1和m2上各创建个库验证是否同步:
 
    m1上创建
 
mysql> create database m1_test;
 
Query OK, 1 row affected (0.01 sec)
 
mysql> show databases;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| m1_test            |
 
| mysql              |
 
| test               |
 
|          |
 
+--------------------+
 
5 rows in set (0.00 sec)
 
m2上查看
 
mysql> show databases;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| m1_test            |
 
| mysql              |
 
| test               |
 
+--------------------+
 
4 rows in set (0.07 sec)
 
m2上新建库
 
mysql> create database test_m2;
 
Query OK, 1 row affected (0.04 sec)
 
m1上查看
 
mysql> show databases;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| m1_test            |
 
| mysql              |
 
| test               |
 
| test_m2            |
 
+--------------------+
 
5 rows in set (0.00 sec)
 
正常同步了。
 
在m3-m4从数据库上指定主的数据库
 
[root@m3 ~]# sed -i '/server-id/s/150/152/g' /etc/my.cnf
 
[root@m3 ~]# grep id /etc/my.cnf
 
server-id=152
 
pid-file=/var/run/mysqld/mysqld.pid
 
[root@m3 ~]# /etc/init.d/mysqld start
 
[root@m3 ~]# mysqladmin -uroot password 123123
 
[root@m3 ~]# mysql -uroot -p123123
 
mysql> change master to
 
    -> master_host='192.168.100.150',
 
    -> master_user='replication',
 
    -> master_password='123123',
 
    -> master_log_file='mysql-bin.000003',
 
    -> master_log_pos=249;
 
Query OK, 0 rows affected (0.08 sec)
 
mysql> start slave;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> show slave status\G;
 
*************************** 1. row ***************************
 
               Slave_IO_State: Waiting for master to send event
 
                  Master_Host: 192.168.100.150
 
                  Master_User: replication
 
                  Master_Port: 3306
 
                Connect_Retry: 60
 
              Master_Log_File: mysql-bin.000003
 
          Read_Master_Log_Pos: 929
 
               Relay_Log_File: mysqld-relay-bin.000002
 
                Relay_Log_Pos: 931
 
        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: 929
 
              Relay_Log_Space: 1087
 
              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:
 
1 row in set (0.04 sec)
 
ERROR:
 
No query specified
 
mysql> show databases
 
    -> ;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| m1_test            |
 
| mysql              |
 
| test               |
 
| test_m2            |
 
+--------------------+
 
5 rows in set (0.08 sec)
 
mysql>
 
[root@m4 ~]# sed -i '/server-id/s/150/153/g' /etc/my.cnf
 
[root@m4 ~]# grep id /etc/my.cnf
 
server-id=153
 
pid-file=/var/run/mysqld/mysqld.pid
 
[root@m4 ~]# /etc/init.d/mysqld start
 
[root@m4 ~]# mysqladmin -uroot password 123123
 
[root@m4 ~]# mysql -uroot -p123123
 
mysql> change master to
 
    -> master_host='192.168.100.150',
 
    -> master_user='replication',
 
    -> master_password='123123',
 
    -> master_log_file='mysql-bin.000003',
 
    -> master_log_pos=249;
 
Query OK, 0 rows affected (0.10 sec)
 
mysql> start slave;
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> show slave status\G;
 
*************************** 1. row ***************************
 
               Slave_IO_State: Waiting for master to send event
 
                  Master_Host: 192.168.100.150
 
                  Master_User: replication
 
                  Master_Port: 3306
 
                Connect_Retry: 60
 
              Master_Log_File: mysql-bin.000003
 
          Read_Master_Log_Pos: 929
 
               Relay_Log_File: mysqld-relay-bin.000002
 
                Relay_Log_Pos: 931
 
        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: 929
 
              Relay_Log_Space: 1087
 
              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:
 
1 row in set (0.00 sec)
 
ERROR:
 
No query specified
 
mysql> show databases;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| m1_test            |
 
| mysql              |
 
| test               |
 
| test_m2            |
 
+--------------------+
 
5 rows in set (0.00 sec)
 
安装mysql-mmm:
 
    下载epel扩展yum源:  在所用服务器上执行
 
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
 
     安装mmm软件:   在所有服务器上执行
 
yum -y install mysql-mmm*
 
授权: 在m1上授权,其他主机会自动同步权限
 
[root@m1 ~]# mysql -uroot -p123123
 
mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.100.%' identified by 'monitor';
 
Query OK, 0 rows affected (0.02 sec)
 
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.100.&' identified by 'agent';
 
Query OK, 0 rows affected (0.00 sec)
 
mysql> flush privileges;
 
Query OK, 0 rows affected (0.00 sec)
 
修改配置文件: mmm_common.conf(所有节点的通用配置文件)
 
[root@monitor ~]# vi /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        replication   ##复制同步的用户名
 
    replication_password    123123    ##同步的密码
 
    agent_user              mmm_agent   ##代理的用户名
 
    agent_password          agent   ##代理密码
 
</host>  
 
<host db1>
 
    ip      192.168.100.150
 
    mode    master
 
    peer    db2
 
</host>
 
<host db2>
 
    ip      192.168.100.151
 
    mode    master
 
    peer    db1
 
</host>
 
<host db3>
 
    ip      192.168.100.152
 
    mode    slave
 
</host>
 
<host db4>
 
    ip      192.168.100.153
 
    mode    slave
 
</host>
 
<role writer>
 
    hosts   db1, db2
 
    ips     192.168.100.250    ##写的vip
 
    mode    exclusive      ##独占模式
 
</role>
 
<role reader>
 
    hosts   db3, db4
 
    ips     192.168.100.201, 192.168.100.202   ##读的vip
 
    mode    balanced    ##平衡模式
 
</role>
 
同步配置文件到m1 m2 m3 m4 上:
 
[root@monitor ~]# for i in 150 151 152 153;do scp /etc/mysql-mmm/mmm_common.conf root@192.168.100.$i:/etc/mysql-mmm/;done
 
The authenticity of host '192.168.100.150 (192.168.100.150)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.150' (RSA) to the list of known hosts.
 
root@192.168.100.150's password:
 
mmm_common.conf                                           100%  851     0.8KB/s   00:00    
 
The authenticity of host '192.168.100.151 (192.168.100.151)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.151' (RSA) to the list of known hosts.
 
root@192.168.100.151's password:
 
mmm_common.conf                                           100%  851     0.8KB/s   00:00    
 
The authenticity of host '192.168.100.152 (192.168.100.152)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.152' (RSA) to the list of known hosts.
 
root@192.168.100.152's password:
 
mmm_common.conf                                           100%  851     0.8KB/s   00:00    
 
The authenticity of host '192.168.100.153 (192.168.100.153)' can't be established.
 
RSA key fingerprint is 6b:3d:8b:50:dc:45:ea:58:38:6e:5d:0d:9b:8f:04:f2.
 
Are you sure you want to continue connecting (yes/no)? yes
 
Warning: Permanently added '192.168.100.153' (RSA) to the list of known hosts.
 
root@192.168.100.153's password:
 
mmm_common.conf                                           100%  851     0.8KB/s   00:00
 
修改数据库mysql-m1到mysql-m4:
 
[root@m1 ~]# vi /etc/mysql-mmm/mmm_agent.conf
 
[root@m1 ~]# cat /etc/mysql-mmm/mmm_agent.conf
 
include mmm_common.conf
 
this db1
 
[root@m2 ~]# vi /etc/mysql-mmm/mmm_agent.conf
 
[root@m2 ~]# cat /etc/mysql-mmm/mmm_agent.conf
 
include mmm_common.conf
 
this db2
 
[root@m3 ~]# vi /etc/mysql-mmm/mmm_agent.conf
 
[root@m3 ~]# cat /etc/mysql-mmm/mmm_agent.conf
 
include mmm_common.conf
 
this db3
 
[root@m4 ~]# vi /etc/mysql-mmm/mmm_agent.conf
 
[root@m4 ~]# cat /etc/mysql-mmm/mmm_agent.conf
 
include mmm_common.conf
 
this db4
 
[root@monitor ~]# vi /etc/mysql-mmm/mmm_mon.conf
 
[root@monitor ~]# cat /etc/mysql-mmm/mmm_mon.conf
 
include mmm_common.conf
 
<monitor>
 
    ip                  127.0.0.1
 
    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.100.150, 192.168.100.151, 192.168.100.152, 192.168.100.153
 
        ##监测每个节点数据库:修改为每个服务器的真实ip地址
 
    auto_set_online     60     ##自动上线时间,
 
</monitor>
 
<host default>
 
    monitor_user        mmm_monitor     ##监控服务的用户名
 
    monitor_password    monitor     ##监控服务的密码,这两项是在m1上授权的
 
</host>
 
debug 0
 
启动服务:m1-m4的mmm-agent服务; 监控端的mmm-monitor服务
 
[root@m1 ~]# /etc/init.d/mysql-mmm-agent start
 
Starting MMM Agent Daemon:                                 [确定]
 
[root@m1 ~]#
 
[root@m2 ~]#
 
[root@m2 ~]# /etc/init.d/mysql-mmm-agent start
 
Starting MMM Agent Daemon:                                 [确定]
 
[root@m3 ~]# /etc/init.d/mysql-mmm-agent start
 
Starting MMM Agent Daemon:                                 [确定]
 
[root@m4 ~]# /etc/init.d/mysql-mmm-agent start
 
Starting MMM Agent Daemon:                                 [确定]
 
[root@monitor ~]# /etc/init.d/mysql-mmm-monitor start
 
Starting MMM Monitor Daemon:                               [确定]
 
查看各代理数据库状态
 
[root@monitor ~]# mmm_control show
 
  db1(192.168.100.150) master/ONLINE. Roles: writer(192.168.100.250)
 
  db2(192.168.100.151) master/ONLINE. Roles:
 
  db3(192.168.100.152) slave/ONLINE. Roles: reader(192.168.100.201)
 
  db4(192.168.100.153) slave/ONLINE. Roles: reader(192.168.100.202)
 
            ##发现写的请求交给db1的vip,读的请求交给db3 db4 vip
 
使用vip登录数据库:
 
    先在m1上授权:因为设置了同步,只在一个数据库上授权,其他数据库会同步权限
 
[root@m1 ~]# mysql -uroot -p123123 -s
 
mysql> grant all on *.* to 'root'@192.168.100.154 identified by '123123';
 
mysql> flush privileges;
 
[root@monitor ~]# mysql -uroot -p123123 -h 192.168.100.250 -s
 
mysql> show databases;
 
Database
 
information_schema
 
m1_test
 
mysql
 
test
 
test_m2
 
登陆读的数据库:
 
[root@monitor ~]# mysql -uroot -p123123 -h 192.168.100.201 -s
 
mysql> show databases;
 
Database
 
information_schema
 
m1_test
 
mysql
 
test
 
test_m2
 
mysql>
 
在生产环境中,只需在应用服务器上,指定写数据的vip地址,和读数据的vip地址池即可。
 
测试:
 
    模拟主服务器m1故障,将mysql停止了,再查看状态:
 
[root@m1 ~]# /etc/init.d/mysqld stop
 
停止 mysqld:                                              [确定]
 
[root@m1 ~]#
 
[root@monitor ~]# mmm_control show
 
  db1(192.168.100.150) master/HARD_OFFLINE. Roles:   ##显示为离线状态
 
  db2(192.168.100.151) master/ONLINE. Roles: writer(192.168.100.250)  ##vip转移到db2
 
  db3(192.168.100.152) slave/ONLINE. Roles: reader(192.168.100.201)
 
  db4(192.168.100.153) slave/ONLINE. Roles: reader(192.168.100.202)
 
    再把m1启动
 
[root@m1 ~]# /etc/init.d/mysqld start
 
正在启动 mysqld:                                          [确定]
 
[root@m1 ~]#
 
[root@monitor ~]# mmm_control show
 
  db1(192.168.100.150) master/AWAITING_RECOVERY. Roles:   ##恢复状态
 
  db2(192.168.100.151) master/ONLINE. Roles: writer(192.168.100.250)
 
  db3(192.168.100.152) slave/ONLINE. Roles: reader(192.168.100.201)
 
  db4(192.168.100.153) slave/ONLINE. Roles: reader(192.168.100.202)
 
[root@monitor ~]# mmm_control show
 
  db1(192.168.100.150) master/ONLINE. Roles:   ##在线状态
 
  db2(192.168.100.151) master/ONLINE. Roles: writer(192.168.100.250)
 
  db3(192.168.100.152) slave/ONLINE. Roles: reader(192.168.100.201)
 
  db4(192.168.100.153) slave/ONLINE. Roles: reader(192.168.100.202)
 
    模拟从数据库m3故障,将数据库mysql停止查看状态,再启动查看状态
 
[root@m3 ~]# /etc/init.d/mysqld stop
 
停止 mysqld:                                              [确定]
 
        此时会将读数据库db3的vip转移到db4;db4暂时负责读的操作
 
[root@monitor ~]# mmm_control show
 
  db1(192.168.100.150) master/ONLINE. Roles:
 
  db2(192.168.100.151) master/ONLINE. Roles: writer(192.168.100.250)
 
  db3(192.168.100.152) slave/HARD_OFFLINE. Roles:
 
  db4(192.168.100.153) slave/ONLINE. Roles: reader(192.168.100.201), reader(192.168.100.202)
 
[root@m3 ~]# /etc/init.d/mysqld start
 
正在启动 mysqld:                                          [确定]
 
[root@m3 ~]#
 
        在db3数据库恢复正常后,vip会转移回来,从新工作接受读的操作
 
[root@monitor ~]# mmm_control show
 
  db1(192.168.100.150) master/ONLINE. Roles:
 
  db2(192.168.100.151) master/ONLINE. Roles: writer(192.168.100.250)
 
  db3(192.168.100.152) slave/ONLINE. Roles: reader(192.168.100.201)
 
  db4(192.168.100.153) slave/ONLINE. Roles: reader(192.168.100.202)
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章