keepalived
1、安装
1.1 yum
1、做ssh免密
2、基于hosts做解析,使用域名进行通信,或者使用内网dns解析
yum -y install keepalived
rpm -ql keepalived
主程序文件:/usr/sbin/keepalived
主配置文件:/etc/keepalived/keepalived.conf
配置文件示例:/usr/share/doc/keepalived/
Unit File:/lib/systemd/system/keepalived.service
Unit File的环境配置文件:
/etc/sysconfig/keepalived CentOS
/etc/default/keepalived Ubuntu
1.2 编译
wget https://keepalived.org/software/keepalived-2.2.8.tar.gz
./configure --prefix=/apps/keepalived --disable-fwmark
make && make install
2 、配置
/etc/keepalived/keepalived.conf
2.1 配置文件说明
1、global_defs
定义邮件配置,route_id,vrrp配置,多播地址等
2、vrrp_instance VI_1
定义每个vrrp虚拟路由器
3、virtual_server
定义lvs的vs和rs
man keepalived.conf
2.2 配置详细说明
2.2.1 全局配置
global_defs {
notification_email {
gquanheng@163.com
}
notification_email_from 982561159@qq.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id keepalived1
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_mcast_group4 224.0.0.18
vrrp_iptables
2.2.2 虚拟路由
vrrp_instance str {
state MASTER|BACKUP
interface IFACE_NAME
virtual_router_id VRID
priority 100
advert_int 1
authentication {
auth_type AH|PASS
auth_pass <PASSWORD>
}
virtual_ipaddress {
192.168.200.102/24 dev eth2 label eth2:1
}
}
2.2.3 日志启用
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"
vim /etc/rsyslog.conf
local6.* /var/log/keepalived.log
2.2.4 开启子配置文件
实现可插拔式的配置管理,方便使用
mkdir /etc/keepalived/conf.d
echo >> include /etc/keepalived/conf.d/*.conf /etc/keepalived/keepalived.conf
2.2.5 ipvs设置
2.2.5.1 vs设置
virtual_server IP port{
delay_loop <INT>
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT|DR|TUN
persistence_timeout <INT>
protocol TCP|UDP|SCTP
sorry_server <IPADDR> <PORT>
real_server{
weight <INT>
notify_up <STRING>|<QUOTED-STRING>
notify_down <STRING>|<QUOTED-STRING>
HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { ... }
HTTP_GET|SSL_GET{
url {
path <URL_PATH>
status_code <INT>
}
connect_timeout <INTEGER>
nb_get_retry <INT>
delay_before_retry <INT>
connect_ip <IP ADDRESS>
connect_port <PORT>
bindto <IP ADDRESS>
bind_port <PORT>
}
TCP_CHECK {
connect_ip <IP ADDRESS>
connect_port <PORT>
bindto <IP ADDRESS>
bind_port <PORT>
connect_timeout <INTEGER>
}
}
real_server{
}
}
virtual_server_group VSG_1 {
10.0.0.1 8080
10.0.0.2 80
192.168.200.1 1358
192.168.200.3-10 80
fwmark 1
fwmark 2
}
virtual_server group VSG_1 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.200.1 1358 {
weight 1
HTTP_GET {
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.200.2 1358 {
weight 1
HTTP_GET {
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2.2.6 VRRP Script 配置
通过自定义脚本,来监控指定应用的状态,一旦发生情况,自动将vip进行切换
2.2.6.1 定义脚本
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING>
interval <INTEGER>
timeout <INTEGER>
weight <INTEGER:-254..254>
fall <INTEGER>
rise <INTEGER>
user USERNAME [GROUPNAME]
init_fail
}
2.2.6.2 调用脚本
vrrp_instance{
track_script {
<SCRIPT_NAME>
}
}
3、应用
3.1 实现主从架构
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 keepalived1
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance NGINX {
state MASTER
interface ens33
virtual_router_id 60
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.10.3 dev ens33 label ens33:1
}
}
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 keepalived2
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance NGINX {
state BACKUP
interface ens33
virtual_router_id 60
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.10.3 dev ens33 label ens33:1
}
}
ip a
主节点服务停掉,从节点执行ip a, 观察到节点ip 可以实现漂移
恢复服务后重新ip a查看可以看到vip又回到了主节点
3.2 通知脚本配置
3.2.1 脚本用户配置
global_defs {
script_user <USER>
}
3.2.2 脚本类型
配置zai vrrp块
3.2.2.1 节点成为主节点时触发的脚本
notify_master /etc/keepalived/notify.sh master
3.2.2.2 节点转为备节点时触发的脚本
notify_backup /etc/keepalived/notify.sh backup
3.2.2.3 节点转为“失败”状态时触发的脚本
notify_fault /etc/keepalived/notify.sh fault
3.2.2.4 通用脚本
notify /etc/keepalived/notify.sh
3.2.2.5 停止VRRP时触发的脚本
notify_stop /etc/keepalived/notify.sh stop
3.2.2.6 脚本参考
#!/bin/bash
contact='gquanheng@163.com'
notify() {
mailsubject="$(hostname) to be $1, vip floating"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
stop)
notify stop
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
3.3 双主架构
由于主从架构会造成其中一个节点资源闲置,配置两个以上vip实现双主架构,其它们互为主从
vrrp_instance NGINX {
state BACKUP
interface ens33
virtual_router_id 60
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.10.3 dev ens33 label ens33:1
}
}
vrrp_instance Kubernetes {
state MASTER
interface ens33
virtual_router_id 61
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.10.4 dev ens33 label ens33:2
}
}
vrrp_instance NGINX {
state MASTER
interface ens33
virtual_router_id 60
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.10.3 dev ens33 label ens33:1
}
}
vrrp_instance Kubernetes {
state BACKUP
interface ens33
virtual_router_id 61
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.10.4 dev ens33 label ens33:2
}
}
4、优化
4.1 抢占模式策略
4.1.1 关闭抢占模式
由于默认启用抢占模式,当主节点故障恢复后会立马抢占从节点的vip可能造成波动
vim /etc/keepalived/keepalived.conf
state BACKUP
nopreempt
4.1.2 抢占延迟
vim /etc/keepalived/keepalived.conf
state BACKUP
priority 100
preempt_delay 60
4.2 广播配置
keepalived使用广播进行互相通过消息,可以替换为单播,减少网络拥塞
unicast_src_ip $ip
unicast_peer {
$ip
......
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix