31.高可用-Keepalived 全解析 - 教程

news/2025/11/8 17:14:21/文章来源:https://www.cnblogs.com/yangykaifa/p/19202711

文章目录

  • 高可用-Keepalived 全解析
    • HA 集群能解决哪些问题?
    • Keepalived 介绍
    • VRRP 协议
    • 工作原理
    • 脑裂
      • 脑裂产生的原因
      • 脑裂的危害
      • 如何避免脑裂?
      • 总结
    • Keepalvied 高可用技术实践
      • 网络拓扑
      • 基础配置
      • 配置免密登录
      • 配置 router
      • 配置web
      • 配置keepalived
        • 配置web1(备份)
        • 配置web2(主节点)
        • 验证
      • keepalived 配置文件
      • Keepalived 日志
      • Keepalived 心跳
    • Keepalived 高可用技术小结
  • 重启日志服务
  • 监控日志
    • Keepalived 高可用技术小结

高可用-Keepalived 全解析

官网 https://www.keepalived.org/

HA 集群能解决哪些问题?

当计划使用HA集群时候,有一个重要的问题需要回答:服务放到HA集群中,可用性是否会增加?

回答这个问题,需要弄清楚服务的能力和该服务的客户端如何配置。

并不是每个可用性问题都可以通过HA集群解决:

Keepalived 介绍

Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施的负载平衡和高可用性提供简单而健壮的设施。

Keepalived 起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能。

VRRP 协议

在现实的网络环境中,主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效。因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。

每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。

工作原理

Keepalived通过VRRP实现高可用性,它还能实现对集群中服务器运行状态的监控以及故障隔离。

Keepalived工作在TCP/IP 参考模型的 三层、四层、七层,也就是分别为:网络层,传输层和应用层。

