mysql-mmm主主复制

mysql-MMM主主复制

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服务:

[[email protected] ~]# yum -y install mysql mysql-server mysql-devel
[[email protected] ~]# yum -y install mysql mysql-server mysql-devel
[[email protected] ~]# yum -y install mysql mysql-server mysql-devel
[[email protected] ~]# yum -y install mysql mysql-server mysql-devel


修改m1的mysql主配置文件:

[[email protected] ~]# 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服务,查看是否启动

[[email protected] ~]# /etc/init.d/mysqld start
[[email protected] ~]# netstat -utpln |grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1359/mysqld

将mysql的主配置文件同步到m2、m3、m4服务器上

[[email protected] ~]# for i in 1 2 3;do scp /etc/my.cnf [email protected]$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.
[email protected]‘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.
[email protected]‘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.
[email protected]‘s password: 
my.cnf                                            100%  465     0.5KB/s   00:00

登陆数据库查看该数据库的bin-log文件名和偏移量:

记下File Position的信息,等会要在m1-m2-m3数据库上用到。

[[email protected] ~]# mysqladmin -uroot password 123123
[[email protected] ~]# 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地址结尾定义了

[[email protected] ~]# sed -i ‘/server-id/s/150/151/g‘ /etc/my.cnf 
[[email protected] ~]# grep id /etc/my.cnf 
server-id=151
pid-file=/var/run/mysqld/mysqld.pid

启动登入数据库

[[email protected] ~]# /etc/init.d/mysqld start
[[email protected] ~]# mysqladmin -uroot password 123123
[[email protected] ~]# 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 同步数据

[[email protected] ~]# 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从数据库上指定主的数据库

[[email protected] ~]# sed -i ‘/server-id/s/150/152/g‘ /etc/my.cnf
[[email protected] ~]# grep id /etc/my.cnf 
server-id=152
pid-file=/var/run/mysqld/mysqld.pid
[[email protected] ~]# /etc/init.d/mysqld start
[[email protected] ~]# mysqladmin -uroot password 123123
[[email protected] ~]# 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>
[[email protected] ~]# sed -i ‘/server-id/s/150/153/g‘ /etc/my.cnf
[[email protected] ~]# grep id /etc/my.cnf 
server-id=153
pid-file=/var/run/mysqld/mysqld.pid
[[email protected] ~]# /etc/init.d/mysqld start
[[email protected] ~]# mysqladmin -uroot password 123123
[[email protected] ~]# 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上授权,其他主机会自动同步权限

[[email protected] ~]# 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(所有节点的通用配置文件)

[[email protected] ~]# 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 上:

[[email protected] ~]# for i in 150 151 152 153;do scp /etc/mysql-mmm/mmm_common.conf [email protected]$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.
[email protected]‘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.
[email protected]‘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.
[email protected]‘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.
[email protected]‘s password: 
mmm_common.conf                                           100%  851     0.8KB/s   00:00

修改数据库mysql-m1到mysql-m4:

[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 
[[email protected] ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 
[[email protected] ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db2
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 
[[email protected] ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db3
[[email protected] ~]# vi /etc/mysql-mmm/mmm_agent.conf 
[[email protected] ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db4
[[email protected] ~]# vi /etc/mysql-mmm/mmm_mon.conf 
[[email protected] ~]# 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服务

[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [确定]
[[email protected] ~]#
[[email protected] ~]# 
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [确定]
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [确定]
[[email protected] ~]# /etc/init.d/mysql-mmm-agent start
Starting MMM Agent Daemon:                                 [确定]
[[email protected] ~]# /etc/init.d/mysql-mmm-monitor start
Starting MMM Monitor Daemon:                               [确定]

查看各代理数据库状态

[[email protected] ~]# 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上授权:因为设置了同步,只在一个数据库上授权,其他数据库会同步权限

[[email protected] ~]# mysql -uroot -p123123 -s
mysql> grant all on *.* to ‘root‘@192.168.100.154 identified by ‘123123‘;
mysql> flush privileges;
[[email protected] ~]# mysql -uroot -p123123 -h 192.168.100.250 -s
mysql> show databases;
Database
information_schema
m1_test
mysql
test
test_m2

登陆读的数据库:

[[email protected] ~]# 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停止了,再查看状态:

[[email protected] ~]# /etc/init.d/mysqld stop
停止 mysqld:                                              [确定]
[[email protected] ~]#
[[email protected] ~]# 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启动

[[email protected] ~]# /etc/init.d/mysqld start
正在启动 mysqld:                                          [确定]
[[email protected] ~]#
[[email protected] ~]# 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)
[[email protected] ~]# 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停止查看状态,再启动查看状态

[[email protected] ~]# /etc/init.d/mysqld stop
停止 mysqld:                                              [确定]

此时会将读数据库db3的vip转移到db4;db4暂时负责读的操作

[[email protected] ~]# 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)
[[email protected] ~]# /etc/init.d/mysqld start
正在启动 mysqld:                                          [确定]
[[email protected] ~]#

在db3数据库恢复正常后,vip会转移回来,从新工作接受读的操作

[[email protected] ~]# 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)
时间: 2024-12-26 04:34:42

mysql-mmm主主复制的相关文章

超详细MySQL主主复制+MMM实现高可用

简介 MMM(Master-Master Replication Manager for MySQL, MySQL主主复制管理器)是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql Master-Master复制的配置.注意同一时间只有一个节点是可写.MMM的监管端会提供多个虚拟IP(VIP)包括一个可写VIP,多个可读VIP,通过监管的管理,这些IP会绑定在可用mysql之上,当某一台mysql宕机时,会将VIP迁移至其他my

MariaDB 10 (MySQL DB) 多主复制并实现读写分离

MMM 即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写 入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实 现数据备份.节点之间重新同步功能的脚本.MySQL本身没有提供replication failover的解决方案,通过MMM方

Mysql数据库主从及主主复制配置演示

From : http://www.cnblogs.com/tae44/p/4682810.html 实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 实验拓扑: 一.安装mysql 1.编译安装mariadb: tar xf mariadb-10.0.20-linux-x86_64.tar.gz -C /usr/local/ cd /usr/local

mysql主从复制、半同步复制、主主复制、及从库升级为主库讲解

一.主从复制结构 binlog dump --- io thread  ---  relay log ---- sql thread 1.总体讲解 主从复制时是异步的 半同步是在主从架构下安装插件来达到半同步的 半同步的优点:保证至少一个节点的数据和主节点的数据一致,缺点影响性能 导致主从不同步的原因是 现在的服务器都是单核多线程或者多核多线程,导致主节点可以同时执行多条读写操作,而记录二进制日志则必须按顺序有先后的记录,从节点在一条一条复制过去,生成中继日志,再执行语句. 多个库复制的话,可以

MySQL 主主复制

MySQL的主主复制就是两台 mysql 节点互为主从.搭建起来 mysql 主从,再来搭建主主复制就非常简单了. 视频链接:http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e 在原来主从的基础上做如下操作: 1.开启原从节点的 binlog 日志 2.原从节点创建读取副本的用户 3.在原主节点中让 master 指向从节点 4.在原主节点执行 start slave 命令 以上步骤即可完成主主节点的配置 下面有一

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

MySQL 主从复制、主主复制、半同步复制

MySQL 复制 =============================================================================== 概述: =============================================================================== MySQL Replication:   1.主从复制的目的和架构 ★Master/Slave(主/从) Master: write/read Slave

mysql主从复制和主主复制

一.准备(主从都需要配置): yum -y install mysql mysql-server #安装mysql yum -y install ntpdate #安装时间同步 echo '*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root #配置网络时间同步 service mysqld start #启动服务 chkconfig --add mysqld #添加为系

centos lvs+keepalived+mysql实现mysql数据库热备主主复制-亲测ok

实验环境: linux:centos6.6 虚拟ip(vip):192.168.135.199 mysql master:192.168.20.193 mysql slave:192.168.20.195 (这里只是为了后文方便区分,一个叫master,一个叫slave,其实在主主复制中,都是master也都是slave,没有主从之分) mysql的版本: [[email protected] ~]# mysql -V mysql  Ver 14.14 Distrib 5.1.73, for r

mysql主-主复制

设置主-主复制: 1.在两台服务器上各自建立一个具有复制权限的用户: 2.修改配置文件: # 主服务器上 [mysqld] server-id = 10 log-bin = mysql-bin relay-log = relay-mysql relay-log-index = relay-mysql.index auto-increment-increment = 2 auto-increment-offset = 1 # 从服务器上 [mysqld] server-id = 20 log-bi