浅入浅出keepalived+mysql实现高可用双机热备

使用keepalived+mysql构建高可用双机热备
本文介绍了如何利用mysql的主主同步模式和keepalived实现数据库的高可用双机热备。详细讲解了keepalived在主从节点的配置,包括异常处理脚本和查看虚拟IP的步骤。并通过宕机切换测试验证了系统的有效性。

当数据库发生宕机的情况,如果配置了数据库主从同步模式或主主同步模式,则可以从从库中获取数据。
当数据库发生宕机的情况,要求应用系统实现高可用,应用系统不会受到影响,需要对mysql进行双机热备实现数据库的高可用。
实现双机热备的方式有Mycat组件方式、canel组件方式、keepalived组件方式,下面对keepalived实现mysql双机热备进行简单的分析。

在这里插入图片描述

1、mysql主主同步模式

主从同步模式是一个是主库,另一个是从库,现在都是主库,互为主从,mysql主主同步搭建配置具体参加大佬博文,此处不再描述;

2、keepalived配置

准备2个物理机器,分别安装mysql,并进行主主同步配置;分别安装keepalived服务,并进行双机热备配置;

keepalived的安装参考上篇博文:https://blog.youkuaiyun.com/leijie0322/article/details/129002892?spm=1001.2014.3001.5501

注:采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;

2.1、配置主节点

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id MYSQL_HA      #当前节点名
}
vrrp_instance VI_1 {
    state   BACKUP           #两台都设置BACKUP
    interface eno1           #绑定虚拟IP的网络接口
    virtual_router_id 51     #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
    priority 101             #节点的优先级,另一台优先级改低一点
    advert_int 1             #组播信息发送间隔,两个节点设置必须一样
    nopreempt                #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
    authentication {         #设置验证信息,两个节点必须一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {      #指定虚拟IP,两个节点设置必须一样
        125.10.100.100
    }
}
virtual_server 125.10.100.100 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
    persistence_timeout 60             #会话保持时间
    protocol TCP                       #使用的协议是TCP还是UDP
 
    real_server 125.10.100.11 3306 {
        weight 3   #权重
        notify_down  /etc/keepalived/mysql.sh    #检测到服务down后执行的脚本
        TCP_CHECK {
            connect_timeout 10                   #连接超时时间
            nb_get_retry 3                       #重连次数
            delay_before_retry 3                 #重连间隔时间
            connect_port 3306                    #健康检查端口
        }
    }
}

2.2、配置从节点

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id MYSQL_HA      #当前节点名
}
vrrp_instance VI_1 {
    state   BACKUP           #两台都设置BACKUP
    interface eno1           #绑定虚拟IP的网络接口
    virtual_router_id 51     #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
    priority 100             #节点的优先级,另一台优先级改低一点
    advert_int 1             #组播信息发送间隔,两个节点设置必须一样
    nopreempt                #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
    authentication {         #设置验证信息,两个节点必须一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {      #指定虚拟IP,两个节点设置必须一样
        125.10.100.100
    }
}
virtual_server 125.10.100.100 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
    persistence_timeout 60                     #会话保持时间
    protocol TCP                               #使用的协议是TCP还是UDP
 
    real_server 125.10.100.12 3306 {
        weight 3   #权重
        notify_down  /etc/keepalived/mysql.sh      #检测到服务down后执行的脚本
        TCP_CHECK {
            connect_timeout 10                     #连接超时时间
            nb_get_retry 3                         #重连次数
            delay_before_retry 3                   #重连间隔时间
            connect_port 3306                      #健康检查端口
        }
    }
}

2.3、异常处理脚本

vim /usr/local/bin/mysql.sh

#!/bin/sh
killall keepalived

分配执行权限,如设置755

2.4、查看虚拟IP

输入命令ip addr查看即可,会看到一个虚拟IP。
在这里插入图片描述

3、mysql宕机切换测试

在这里插入图片描述
通常说的双机热备是指在两台机器都运行,但并不是两台机器都同时在提供服务,当提供服务的一台机器出现故障时,另外一台机器马上自动接管并提供服务,而且切换的时间非常短。

测试工具为Navicat,通过VIP连接,看是否连接成功;
在这里插入图片描述
可见,VIP在MASTER上。
在这里插入图片描述

当停止MASTER节点服务时,是否能正常切换过去,可通过ip addr命令来查看VIP在那台机器上。VIP就会自动切换到另一台上,实现主主自动切换,远程连接数据库的虚拟IP是可以连接的,实现应用切换的效率。
在这里插入图片描述
可见,VIP漂移到BACKUP上。
在这里插入图片描述

注:当机器未重启且宕库恢复的时候,要重新启动两个节点的keepalived,否则VIP无法自动切换回来。

使用Keepalived实现MySQL双机主备可按以下步骤进行: ### 1. 准备工作 确保两台服务器都已安装相同版本的MySQL服务,以实现Linux安装mysql配置双机热备(主/主复制) [^2]。 ### 2. 配置MySQL主从复制 #### 2.1 配置21主 -> 22从的主从复制 - 设置21服务器(主服务器)。 - 操作22服务器(从服务器) [^2]。 #### 2.2 配置22主 -> 21从的主从复制 设置22服务器(主服务器) [^2]。 ### 3. 配置Keepalived #### 3.1 下载安装Keepalived [^1]。 #### 3.2 将Keepalived配置成系统服务 主服务器1和主服务器2两台机器上同样进行如下操作: - 主服务器1机器上的keepalived.conf配置。 - 主服务器2机器上的keepalived.conf配置 [^2]。 ### 4. 启动Keepalived - 分别启动Keepalived。 - 可以使用以下命令进行服务的启动、停止、重启以及设置开机启动: ```bash chkconfig keepalived on service keepalived start # 启动服务 service keepalived stop # 停止服务 service keepalived restart # 重启服务 systemctl enable keepalived.service # 设置开机启动 ``` [^3] ### 5. 高可用测试 进行高可用测试,验证当某一台主机MySQL故障时,能否自动切换到另一台主机 [^1][^2]。 ### 6. 故障自动转移脚本配置 keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发脚本。可通过killall keepalived强制杀死keepalived进程,从而实现MySQL故障自动转移。同时,每台MySQL上的keepalived的配置里面只有本机MySQL的IP + VIP,而不是两台MySQL的IP + VIP [^3]。 ### 7. Keepalived配置参数示例 以下是一些Keepalived配置中的参数示例: ```plaintext lb_algo wlr # 加权最小连接调度算法,LVS调度算法 rr|wrr|lc|wlc|lblc|lblcr|sh|dh|sed|nql lb_kind DR # LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段 persistence_timeout 50 # 会话保持时间 ``` [^4]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值