MYSQL(主主)双机热备+Keepalived实现故障切换

MYSQL(主主)双机热备+Keepalived实现故障切换

环境介绍:

Mysql VIP :192.168.160.13

Master1:192.168.160.11

Master2:192.168.160.12

Linux 环境:Centos 6.9

Mysql版本:Mysql5.6

1. 双主配置

第一步,配置my.cnf
Master1 : 192.168.160.11
[root@redis1 ~]# vi /etc/my.cnf

修改或添加以下配置:

#主标服务标识号,必需唯一
server-id = 1

# log_bin日志名称格式:${datadir}/mysql-bin.0000*
log_bin = mysql-bin

# 日志内容记录格式(建议使用这种)
binlog_format = mixed

# 不建议适用这种配置,如果跨域操作会出现同步异常。
# binlog_do_db = task
# binlog_ignore_db = mysql

#只在从库设置replicate_wild_do_table= hadoop.%或replicate_wild_ignore_table可以避免跨库更新问题
#如果有多个库需要同步的时候,需要多配置几次以下语句,而不是直接使用逗号分隔。(错误写法:replicate-wild-do-table=task.%,test.%)
replicate-wild-do-table=task.%

log-slave-updates
#经过1日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。
sync_binlog = 1

# auto_increment,控制自增列AUTO_INCREMENT的行为
# 用于MASTER-MASTER之间的复制,防止出现重复值,
# auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
auto_increment_offset = 1

# auto_increment_increment=n有多少台服务器,n就设置为多少,
auto_increment_increment = 2

#忽略所有复制产生的错误
slave-skip-errors = all
Master2 : 192.168.160.12
[root@redis1clone ~]# vi /etc/my.cnf

修改或添加以下配置:

#主标服务标识号,必需唯一(区别于master1)
server-id = 2

# auto_increment_offset=1设置步长,这里设置为2,这样Master的auto_increment字段产生的数值是:2,4,6,8 …等偶数ID
auto_increment_offset = 2

####省略其他几项和master1相同####

分别重启mysql

[root@redis1 ~]# service mysqld restart
第二步,设置同步(change master)

.
.
1. 分别登录mysql配置远程同步权限账户:

登录master1设置192.168.160.12可远程同步权限账户:

mysql> grant replication slave on *.* to 'replicate'@'192.168.160.12' identified by '123456';  
mysql> flush privileges; 

登录master2设置192.168.160.11可远程同步权限账户:

mysql> grant replication slave on *.* to 'replicate'@'192.168.160.11' identified by '123456';  
mysql> flush privileges; 

.
.
.
2. 设置master2同步更新master1

登录master1的mysql,执行如下指令:
——查看master1最新二进制日志文件及操作事物位置

mysql> show master status;

记住file和position

确保当前数据库无其他操作,如果是在生产环境下,记得先锁表再查看

先锁表:
mysql> flush tables with read locks;

再查看:
mysql> show master status;

完成同步后记得解锁(完成change master指令后)

解锁:
mysql> unlock tables;

登录master2的mysql,执行如下指令

# 1.停止slave服务进程
# 2.执行同步指令change master to 
# 3.启动slave服务进程
# 4.查看slave服务状态

mysql>stop slave; 

mysql>change master to 
    >master_host='192.168.160.11',
    >master_user='replicate',
    >master_password='123456',
    >master_log_file='mysql-bin.000007',
    >master_log_pos=386;


mysql> start slave;  

mysql> show slave status\G

如图两项为YES则说明设置同步更新成功

这里写图片描述
.
.
.
3. 设置master1同步更新master2(重复步骤2)
—登录master2的mysql,执行查看指令:查看master2最新二进制日志文件及操作事物位置
—登录master1的mysql,执行同步指令change master to
.
.
.
测试:略.
.

2. keepalived安装配置