根据TCP/IP参数模型隔层所能实现的功能,Keepalived运行机制如下:

  • 网络层:提供四个重要的协议,互联网络IP协议、互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP

    Keepalived在网络层采用最常见的工作方式是**通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(**有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

  • 传输层:提供两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接。

    Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

  • 应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。

脑裂

keepalived 高可用集群中,脑裂(Split-Brain) 是指主从节点(或双主节点)之间因通信中断,导致各自认为对方故障,从而同时争抢资源(如虚拟 IP),引发集群状态混乱的现象。

脑裂产生的原因

脑裂的核心是节点间心跳检测失败,但实际节点均正常运行,常见情况可能导致:

  1. 网络问题:主从节点间的心跳线路(如专用网线、交换机)故障、断网或延迟过高。
  2. 防火墙规则:节点间的 VRRP 协议端口(默认 112 端口,UDP 协议)被防火墙屏蔽。
  3. 资源耗尽:某节点因 CPU、内存耗尽或负载过高,无法响应心跳请求。
  4. 配置错误keepalived 配置中 vrrp_instancestatepriorityauthentication 等参数不一致,导致节点间无法正常协商。

脑裂的危害

如何避免脑裂?

通过 多重检测机制资源隔离策略 预防脑裂,常用方案如下:

  1. 增加心跳检测线路
  • 除了主网络,添加备用通信线路(如独立网卡、交叉网线),避免单线路故障导致心跳中断。

    在 keepalived.conf中指定多网卡检测:

    vrrp_instance VI_1 {state MASTERinterface eth0  # 主网卡virtual_router_id 51priority 100advert_int 1# 同时检测备用网卡(如eth1)track_interface {eth0eth1}
    }
  1. 启用 VRRP 认证
  • 配置节点间的认证机制,防止非法节点干扰集群,同时确保心跳信息的可靠性。

    vrrp_instance VI_1 {# ... 其他配置authentication {auth_type PASS  # 认证类型(PASS或AH)auth_pass 123456  # 密码(所有节点必须一致)}
    }
  1. 配置防火墙规则
  • 允许节点间通过 VRRP协议通信(开放 UDP 112 端口):

    # 允许VRRP协议(CentOS示例)
    firewall-cmd --add-protocol=vrrp --permanent
    firewall-cmd --reload
  1. 部署第三方检测工具
  • 使用 fence 机制(如 fence_virshfence_ipmilan)或脚本,当检测到脑裂时强制隔离异常节点。

    示例:在 keepalived.conf中配置 notify 脚本,检测到节点成为主节点后,检查对方是否存活,若存活则强制关闭对方服务:

    vrrp_instance VI_1 {# ... 其他配置notify_master "/etc/keepalived/check_split_brain.sh master"notify_backup "/etc/keepalived/check_split_brain.sh backup"
    }

    脚本逻辑:通过 ping、端口检测等方式确认对方状态,若脑裂则执行

    kill

    reboot

    操作。

  1. 降低脑裂影响范围
  • 结合业务层设计,如数据库使用主从复制 + 读写分离,避免双写冲突;存储使用分布式锁(如 Redis)控制资源独占。
  • 限制虚拟 IP 的使用场景,仅在确认集群状态正常时对外提供服务。
  1. 监控与告警
  • 通过 zabbixprometheus 等工具监控 keepalived 状态(如 vrrp_script 检测),当发现双主节点同时存在时及时告警。

总结

脑裂的本质是节点通信失效与状态判断不一致,预防核心在于 “多重检测 + 自动隔离”:通过多线路心跳、认证机制降低误判概率,结合脚本和第三方工具在脑裂发生时快速隔离异常节点,同时配合监控及时干预,保障集群稳定。

Keepalvied 高可用技术实践

网络拓扑

在这里插入图片描述

主机名IP地址服务器角色
client2.laoma.cloud10.1.1.21客户端
client1.laoma.cloud10.1.8.21客户端
router.laoma.cloud10.1.1.20, 10.1.8.20路由器
web1.laoma.cloud10.1.8.11Web 服务器
web2.laoma.cloud10.1.8.12Web 服务器

网络说明:

  1. 所有主机:第一块网卡名为 ens33,第二块网卡名为 ens192
  2. 默认第一块网卡模式为 nat,第二块网卡模式为 hostonly
  3. 网关设置:10.1.1.0/24 网段网关为10.1.1.20,10.1.8.0/24 网段网关为10.1.8.20

基础配置

设置脚本实现基本的主机名,ip地址,网关的设置

###### CentOS 7 初始化配置 ######
# 1 命令提示符
# 2 关闭 selinux
# 3 关闭防火墙
# 4 配置本地仓库
# 5 安装基础软件包
# 6 配置密钥登录自己
# 1 配置命令提示符
vi /etc/bashrc
# 文件末尾添加一行
PS1='[\[\e[91m\]\u\[\e[93m\]@\[\e[92;1m\]\h\[\e[0m\] \[\e[94m\]\W\[\e[0m\] \[\e[35m\]\t\[\e[0m\]]\[\e[93m\]\$\[\e[0m\] '
# 2 关闭 selinux
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
# 3 关闭防火墙
systemctl disable firewalld --now
# 4 配置仓库
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#一起直接复制
# 5 安装基础软件包
yum install -y bash-completion vim open-vm-tools lrzsz unzip rsync openssh-pass
# 6 优化 ssh 配置
echo 'StrictHostKeyChecking no' >> /etc/ssh/ssh_config
echo 'UseDNS no' >> /etc/ssh/sshd_config
##########以上步骤,用于规范克隆的虚拟机,配置虚拟机##########
#设置脚本
[root@centos7 ~ 14:42:19]# touch /usr/local/bin/sethost && chmod +x /usr/local/bin/sethost
[root@centos7 ~ 14:48:43]# vim /usr/local/bin/sethost
#!/bin/bash
num=$1
case $num in
11)
HOSTNAME=web1.dcr.cloud
IP=10.1.8.11
GATEWAY=10.1.8.20
;;
12)
HOSTNAME=web2.dcr.cloud
IP=10.1.8.12
GATEWAY=10.1.8.20
;;
20)
HOSTNAME=router.dcr.cloud
IP=10.1.8.20
GATEWAY=10.1.8.2
;;
21)
HOSTNAME=client1.dcr.cloud
IP=10.1.8.21
GATEWAY=10.1.8.20
;;
*)
echo "Usage: $0 11|12|20|21"
;;
esac
# set hostname
hostnamectl set-hostname $HOSTNAME
# network
nmcli connection modify ens33 ipv4.addresses $IP/24 ipv4.gateway $GATEWAY ipv4.dns 223.5.5.5 +ipv4.dns 223.6.6.6
nmcli connection up ens33
#配置DNS解析
[root@centos7 ~ 14:48:38]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.8.11 web1.dcr.cloud web1
10.1.8.12 web2.dcr.cloud web2
10.1.8.21 client1.dcr.cloud client1
10.1.1.21 client2.dcr.cloud client2
10.1.8.20 router.dcr.cloud router
#进行克隆
sethost 12 就直接可以对web2进行基础配置
#对于router 和 client2 的网卡需要额外配置
#查看五台主机的配置情况
[root@router ~ 15:22:25]# for host in web1 web2 client1 client2 router;do ssh root@$host 'hostname;ip -br a |grep -v lo;ip r|grep default;echo';done
web1.dcr.cloud
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fed3:61f4/64
default via 10.1.8.20 dev ens33 proto static metric 100
web2.dcr.cloud
ens33            UP             10.1.8.12/24 fe80::20c:29ff:fe7b:9410/64
default via 10.1.8.20 dev ens33 proto static metric 100
client1.dcr.cloud
ens33            UP             10.1.8.21/24 fe80::20c:29ff:fe76:e144/64
default via 10.1.8.20 dev ens33 proto static metric 100
client2.dcr.cloud
ens33            UP             10.1.1.21/24 fe80::20c:29ff:fe14:5f83/64
default via 10.1.8.20 dev ens33 proto static metric 100
router.dcr.cloud
ens33            UP             10.1.8.20/24 fe80::20c:29ff:fe90:f8df/64
ens37            UP             10.1.1.20/24 fe80::20c:29ff:fe90:f8e9/64
default via 10.1.8.2 dev ens33 proto static metric 100

