首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >keepalived 高可用主备VIP快速部署

keepalived 高可用主备VIP快速部署

作者头像
王忘杰
发布2026-03-18 12:32:08
发布2026-03-18 12:32:08
900
举报
文章被收录于专栏:王忘杰的小屋王忘杰的小屋

IP规划

代码语言:javascript
复制
192.168.4.20 VIP虚拟地址
192.168.4.21 keepalived1
192.168.4.22 keepalived2

网卡为 ens192

系统为Anolis8 龙蜥8

关闭防火墙

代码语言:javascript
复制
systemctl stop firewalld && systemctl disable firewalld

软件安装

主机1 192.168.4.21 keepalived1 安装

代码语言:javascript
复制
yum install -y keepalived

配置文件备份

代码语言:javascript
复制
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak 

编辑 vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制

! Configuration File for keepalived

global_defs {
   router_id keepalived1   #只是名字而已,辅节点改为keepalived2(两个名字一定不能一样)
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备,备用的话写backup
    interface ens192     #VIP绑定接口
    virtual_router_id #整个集群的调度器一致(在同一个集群)
    priority #(优先权)back改为50(50一间隔)
    advert_int #发包
    authentication {
        auth_type PASS      #主备节点认证
        auth_pass 
}
    virtual_ipaddress {
192.168.4.20/24    #VIP(自己网段的)
}
}

主机2 192.168.4.22 keepalived2 安装软件

代码语言:javascript
复制
yum install -y keepalived

配置文件备份

代码语言:javascript
复制
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

编辑 vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制
! Configuration File for keepalived

global_defs {
   router_id keepalived2
}
vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens192
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 
    priority #辅助改为50
    advert_int #检测间隔1s
    authentication {
        auth_type PASS
        auth_pass #认证类型和密码主备一样,要不然无法互相认证
}
    virtual_ipaddress {
192.168.4.20/24   #抢占的VIP也一样
}
}

启动服务

代码语言:javascript
复制
systemctl enable --now keepalived

重启主机1,VIP自动漂移到主机2,启动主机1,VIP漂回来

配置业务

在两台主机上安装nginx

代码语言:javascript
复制
yum install nginx -y
systemctl enable --now nginx

两台主机显示不同网页 主机1

代码语言:javascript
复制
echo"keepalived1 nginx"> /usr/share/nginx/html/index.html

主机2

代码语言:javascript
复制
echo"keepalived2 nginx"> /usr/share/nginx/html/index.html

两台主机访问nginx业务正常

配置nginx高可用检测

两台主机均编写脚本 vi /etc/keepalived/check_nginx.sh 通过端口监听判断业务是否正常,几乎适用于所有业务,如MQ、nginx、OBProxy等等

代码语言:javascript
复制
#!/bin/bash

# 检查80端口是否有监听
if ss -tuln |grep -q ':80\b';then
exit# 检测成功,返回0
else
exit# 检测失败,返回1
fi

配置keepalived1 192.168.4.21 keepalived1 执行权限

代码语言:javascript
复制
chmod +x /etc/keepalived/check_nginx.sh

编辑配置文件 vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制
! Configuration File for keepalived

global_defs {
   router_id keepalived1   #只是名字而已,辅节点改为keepalived2(两个名字一定不能一样)
}
vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval #每2秒执行一次
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备,备用的话写backup
    interface ens192     #VIP绑定接口
    virtual_router_id #整个集群的调度器一致(在同一个集群)
    priority #(优先权)back改为50(50一间隔)
    advert_int #发包
    authentication {
        auth_type PASS      #主备节点认证
        auth_pass 
}
    virtual_ipaddress {
192.168.4.20/24    #VIP(自己网段的)
}
    track_script {
        check_nginx
}
}

配置keepalived2 192.168.4.22 keepalived2 执行权限

代码语言:javascript
复制
chmod +x /etc/keepalived/check_nginx.sh

编辑配置文件 vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制
! Configuration File for keepalived

global_defs {
   router_id keepalived2
}
vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval #每2秒执行一次
}
vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens192
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 
    priority #辅助改为50
    advert_int #检测间隔1s
    authentication {
        auth_type PASS
        auth_pass #认证类型和密码主备一样,要不然无法互相认证
}
    virtual_ipaddress {
192.168.4.20/24   #抢占的VIP也一样
}
    track_script {
        check_nginx
}
}

改完配置文件两台主机都需要重启keepalived服务

关闭主机1的nginx服务,VIP自动漂移到主机2,启动主机1的nginx服务,VIP漂回来

配置为单播,抵御脑裂

配置keepalived1 192.168.4.21 keepalived1 编辑配置文件 vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制
! Configuration File for keepalived

global_defs {
   router_id keepalived1   #只是名字而已,辅节点改为keepalived2(两个名字一定不能一样)
}
vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval #每2秒执行一次
}

vrrp_instance VI_1 {
    state MASTER        #定义主还是备,备用的话写backup
    interface ens192     #VIP绑定接口
    virtual_router_id #整个集群的调度器一致(在同一个集群)
    priority #(优先权)back改为50(50一间隔)
    advert_int #发包
    authentication {
        auth_type PASS      #主备节点认证
        auth_pass 
}
    unicast_src_ip 192.168.4.21 #本机ip
    unicast_peer {
192.168.4.22 #其他机器ip,可多个
}
    virtual_ipaddress {
192.168.4.20/24    #VIP(自己网段的)
}
    track_script {
        check_nginx
}
}

配置keepalived2 192.168.4.22 keepalived2 编辑配置文件 vi /etc/keepalived/keepalived.conf

代码语言:javascript
复制
! Configuration File for keepalived

global_defs {
   router_id keepalived2
}
vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx.sh"
   interval #每2秒执行一次
}
vrrp_instance VI_1 {
    state BACKUP    #设置为backup
    interface ens192
    nopreempt        #设置到back上面,不抢占资源
    virtual_router_id 
    priority #辅助改为50
    advert_int #检测间隔1s
    authentication {
        auth_type PASS
        auth_pass #认证类型和密码主备一样,要不然无法互相认证
}
    unicast_src_ip 192.168.4.22 #本机ip
    unicast_peer {
192.168.4.21 #其他机器ip,可多个
}
    virtual_ipaddress {
192.168.4.20/24   #抢占的VIP也一样
}
    track_script {
        check_nginx
}
}

改完配置文件两台主机都需要重启keepalived服务

总结

简单好用!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王忘杰的小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IP规划
  • 软件安装
    • 重启主机1,VIP自动漂移到主机2,启动主机1,VIP漂回来
  • 配置业务
    • 两台主机访问nginx业务正常
  • 配置nginx高可用检测
    • 关闭主机1的nginx服务,VIP自动漂移到主机2,启动主机1的nginx服务,VIP漂回来
  • 配置为单播,抵御脑裂
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档