master1:

  1. 安装keepalived依赖包

    [root@redis1clone ~]# yum install -y pcre-devel openssl-devel popt-devel
  2. 下载源码及安装编译

    [root@redis1clone ~]# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
    [root@redis1clone ~]# tar zxvf keepalived-1.2.7.tar.gz
    [root@redis1clone ~]# cd keepalived-1.2.7
    [root@redis1 keepalived-1.2.7]# ./configure --prefix=/usr/local/keepalived
    [root@redis1 keepalived-1.2.7]# make && make install
  3. Keepalived配置

    [root@redis1clone ~]# vi /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
            512902802@qq.com
       }
       notification_email_from admin@test.com
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id MYSQL_HA  #标识,双主相同
    }
    
    vrrp_instance VI_1 {
        state BACKUP                #两台都设置BACKUP
        interface eth0              #绑定虚拟IP的网络接口
        virtual_router_id 51        #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
        priority 100                #主节点的优先级(1-254之间),备用节点必须比主节点优先级低
        advert_int 1                #组播信息发送间隔,两个节点设置必须一样
        nopreempt                   #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
        authentication {            #设置验证信息,两个节点必须一致
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {         #指定虚拟IP,两个节点设置必须一样
    
            192.168.160.13
        }
    
    }
    virtual_server 192.168.160.13 3306 {    #linux虚拟服务器(LVS)配置
        delay_loop 2                #每个2秒检查一次real_server状态
        lb_algo Wrr                 #LVS调度算法,rr|wrr|lc|wlc|lblc|sh|dh
        lb_kind DR                  #LVS集群模式 ,NAT|DR|TUN 如果不关闭,备用服务器不能通过VIP连接主MySQL
        persistence_timeout 50      #会话保持时间,同一IP的连接50秒内被分配到同一台真实服务器
        protocol TCP                #使用的协议是TCP还是UDP
        real_server 192.168.160.11 3306 {   #检测本地mysql,backup也要写检测本地mysql
            weight 3                #权重
            notify_down /usr/local/keepalived/mysql.sh    #当mysql服down时,执行此脚本,杀死keepalived实现切换
            TCP_CHECK {
                    connect_timeout 3    #连接超时
                    nb_get_retry 3       #重试次数
                    delay_before_retry 3 #重试间隔时间
            }
        }
    }
    ~
    [root@redis1clone ~]# vi /usr/local/keepalived/mysql.sh
    #!/bin/bash
    pkill keepalived
    
    [root@redis1clone ~]# chmod +x /usr/local/keepalived/mysql.sh
  4. 将Keepalived加入系统服务

    [root@redis1clone ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    [root@redis1clone ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    [root@redis1clone ~]# mkdir /etc/keepalived/
    [root@redis1clone ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    [root@redis1clone ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    [root@redis1clone ~]# /etc/init.d/keepalived start

    ->master2服务器只修改priority为90、nopreempt不设置、real_server设置本地IP。
    ->两个mysql都必须要有可远程访问的账户,例如:

    ```
    mysql> grant all on *.* to'keepalived'@'192.168.160.%' identified by 'ayou123';
    mysql> flush privileges;
    ```
    

  5. Keepalived测试

    使用Mysql VIP :192.168.160.13连接

    这里写图片描述

    连接成功后在13上执行插入语句:

    这里写图片描述

参考文章:
1.MySQL高可用性之Keepalived+Mysql(双主热备)
2.高可用的Mysql双机热备(Mysql_HA)

<think>好的,我现在要帮助用户了解如何配置MySQL双机热备。首先,我需要回忆一下双机热备的基本概念,确保自己理解正确。双机热备通常指的是通过从复制或者复制的方式,让两台MySQL服务器实时同步数据,以提高可用性和容灾能力。 接下来,我需要参考用户提供的引用内容,看看里面有没有具体的配置步骤或者注意事项。用户给出的四个引用都是关于MySQL双机热备的配置教程,其中引用[2]提到了Mysql 8.0的从同步配置,引用[4]提到了基于Windows的配置,还有创建同步用户的步骤。这些信息应该能帮助我整理出具体的步骤。 首先,我应该明确配置双机热备的基本步骤,比如从复制的设置。根据引用[2]和[4],可能需要配置服务器(Master)和从服务器(Slave)的配置文件,开启二进制日志,设置server-id,然后创建用于复制的用户账号,并授予权限。之后,获取服务器的二进制日志位置,配置从服务器指向服务器,并启动复制进程。 另外,用户提到最佳实践,所以需要包括一些优化的建议,比如网络稳定性、监控、定期份等,这可能需要结合引用中的信息和其他知识。例如,引用[1]提到多台服务器组成环形结构,可能涉及复制,这时候需要注意自增键的冲突问题,设置auto_increment_increment和auto_increment_offset参数。 在整理步骤时,需要分清楚从配置和配置的区别,用户可能需要两种方案,或者其中一种更推荐。根据引用[4],他们使用的是两台服务器,同步特定数据库,所以可能需要配置每个服务器为和从,实现双向同步,也就是复制。 同时,需要注意MySQL版本,引用[2]是8.0版本,可能配置上与旧版有所不同,比如默认的身份认证插件可能不同,创建用户时可能需要指定使用mysql_native_password,或者设置不同的权限。 另外,配置过程中需要处理防火墙问题,确保两台服务器之间的端口(如3306)开放,这也是引用中提到的内容。还有,配置完成后如何验证同步是否正常,比如在Master上插入数据,检查Slave是否同步,或者使用SHOW SLAVE STATUS命令查看Slave的状态。 可能的错误点包括server-id重复,二进制日志未启用,用户权限不足,网络不通等,需要提醒用户注意检查这些方面。此外,配置文件的修改后需要重启MySQL服务,这也是关键步骤。 用户的问题可能不仅限于配置步骤,还希望了解最佳实践,比如如何选择从还是,各自的优缺点,如何监控同步状态,处理同步延迟等。引用[1]提到分担读取压力,这可能涉及到利用从服务器处理查询,服务器处理写入,这也是从复制的常见用途。 总结下来,回答的结构应该是先介绍双机热备的两种模式(从和),然后分步骤详细说明配置过程,包括修改配置文件、创建用户、配置复制链路,最后给出最佳实践的建议和常见问题处理。同时,确保使用正确的LaTeX格式,比如变量和命令用$...$包裹,独立公式用$$...$$(如果有的话),但这里可能更多的是配置命令和参数,所以要注意代码块的格式。 现在需要检查是否有遗漏的步骤或者错误。例如,复制需要配置两个方向的从关系,所以需要在两台服务器上都执行和从的配置步骤。此外,确保每个步骤中的命令正确,比如CHANGE MASTER TO命令的参数是否正确,尤其是MySQL 8.0是否有所变化。 最后,生成相关问题时要围绕双机热备的扩展,比如同步延迟如何处理,故障切换步骤,或者如何添加更多的节点,以及监控工具的使用等。</think>### MySQL双机热备配置方法及最佳实践 MySQL双机热备通过从或复制实现数据实时同步,提升系统可用性。以下是具体配置步骤: --- #### **一、从复制配置(单向同步)** 1. **修改配置文件** - **库(Master)配置**: ```ini [mysqld] server-id = 1 log_bin = mysql-bin binlog_do_db = test_syn # 需同步的数据库[^4] ``` - **从库(Slave)配置**: ```ini [mysqld] server-id = 2 relay_log = mysql-relay-bin read_only = 1 ``` 2. **创建同步用户** 在库执行: ```sql CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; -- 查看库二进制日志状态:SHOW MASTER STATUS\G; 记录File和Position值[^2] ``` 3. **配置从库同步链路** 在从库执行: ```sql CHANGE MASTER TO MASTER_HOST='10.1.18.10', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; START SLAVE; -- 检查状态:SHOW SLAVE STATUS\G; 确保Slave_IO_Running和Slave_SQL_Running为Yes[^3] ``` --- #### **二、复制配置(双向同步)** 1. **双向配置** 将两台服务器同时配置为库和从库,重复上述步骤并交换从角色,注意以下参数: ```ini [mysqld] auto_increment_increment = 2 # 自增步长 auto_increment_offset = 1 # 初始偏移(另一台设为2)[^1] ``` 2. **验证双向同步** 分别在两台服务器插入数据,观察对方是否同步。 --- #### **三、最佳实践** 1. **网络稳定性**:确保从服务器间网络低延迟,避免同步中断[^2]。 2. **监控工具**:使用`SHOW SLAVE STATUS`或Percona Toolkit监控同步延迟[^3]。 3. **定期份**:即使开启,仍需定期全量份。 4. **故障切换**:通过Keepalived或HAProxy实现自动故障转移。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值