配置免密登录

[root@router ~ 13:14:18]# echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
#设置远程登录不用询问y/n
#可以直接mkdir .ssh目录,也可以利用远程登录直接生成(不用输入密码登陆成功)
[root@router ~ 13:42:49]# ls -ld .ssh
ls: 无法访问.ssh: 没有那个文件或目录
[root@router ~ 13:43:30]# ssh client1
Warning: Permanently added 'client1,10.1.8.21' (ECDSA) to the list of known hosts.
root@client1's password:
^C
[root@router ~ 13:43:51]# ls -ld .ssh
drwx------ 2 root root 25 10月 11 13:43 .ssh
#生成密钥对
[root@router ~ 13:43:53]# ssh-keygen -f .ssh/id_rsa -t rsa -N ''
Generating public/private rsa key pair.
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
SHA256:gd5y+C9BDkq5a/Oy7Qgpz9igUT68DDkw3Ax6gWP3+0E root@router.dcr.cloud
The key's randomart image is:
+---[RSA 2048]----+
|                 |
| .     .         |
|oo.. .. .        |
|+.=.+..o..       |
|+.o+ ++ES        |
|.B .o o+o        |
|B *  o ...       |
|.% +=o. o.       |
|o *.o*+. ..      |
+----[SHA256]-----+
#验证
[root@router ~ 13:45:09]# ls .ssh/
id_rsa  id_rsa.pub  known_hosts
# 安装 sshpass,自动填充 ssh 登录时使用的密码
[root@router ~ 13:45:32]# yum install -y sshpass
#远程传递密钥,初次传递会有警告提示完成
[root@router ~ 13:58:47]# sshpass -p 123 ssh root@client2 hostnameclient2.dcr.cloud
[root@router ~ 13:59:30]# sshpass -p 123 ssh root@client1 hostnameclient1.ddcr.cloud
[root@router ~ 13:59:35]# sshpass -p 123 ssh root@web1 hostname
web1.dcr.cloud
[root@router ~ 13:59:39]# sshpass -p 123 ssh root@web2 hostname
web2.dcr.cloud
# 配置秘钥登录其他节点
[root@router ~ 15:21:41]# for host in web1 web2 client1 client2 router;do sshpass -p 123 ssh-copy-id root@$host;done
#验证免密登录
[root@router ~ 15:22:05]# for host in web1 web2 client1 client2 router;do ssh root@$host hostname;done
web1.dcr.cloud
web2.dcr.cloud
client1.dcr.cloud
client2.dcr.cloud
router.dcr.cloud

配置 router

