MySql双主多从环境搭建

双主多从,高可用架构模式图

MySql双主多从环境搭建_第1张图片

这里模拟两种双从和双主多从类似:两主互为主从关系达到主节点高可用

主master 3307 ---> 从slave 3309 

主master 3308 ---> 从slave 3310

3307 <---> 3308 互为主从

和上一篇一样:

  1. 与一主多从一样,所有主节点配置文件加上binlog配置

  2. 3307

    log-bin=mysql-bin

    server-id=3307

    3308

    log-bin=mysql-bin

    server-id=3308

    3309

    server-id=3309

    3310

    server-id=3310

  3. 第一台主服务器3307的my.cnf文件增加如下配置:(Master 3307)

    auto_increment_increment=2

    auto_increment_offset=1

    log-slave-updates

    sync_binlog=1

  4. 第二台主服务器3308的my.cnf文件增加如下配置:(Master 3308)

    auto_increment_increment=2

    auto_increment_offset=2

    log-slave-updates

    sync_binlog=1

  5. 参数说明:

  6. sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。

    sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

  7. 从库只开启log-bin功能,不添加log-slave-updates参数,从库从主库复制的数据不会写入log-bin日志文件里。

  8. 直接向从库写入数据时,是会写入log-bin日志的。

  9. 开启log-slave-updates参数后,从库从主库复制的数据会写入log-bin日志文件里。这也是该参数的功能。

  10. auto_increment_increment,控制主键自增的自增步长,用于防止Master与Master之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少

  11. auto_increment_offset=1设置自增起始值,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7,9,…等奇数ID

  12. 注意auto_increment_offset的设置,不同的master设置不应该一样,否则就容易引起主键冲突,比如master1的offset=1,则master2的offset=2,master3的offset=3

  13. 在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(3307)上进行了更新数据,在master2(3308)和slave1(3309)上会更新,但是在slave2(3310)上不会更新

  14. sync_binlog表示每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1

  15. MySql双主多从环境搭建_第2张图片

服务启动

  1. 进入/usr/local/mysql-5.7.18/bin目录,重启四个MySQL服务,启动时指定配置文件启动:

    ./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3307/my.cnf &

    ./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3308/my.cnf &

    ./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3309/my.cnf &

    ./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3310/my.cnf &

设置主从关系

  1. 在两台主服务器上创建复制账号并授权:(3307、3308)

    使用端口、主机登录进入两台主MySQL:

     ./mysql -uroot -p -P3307 -h127.0.0.1

     ./mysql -uroot -p -P3308 -h127.0.0.1

    在主服务器上创建复制数据的账号并授权:

    grant replication slave on *.* to 'copy'@'%' identified by '123456';

  2. 在两台主服务器上停止复制并刷新binlog日志:(3307、3308)

    在MySQL命令行执行:

    stop slave;

    reset slave;

    reset master;

  3. 在从服务器上停止复制:(3309、3310)

    在MySQL命令行执行:

    stop slave;

    reset slave;

  4. 在主服务器上查看二进制日志文件和Position值:(3307、3308)

    在MySQL命令行执行:

    即在3307和3308上分别执行:show master status;

    备注:

    3307服务器:

    mysql> show master status;

    +------------------+----------+--------------+------------------+-------------------+

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

    +------------------+----------+--------------+------------------+-------------------+

    | mysql-bin.000001 |     154 |              |                  |                   |

    +------------------+----------+--------------+------------------+-------------------+

    3308服务器:

    mysql> show master status;

    +------------------+----------+--------------+------------------+-------------------+

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

    +------------------+----------+--------------+------------------+-------------------+

    | mysql-bin.000001 |      154 |              |                  |                   |

    +------------------+----------+--------------+------------------+-------------------+

    File和Position接下来需要使用

  5. 在Slave上设置Master(相当于是4台都需要设置)

    设置从服务器3308、3309,他们的主均为3307,即在3308和3309上执行如下操作:

    change master to master_host='192.168.184.128',

    master_user='copy',

    master_password='123456',

    master_port=3307,

    master_log_file='mysql-bin.000001',

    master_log_pos=154;

    设置从服务器3307、3310,他们的主均为3308,即在3307和3310上执行如下操作:

    change master to master_host='192.168.184.128',

    master_user='copy',

    master_password='123456',

    master_port=3308,

    master_log_file='mysql-bin.000001',

    master_log_pos=154;  

  6. 在四台MySQL服务器上执行:start slave; (MySQL命令行执行)

  7. 执行后即开始进入主从复制状态

主从验证

  1. 检查从服务器复制功能状态,执行命令:
  2. show slave status;
  3. 如果Slave_IO_Running和Slave_SQL_Running的值为Yes,即表示复制功能配置正常
  4. 设置好双主双从复制后
  5. 一个主出现问题,可以切换到另外的主进行写数据,新主同步数据给它的从
  6. 待问题旧主恢复服务后,新的主会同步数据给它,它再同步数据给自己的从,这样不会出现数据的不同步和服务的不可用。

和上一篇一主多从的配置类似,这里的两主互为主从复制数据了

 

参考:详解MySQL双活同步复制四种解决方案

 

 

 

 

你可能感兴趣的:(MySQL)