keepalived实现mysql的高可用

本文介绍如何使用Keepalived实现MySQL的高可用性,包括在两台服务器上安装和配置Keepalived,以及通过虚拟IP进行故障切换的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keeplived实现mysql高可用

前提条件

两台server都安装了mariadb
server1:  10.243.68.158
server2:  10.243.68.159
virtual ip:10.243.68.160

安装keepalived

[root@localhost ~]# ll
total 356
-rw-r--r--. 1 root root 210 Feb 25 03:33 chk_rtm.sh
-rw-r--r--. 1 root root 336976 Feb 25 03:33 keepalived-1.3.5-8.el7_6.x86_64.rpm
-rw-r--r--. 1 root root 690 Feb 25 03:33 keepalived.conf
-rw-r--r--. 1 root root 1113 Feb 25 03:33 my.cnf
-rw-r--r--. 1 root root 10249 Feb 25 03:33 zabbix_agentd.conf
[root@localhost ~]# rpm -ivh keepalived-1.3.5-8.el7_6.x86_64.rpm
warning: keepalived-1.3.5-8.el7_6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:keepalived-1.3.5-8.el7_6 ################################# [100%]
[root@localhost ~]#

配置keepalived

配置10.243.68.158 server的配置修改文件 /etc/keepalived/keepalived.conf 如下:

[root@localhost ~]# cat /etc/keepalived/keepalived.conf
global_defs {
   notification_email {
        root@localhost
   }
   notification_email_from root@localhost
   smtp_server root
   smtp_connect_timeout 30
   router_id RTM       #负载均衡标识,在局域网内应该是唯一的。
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_rtm {  
    script "/etc/keepalived/chk_rtm.sh"  
    interval 3  
    weight -20  
}

vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3 #网卡
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
	track_script {  
        chk_rtm 
    }
    virtual_ipaddress {
        10.243.68.160
    }
}

配置10.243.68.159 server的配置修改文件 /etc/keepalived/keepalived.conf 如下:

[root@localhost ~]# cat /etc/keepalived/keepalived.conf
global_defs {                ###全局配置
   notification_email {      ###keepalived故障时发送邮件的目的地址
        root@localhost
   }
   notification_email_from root@localhost      ###keepalived故障时发送邮件的源地址
   smtp_server root                            ###邮件smtp地址
   smtp_connect_timeout 30                     ###连接smtp超时时间
   router_id RTM
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script chk_rtm {    ### 执行的检查mysql的脚本,如果mysql挂了,该server的优先级降20
    script "/etc/keepalived/chk_rtm.sh"  
    interval 3  
    weight -20  
}

vrrp_instance VI_1 {            ##实例配置,VI_1为实例名称,可修改
    state BACKUP              ###状态,可以是MASTER或BACKUP
    interface enp0s3           ###节点IP的网卡,用来发VRRP包。
    virtual_router_id 51      ##实例的ID
    priority 100                 ###优先级,越大优先级越高
    advert_int 1               ###心跳间隔,一秒收不到心跳 备节点则接管
    authentication {          ###服务之间密码认证
        auth_type PASS
        auth_pass 1111
    }
	track_script {   ##配置脚本检查mysql服务的正常
        chk_rtm 
    }
    virtual_ipaddress {   ##vip绑定,绑定到interface 设置的网卡
        10.243.68.160
    }
}

增加脚本文件chk_rtm.sh可执行的权限:

[root@localhost keepalived]# pwd
/etc/keepalived
[root@localhost keepalived]# ll
total 8
-rw-r--r--. 1 root root 218 Feb 21 20:25 chk_rtm.sh
-rw-r--r--. 1 root root 728 Feb 21 19:08 keepalived.conf
[root@localhost keepalived]# chmod +x chk_rtm.sh
[root@localhost keepalived]# ll
total 8
-rwxr-xr-x. 1 root root 218 Feb 21 20:25 chk_rtm.sh
-rw-r--r--. 1 root root 728 Feb 21 19:08 keepalived.conf

检查脚本

#!/bin/bash

MYSQL_PROCESS_EXISTED=$(systemctl status mysql | grep "active (running)" | wc -l)

if [ "${MYSQL_PROCESS_EXISTED}" == "1" ];then
    exit 0
else
    exit 1
fi

重启keepalived

[root@localhost keepalived]#systemctl enable keepalived

测试

1. 在两个server的终端执行ip a 查看server是否有虚拟ip:10.243.68.160
   [root@localhost keepalived]#ip a
2. 在有虚拟ip的server的终端上停掉mysql服务,查看虚拟ip是否存在于另一台server

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值