keepalived
keepalived
是一种广泛使用的高可用性(High Availability, HA)解决方案,主要用于在 Linux 系统中实现负载均衡和故障切换。它通过 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)机制确保在主服务器故障时,备份服务器可以无缝接管,从而提高系统的可靠性和业务连续性。
主要功能
- 高可用性:实现主备模式,确保服务不中断。
- 负载均衡:支持多台服务器之间的流量分发,提升性能。
- 健康检查:监控后端服务状态,自动切换。
sudo apt install keepalived
root@plt177:/etc/keepalived# cat keepalived.conf ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_A # 节点标识,建议使用主机名 script_user root #enable_script_security } vrrp_instance VI_1 { state MASTER # 初始状态为BACKUP interface ens3 # 使用实际网卡名称 virtual_router_id 51 # 必须与节点A相同 priority 100 # 优先级低于节点A advert_int 1 # 检查间隔 nopreempt # 关键:禁止抢占 unicast_src_ip 10.18.1.33 unicast_peer { 10.18.1.34 } authentication { auth_type PASS auth_pass 1111 # 密码,必须与节点A相同 } virtual_ipaddress { #172.19.33.235/16 dev bond0 label bond0:1 #172.60.33.236/16 dev bond0 label bond0:3 #172.19.33.235/16 dev ens192 label ens192:1 #172.60.33.236/16 dev ens192 label ens192:3 10.18.1.25/24 dev ens3 label ens3:1 } notify_master "/etc/keepalived/notify.sh master" # 状态切换通知脚本 notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } root@plt177:/etc/keepalived# cat notify.sh #!/bin/bash #TYPE=$1 #NAME=$2 STATE=$1 case $STATE in "master") # 成为主节点时执行的命令 echo "$(date) - I am MASTER" >> /var/log/keepalived.log echo "$(date) - I am MASTER" exit 0 ;; "backup") # 成为备节点时执行的命令 echo "$(date) - I am BACKUP" >> /var/log/keepalived.log echo "$(date) - I am BACKUP" exit 0 ;; "fault") # 进入故障状态时执行的命令 echo "$(date) - I am FAULT" >> /var/log/keepalived.log echo "$(date) - I am FAULT" exit 0 ;; *) echo "unknown state" exit 1 ;; esac
root@k8s-34:/etc/keepalived# cat keepalived.conf ! Configuration File for keepalived global_defs { router_id LVS_DEVEL_B # 节点标识,建议使用主机名 script_user root #enable_script_security } vrrp_instance VI_1 { state BACKUP # 初始状态为BACKUP interface ens3 # 使用实际网卡名称 virtual_router_id 51 # 必须与节点A相同 priority 90 # 优先级低于节点A advert_int 1 # 检查间隔 nopreempt # 关键:禁止抢占 unicast_src_ip 10.18.1.34 unicast_peer { 10.18.1.33 } authentication { auth_type PASS auth_pass 1111 # 密码,必须与节点A相同 } virtual_ipaddress { #172.19.33.235/16 dev bond0 label bond0:1 #172.60.33.236/16 dev bond0 label bond0:3 #172.19.33.235/16 dev ens192 label ens192:1 #172.60.33.236/16 dev ens192 label ens192:3 10.18.1.25/24 dev ens3 label ens3:1 } notify_master "/etc/keepalived/notify.sh master" # 状态切换通知脚本 notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } root@k8s-34:/etc/keepalived# cat notify.sh #!/bin/bash TYPE=$1 NAME=$2 STATE=$3 case $STATE in "MASTER") # 成为主节点时执行的命令 echo "$(date) - I am MASTER" >> /var/log/keepalived.log echo "$(date) - I am MASTER" exit 0 ;; "BACKUP") # 成为备节点时执行的命令 echo "$(date) - I am BACKUP" >> /var/log/keepalived.log echo "$(date) - I am BACKUP" exit 0 ;; "FAULT") # 进入故障状态时执行的命令 echo "$(date) - I am FAULT" >> /var/log/keepalived.log echo "$(date) - I am FAULT" exit 0 ;; *) echo "unknown state" exit 1 ;; esac
posted on 2025-07-03 17:04 csuyangpeng 阅读(9) 评论(0) 收藏 举报