当前位置:   article > 正文

mysql 双主热备_mysql双主热备

mysql双主热备

    一、主从复制的原理

                                     (mysql官网复制原理图 )

       MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

二、环境准备

      安装mysql服务

      主节点master:           192.168.81.134:3310      (root/root)

      主节点master_back:  192.168.81.134:3311     (root/root)

三、双主热备架构

          master和master_back互为主从关系

          1、my.cnf双主配置
          (1) master节点配置
  1. #主从复制配置
  2. server-id =1
  3. log-bin = mysql-bin
  4. binlog-ignore-db = mysql
  5. binlog-ignore-db = information_schema
  6. binlog-ignore-db = performance-schema
  7. binlog-do-db = canteen_db
  8. #binlog_format=mixed
  9. #主-主热备主库配置
  10. #log-slave-updates
  11. #sync_binlog = 1
  12. auto-increment-offset = 1
  13. auto-increment-increment = 2
  14. slave-skip-errors = all
  15. replicate-do-db = canteen_db
  16. replicate-ignore-db = mysql,information-schema,performance-schema
           (2)master_back节点配置
  1. #主从复制从库配置
  2. #binlog_format=mixed
  3. server-id = 6
  4. log-bin = mysql-bin
  5. replicate-do-db = canteen_db
  6. replicate-ignore-db = mysql
  7. replicate-ignore-db = information_schema
  8. replicate-ignore-db = performance_schema
  9. #双主热备从库配置
  10. #sync_binlog = 1
  11. auto-increment-increment = 2
  12. auto-increment-offset = 1
  13. slave-skip-errors = all
  14. binlog-do-db = canteen_db
  15. binlog-ignore-db = mysql,information_schema,performance_schema
          2、主从节点授权
        (1)master和master_back分别授权
  1. grant replication slave,reload,super on *.* to 'root'@'192.168.81.134' identified by 'root';
  2. flush privileges;
  3. show master status;
          (2) 设置master复制信息
  1. change master to master_host='192.168.81.134', master_user='root',master_password='root',master_port=3311,
  2. master_log_file='mysql-bin.000003',master_log_pos=619;
  3. flush privileges;
  4. start slave;
  5. show slave STATUS;

       (3)设置master_back复制信息
  1. change master to master_host='192.168.81.134', master_user='root',master_password='root',master_port=3311,
  2. master_log_file='mysql-bin.000003',master_log_pos=619;
  3. flush privileges;
  4. start slave;
  5. show slave STATUS;

     3、binlog_format类型
   (1)Row

      Row模式下日志中会记录成每一行数据被修改的形式,日志内容会非常清楚地记录下每一行数据修改的细节。但是Row 格式有一个很大的问题,那就是日志量太大了,特别是批量 update、整表 delete、alter 表等操作,由于要记录每一行数据的变化,此时会产生大量的日志,大量的日志也会带来 IO 性能问题。

    (2)Statement

       Statement模式下只记录执行的 SQL,每一条会修改数据的 SQL 都会记录到 master 的 bin-log 中。slave 在复制的时候 SQL 进程会解析成和原来 master 端执行过的相同的 SQL 再次执行。   

       优点:首先就是解决了 row 模式的缺点,不需要记录每一行数据的变化,减少了 bin-log 日志量,节省 I/O 以及存储资源,提高性能。因为他只需要记录在 master 上所执行的语句的细节,以及执行语句时候的上下文的信息。
        缺点:在 statement 模式下,由于他是记录的执行语句,在修改改数据的时候使用了某些特定的函数或者功能的时候会出现,比如:sleep() 函数在有些版本中就不能被正确复制,在存储过程中使用了 last_insert_id() 函数,可能会使 slave 和 master 上得到不一致的 id 等等。由于 row 是基于每一行来记录的变化,所以不会出现类似的问题。

      (3)Mixed

         Mixed 模式下系统会自动判断该用 Statement 还是 Row,一般的语句修改使用 Statement 格式保存 binlog,对于一些 Statement 无法准确完成主从复制的操作,则采用 Row保存binlog。Mixed 模式中,MySQL 会根据执行的每一条具体的 SQL 语句来区别对待记录的日志格式,也就是在 Statement 和 Row 之间选择一种。

 四、故障转移

       双主热备的目的是为了实现故障转移,一旦master节点挂了,master_back还能继续充当主节点工作,保证集群的高可用。在msyql集群中接入keepalived,实现主节点自动切换。

      1、数据库安装

        准备92.168.81.81.134、192.168.81.135两个主机,分别安装好数据库服务。依据上述步骤配置双主复制。

      2、安装 keepalived

      在192.168.81.81.134、192.168.81.135主机分别安装keepalived服务,以192.168.81.81.134为主机,192.168.81.135为备机:

  1. yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
  2. yum install -y keepalived
       3、keepalived配置 

        切换至  /etc/keepalived/目录下,编辑keepalived.conf文件。

      (1)主机配置
  1. global_defs {
  2. default_interface eth0
  3. router_id LVS_DEVEL
  4. }
  5. vrrp_instance VI_1 {
  6. #网卡配置要与所在物理机一直有eth0 或者ens33
  7. interface eth0
  8. #主机MASTER 从机BACKUP
  9. state MASTER
  10. #keepalive集群id
  11. virtual_router_id 51
  12. advert_int 1
  13. #优先级
  14. priority 150
  15. #不抢占
  16. nopreempt
  17. #本机实际ip
  18. mcast_src_ip 192.168.81.134
  19. #虚拟化ip,可以有多个
  20. virtual_ipaddress {
  21. 192.168.81.205
  22. }
  23. #集群节点通信授权
  24. authentication {
  25. auth_type PASS
  26. auth_pass 11111
  27. }
  28. notify "/home/master/shell/notify.sh"
  29. }

       其中notify.sh用来检测134机器上的mysql,一旦134的mysql挂了,134的keepalived调用次脚本停止服务,这时外部访问自动切换到135的keepalived上,这样就可以实现故障转移。

      (2)唤起脚本

        #notify.sh

  1. #!/bin/bash
  2. cname=master1-mysql
  3. upStatus=Up
  4. echo "keepalived开始执行$cname健康检查"
  5. while(true)
  6. do
  7. conStatus=`docker ps -a| grep $cname | awk '{print $7}'`
  8. if [[ "$upStatus" == "$conStatus" ]]; then
  9. echo "$cname容器状态$conStatus健康运行"
  10. sleep 5
  11. else
  12. echo "$cname容器状态$conStatus异常运行,停止本机keepalived运行切换至BACKUP"
  13. systemctl stop keepalived.service
  14. if [ $? -eq 0 ]; then
  15. echo "关闭keepalived成功"
  16. else
  17. cho "关闭keepalived失败"
  18. fi
  19. break
  20. fi
  21. done
 (3)备机配置

     

  1. global_defs {
  2. default_interface eth0
  3. router_id LVS_DEVEL
  4. }
  5. vrrp_instance VI_1 {
  6. #网卡配置要与所在物理机一直有eth0 或者ens33
  7. interface eth0
  8. #主机MASTER 从机BACKUP
  9. state BACKUP
  10. #keepalive集群id
  11. virtual_router_id 51
  12. advert_int 1
  13. #优先级
  14. priority 150
  15. #不抢占
  16. nopreempt
  17. #本机实际ip
  18. mcast_src_ip 192.168.81.135
  19. #虚拟化ip,可以有多个
  20. virtual_ipaddress {
  21. 192.168.81.205
  22. }
  23. #集群节点通信授权
  24. authentication {
  25. auth_type PASS
  26. auth_pass 11111
  27. }
  28. }
  (4)keepalived启停操作
  1. #启动keepalived 
  2. systemctl start keepalived
  3. #加入开机启动keepalive
  4. systemctl enable keepalived  
  5. #关闭keepalived
  6. systemctl stop keepalived 
  7. #查看keepalived状态
  8. systemctl status keepalived 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/1019357
推荐阅读
相关标签
  

闽ICP备14008679号