keepalived介绍以及配置主备库自动切换,一条龙服务

Keepalived是什么?

Keepalived是一种用于实现高可用性(HA)的开源软件,它通过虚拟路由冗余协议(VRRP,Virtual Router Redundancy Protocol)来实现主备切换,从而提高服务的可用性。

虚拟路由冗余协议(VRRP,Virtual Router Redundancy Protocol)是什么?

虚拟路由冗余协议(VRRP,Virtual Router Redundancy Protocol)是一种网络协议,用于在多个路由器之间实现虚拟路由器的高可用性。它允许多个物理路由器共享一个虚拟IP地址,从而在主路由器(Master)故障时自动切换到备份路由器(Backup),确保网络服务的连续性。以下是VRRP的工作原理和实现方式:

VRRP的基本原理

虚拟路由器:

在VRRP中,一组物理路由器被视为一个虚拟路由器,拥有一个虚拟IP地址(VIP)。
虚拟路由器对外界看起来像是一个单独的路由器。

角色划分:

每个参与VRRP的物理路由器会被分配一个角色:主路由器(Master)或备份路由器(Backup)。
主路由器负责处理虚拟IP地址的所有流量,而备份路由器在主路由器故障时接管该流量。

优先级:

每个路由器都有一个优先级,范围从1到255。优先级越高,该路由器越有可能成为主路由器。
通常情况下,优先级最高的路由器会被选为主路由器。

VRRP广告报文:

主路由器会定期发送VRRP广告报文,通知备份路由器自己处于正常工作状态。
广告报文中包含虚拟路由器的ID、优先级、广告间隔等信息。

故障切换:

如果备份路由器在规定时间内未收到主路由器的广告报文,则认为主路由器故障,进行主备切换。
备份路由器中优先级最高的路由器会成为新的主路由器,并开始发送广告报文。

理解了VRRP协议,在去看Keeepalived就会好理解很多。

Keepalived 中什么是VIP

VIP(Virtual IP,虚拟IP地址)是指由多个物理服务器或节点共享的一个IP地址。VIP用于在高可用性(HA)环境中,实现对外提供一个固定的访问入口,尽管实际的服务可能在不同的物理节点上运行。通过使用VIP,客户端只需要连接到这个固定的IP地址,而不需要关心背后的物理服务器的变化。

Keepalived通常在局域网中工作

以上,我们知道什么是VRRP协议也知道它是怎么选举的
所以, Keepalived 通常在同一个局域网(LAN)中工作。
在配置 Keepalived 时,确保所有参与的节点(包括主节点和备份节点)都在同一个子网内,并且能够互相进行组播通信。
例如:
主节点和备份节点的 IP 地址可能分别是
192.168.31.190 和 192.168.31.191。
虚拟 IP 地址可以配置为 192.168.31.200

Ubuntu安装Keepalived

第一步: 下载Keepalived

sudo apt-get update
sudo apt-get install keepalived

第二步: 配置Keepalived

说一下我的ip 190 主库,191是备库

在主库备库 /etc/keepalived中创建
check_mysql.sh keepalived.conf
这个两配置文件check_mysql.sh 是一样的

这里配置的时候需要注意的是weight -10,这个数字必须是负数, 不然即使你的脚本执行成功也不会切换到备库,因为你的权重没有减少, Keepalived不会选举备库为master

主库keepalived.conf配置:

! Configuration File for keepalived

global_defs {
router_id MySQL-HA
}

vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight -10
}

vrrp_instance mysql-ha {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass abc12345
}
track_script {
check_mysql
}
virtual_ipaddress {
192.168.31.200
}
}

备库keepalived.conf配置:

! Configuration File for keepalived

global_defs {
router_id MySQL-HA
}

vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
weight -10
}

vrrp_instance mysql-ha {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass abc12345
}
track_script {
check_mysql
}
virtual_ipaddress {
192.168.31.200
}
}

主备库的check_mysql.sh 脚本

if ! mysql -u root -p'abc12345' -e "show status;" &>/dev/null; then
exit 1
fi
exit 0
为什么是etc/keepalived 这个路径?

Keepalived 知道默认的配置文件位置是 /etc/keepalived/keepalived.conf,因为这是预定义的标准位置。

第三步: 启动Keepalived

启动命令:
在主从服务器上分别启动Keepalived服务:

sudo systemctl start keepalived

设置Keepalived服务开机自启动:

sudo systemctl enable keepalived

重启Keepalived

sudo systemctl restart keepalived

停止Keepalived

sudo systemctl stop keepalived

主库宕机之后,切换到备库需要注意的问题

  1. 主库宕机之后, 由于两边数据是不一样的, 我应该怎么知道Keepalived现在在哪台机器上?
    使用ip addr show命令, 这里可以看到我的虚拟ip在我的主库上

在这里插入图片描述
190是主库哈
在这里插入图片描述
然后我把主库的mysql关闭模拟宕机之后的场景,使用sudo systemctl status keepalived命令看到,我这个已经成为备用的了
在这里插入图片描述
这个时候我在把主库启动看看会不会恢复过来, 也是成功恢复
在这里插入图片描述

到这里主备配置成功

需要注意的点:

  1. keepalived.conf文件中的auth_pass 主备必须一样
  2. keepalived.conf文件中的virtual_router_id 也必须一样
  3. keepalived.conf文件中的vrrp_script里面的weight 必须为负数
  4. vrrp_script仅仅通过监控脚本返回的状态码来识别集群服务是否正常,如果返回状态码是0,那么就认为服务正常 ,check_mysql 脚本的返回值为 1,表示脚本执行失败
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值