KEEPALIVED 双机自动切换部署备忘
1.配置文件的名字不要型错了。开始我将配置文件写成keeplive.conf,运行后也不报错,但无法看到VIP。日志里也看不到任何有价值信息。直到后来反复检查才发现可能配置文件名有问题,修正为keepalived.conf终于能使用“ip a”命令看到VIP了。
2.使用的Keepalived是用来给Nginx反向代理(使用一个公网IP来提供多个域名的多个网站服务器的代理)做高可用的,两者安装在相同的虚机上。起先照着一些参考资料在配置文件配置了:

virtual_server 172.24.1.230 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 172.24.1.231 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 172.24.1.232 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
测试时发现开始可以通过域名来正常访问,后来测试停止Nginx后就再也无法访问了。
但通过输入Nginx的真实IP地址访问是可以的。说明其服务没有问题。而这时在keepalived的日志也看不到任何有用的信息。后经反复分析,可能是这段配置的问题,主备服务均删除重启服务后访问一切正常。
3.测试时停止Nginx服务,发现不会自动重启,同时VIP也不会自动迁移到备机上。开始以为是检查脚本的问题,执行脚本却没有问题。后来想到在脚本里加日志看是否运行了脚本发现应该是没对脚本文件添加可执行权限,所以执行:chmod +x check-nginx.sh 后发现日志生成,问题解决,停止Nginx服务将自动重启。
4.主备切换,切换完成后,主机起来后,设置不再获取主机权,以减少客户端终端。(两机都设为:state BACKUP,通过设置优先级高来默认主机,同时备机不要使用:nopreempt)
5.在两台Web Server上执行realserver.sh脚本,为lo:0绑定VIP地址10.0.1.2、抑制ARP广播。

#!/bin/bash #description: Config realserver VIP=10.0.1.2 /etc/rc.d/init.d/functions case "$1" in start) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) /sbin/ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
7.明天继续研究问题2中关于LVS的设置,看是否能做负载均衡,否则没问题时始终只用一台机,有点浪费。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述