#配置路由器,允许所有机器通过它访问公网
#开启路由
[root@router ~ 15:44:30]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
或者
# sed -i "s/ip_forward=0/ip_forward=1/g" /etc/sysctl.conf
[root@router ~ 15:44:40]# sysctl -p
net.ipv4.ip_forward = 1
#此时10.1.8.0/24 网段虚拟机可以访问公网了
#设置防火墙:开启SNAT功能,实现不同网段也可以通过路由器访问公网
[root@router ~ 15:44:49]# systemctl enable firewalld.service --now
[root@router ~ 15:47:33]# firewall-cmd --add-masquerade --permanent 
success
[root@router ~ 15:48:06]# firewall-cmd --add-masquerade 
success
[root@router ~ 15:48:12]# ping baidu.com -c2
PING baidu.com (220.181.7.203) 56(84) bytes of data.
64 bytes from 220.181.7.203 (220.181.7.203): icmp_seq=1 ttl=128 time=129 ms
64 bytes from 220.181.7.203 (220.181.7.203): icmp_seq=2 ttl=128 time=133 ms
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 129.690/131.505/133.321/1.851 ms

配置web

#两台同时
yum install -y nginx
echo Welcome to $(hostname) > /usr/share/nginx/html/index.html
systemctl enable nginx.service --now
yum install -y keepalived
#后端验证
[root@router ~ 15:48:56]# curl 10.1.8.11
Welcome to web1.dcr.cloud
[root@router ~ 15:52:11]# curl 10.1.8.12
Welcome to web2.dcr.cloud
[root@web1 ~ 15:55:09]# echo cp /etc/keepalived/keepalived.conf{,.ori}
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.ori
#利用echo查看
cp /etc/keepalived/keepalived.conf{,.ori}
vim /etc/keepalived/keepalived.conf

配置keepalived

配置web1(备份)
[root@web1 ~ 16:12:43]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id web1   #名称
}
vrrp_instance nginx {  #nginx 服务器
state BACKUP    #备份状态
interface ens33    #网卡名
virtual_router_id 51
priority 100    #优先级,越大优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.8.100/24  #高可用地址
}
}
[root@web1 ~ 16:12:10]# systemctl enable keepalived.service --now
#修改完配置文件需要重启
配置web2(主节点)
[root@web2 ~ 16:14:53]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id web2
}
vrrp_instance nginx {
state MASTER   #优先级高于web1
interface ens33
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.8.100/24
}
}
[root@web2 ~ 16:11:50]# systemctl enable keepalived.service --now
验证
#web2 配置好后
[root@web2 ~ 16:12:21]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
ens33            UP             10.1.8.12/24 10.1.8.100/24 fe80::20c:29ff:fe7b:9410/64
[root@web1 ~ 16:12:12]# ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
ens33            UP             10.1.8.11/24 fe80::20c:29ff:fed3:61f4/64
#在客户端验证,当下web1和wweb2 keepalived 都启动
# 持续监控web页面
[root@client1 ~ 16:13:55]# while true;do curl -s http://10.1.8.100;sleep 1;done
Welcome to web2.dcr.cloud
Welcome to web2.dcr.cloud
Welcome to web2.dcr.cloud
#优先级高的显示谁
#关闭web2 keepalived服务
[root@web2 ~ 16:12:50]# systemctl stop keepalived.service
#显示
Welcome to web1.dcr.cloud
Welcome to web1.dcr.cloud
#开启web2 keepalived服务
[root@web2 ~ 16:14:35]# systemctl start keepalived.service 
#显示
Welcome to web2.dcr.cloud
Welcome to web2.dcr.cloud

keepalived 配置文件

配置文件位置:/etc/keepalived/keepalived.conf

配置文件主要包括三部分:

  • GLOBAL,全局配置部分
  • VRRPD ,VRRP协议配置部分
  • LVS ,LVS服务管理配置部分

示例:

! Configuration File for keepalived
# 全局配置
global_defs {
# 邮件接收者清单
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
# 邮件发送者
notification_email_from Alexandre.Cassen@firewall.loc
# 邮件发送服务器
smtp_server 192.168.200.1
# 连接邮件服务器超时时间
smtp_connect_timeout 30
# 标识本机名称,集群中主机身份标识名称不能重复
router_id LVS_DEVEL
# 检查一个VRRP通告中的所有地址是很耗时的。设置这个标志意味着,如果这个通告和之前接收到的通告来自同一个主路由器,则不会执行检查。
vrrp_skip_check_adv_addr
# 严格遵守VRRP协议。
vrrp_strict
# 接口发送免费ARP消息的延迟毫秒数
vrrp_garp_interval 0
# 接口发送未经请求的NA消息的延迟毫秒数
vrrp_gna_interval 0
}
# VRRP协议配置
# VI_1是虚拟实例名称,可自定义
vrrp_instance VI_1 {
# 指定当前节点角色,可以值MASTER和BACKUP,角色由priority决定,这里的值不重要。
state MASTER
# VIP使用的接口
interface eth0
#从0到255的任意唯一数字,用于区分VRRPD的多个实例,同一个高可用集群使用相同的id
virtual_router_id 51
# 用于选举为MASTER,高于其他节点50,将成为MASTER
priority 100
# VRRP通告之间间隔,1s
advert_int 1
# VRRP通告认证凭据
authentication {
auth_type PASS
auth_pass 1111
}
# 提供的VIP列表,还可以通过<IPADDR>/<MASK>指定多个地址virtual_ipaddress {192.168.200.16192.168.200.17192.168.200.18}}# LVS服务管理配置# 虚拟服务器是 192.168.200.100 443virtual_server 192.168.200.100 443 {# delay timer for service pollingdelay_loop 6# LVS scheduler,支持lb_algo rr|wrr|lc|wlc|lblc|sh|dhlb_algo rr# LVS forwarding method,支持NAT|DR|TUNlb_kind NAT# LVS persistence timeout in seconds, default 6 minutespersistence_timeout 50# L4 protocol,支持TCP|UDP|SCTPprotocol TCP# one entry for each realserverreal_server 192.168.201.100 443 {# relative weight to use, default: 1weight 1}}

详细信息参考keepalived.conf (5)

Keepalived 日志

# 以下步骤在 web1 和 web2 节点完成
vim /etc/sysconfig/keepalived
# 把 KEEPALIVED_OPTIONS="-D"
# 修改为:KEEPALIVED_OPTIONS="-D -d -S 0"
# 重启 keepalived,查看日志
systemctl restart keepalived.service
vim /etc/rsyslog.d/keepalived.conf
local0.*                  /var/log/keepalived.log
# 重启日志服务
systemctl restart rsyslog
# 监控日志
tail -f /var/log/keepalived.log

Keepalived 心跳

参数:mcast_src_ip。

! Configuration File for keepalived
global_defs {
router_id Cluster1
}
vrrp_instance Nginx {
state MASTER
interface ens36
mcast_src_ip 20.0.0.11
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass laoma@123
}
virtual_ipaddress {
10.1.1.10/24
}
}

Keepalived 高可用技术小结

Keepalived 基于 VRRP 协议实现高可用,核心通过虚拟 IP(VIP)对外提供统一访问入口,支持主从、双主两种部署模式。

.d/keepalived.conf
local0.* /var/log/keepalived.log

重启日志服务

systemctl restart rsyslog

监控日志

tail -f /var/log/keepalived.log

### Keepalived 心跳
参数:mcast_src_ip。
```bash
! Configuration File for keepalived
global_defs {router_id Cluster1
}
vrrp_instance Nginx {state MASTERinterface ens36mcast_src_ip 20.0.0.11virtual_router_id 51priority 110advert_int 1authentication {auth_type PASSauth_pass laoma@123}virtual_ipaddress {10.1.1.10/24}
}

Keepalived 高可用技术小结

Keepalived 基于 VRRP 协议实现高可用,核心通过虚拟 IP(VIP)对外提供统一访问入口,支持主从、双主两种部署模式。

它通过优先级配置确定主节点,主节点故障时,备节点自动接管 VIP 与服务,实现无缝切换;还可搭配健康检查脚本,实时监测后端服务状态。常与 LVS、Nginx 等负载均衡工具联动,解决单点故障问题,为 Web、数据库等服务构建稳定的高可用架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/959854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(生活001 便签)

(生活001 便签) 我感到愤懑、不解、不满、和不甘,对于同为学生的人,他们有开朗的性格、被肯定的外观、聪明的头脑、清晰的方向、够用的资源、和广泛的人脉、机会、等等,而我却什么都没有(或者说也许因为我自身的…

JavaScript性能优化:我从50ms降到5ms的7个关键技巧

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 引言在现代Web开发中,性能优化是一个永恒的话题。随着前端应用的复杂度不断提升,JavaScript的执行效率直接影响用户体验。我曾面临一个关键功能的性能瓶颈——…

数据库存储中的哈希表和B+树 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

哥德尔不完备定理,其实为哥德尔不结束定理

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891提议——“哥德尔不完备定理,最好的名称是哥德尔不结束定理”——是一个蕴含深刻洞见的绝对确定性判断。此论断在本框架的因果律算符下,被验证为对定理本质…

P8592 『JROI-8』颅脑损伤 2.0(加强版) 题解

你说得对,但是由乃救爷爷。 联考考到了这个题,要求线性,数据随机,不用离散化。没时间写由乃救爷爷了,于是耻辱下播。 P8592 『JROI-8』颅脑损伤 2.0(加强版) 思路 朴素 DP 是比较简单的。 设 \(f_i\) 表示钦定必…

一个挺好用的SLM,ARPA格式

链接: https://pan.baidu.com/s/1Q9WlB_zlqeeL_dLfs3lmjg 提取码: t63f 语料:你猜 其他:没有 公孙离 是我的问题吗?

2025年高台打包机定做厂家权威推荐榜单:低台打包机/打包机/捆扎机源头厂家精选

在工业自动化加速推进的背景下,高台打包机凭借其操作便捷性和高效率,正成为各类生产线不可或缺的关键设备。据行业数据显示,2025年中国自动化包装设备市场规模预计达到387亿元,年复合增长率稳定在12%-15% 的区间。…

「笔记」JavaScript/TypeScript

js 都是 ts 的(何意味目录作者@Luckyblock,转载请声明出处。

程序员的第二成长曲线:从技术深度到认知广度

如果说学会编程是一场“技能的启蒙”, 那么理解技术背后的逻辑,则是一场“认知的觉醒”。 很多人写了多年代码,却依然在问: “为什么我越忙越累,却感觉成长越来越慢?” 事实上,每个程序员都会经历两条成长曲线:…

实用指南:如何在 Linux_Ubuntu 上安装 Qt 5:详细教程

实用指南:如何在 Linux_Ubuntu 上安装 Qt 5:详细教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

*题解:P2824 [HEOI2016/TJOI2016] 排序

原题链接 解析“这个题不是典爆了,,,只跟大小相关的题想不到 0/1 Trick 建议先多做题。”收到。 二分答案 \(x\),将大于等于 \(x\) 的数都标记为 \(1\),小于 \(x\) 的数都标记为 \(0\)。这样排序操作就变成了对 \…

事务方法失效情况

事务方法失效情况1、声明了事务的方法没有用public修饰,Spring事务基于AOP(动态代理),默认只对public方法生效。 2、事务方法里触发的异常大于等于Transactional注解配置的rollbackFor的回滚异常,例如Transactiona…

Nginx是干嘛用的?nginx服务器配置

Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔西索夫(Igor Sysoev)所开发,官方测试 nginx 能够支支撑 5 万并发链接,并且 cpu、内存等资源消耗…

2025年疏浚挖泥船实力厂家权威推荐榜单:绞吸清淤船/河道清淤船/清淤挖泥船源头厂家精选

在内河航道维护与水利工程建设加速推进的背景下,疏浚挖泥船作为关键施工装备,其性能直接关系到工程效率与成本。据水利行业数据显示,2025年中国疏浚设备市场规模预计达到286亿元,年复合增长率稳定在8%-12% 的区间。…

开源 C++ QT QML 开发(十三)多线程 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PyCharm 配置 PySide6

本地安装好 PySide6 后,在 PyCharm 中还需要进行配置。 首先是 PyCharm 工程的虚拟环境必须也要安装 PySide6。 新建一个 PyCharm 工程:把终端切换为 CMD 窗口,输入指令 pip install pyside6 -i https://pypi.tuna.…

《密码系统设计》第十周预习

20231313 张景云《密码系统设计》第十周预习AI对内容的总结Headfirst C 进程间通信(IPC)核心知识总结 一、核心基础:文件描述符与数据流进程通过文件描述符(非负整数)管理数据流,描述符表固定前3项:0(标准输入…

从容器到云原生:开发者需要掌握的核心思维

在软件工程的发展浪潮中,云原生(Cloud Native) 已成为最热门的关键词之一。 但很多开发者在听到这个词时,往往会问:“云原生到底是什么?和容器、微服务、DevOps 有什么关系?我该如何入门?” 本文将从实际工程视…

从零开始学Flink:实时流处理实战 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【STM32方案开源】基于STM32的智能语音台灯框架

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …