Keepalived 配置电信/联通双线高可用集群
Keepalived配置电信/联通双线高可用集群
by Purple Grape
最近准备配置一个nginx+keepalived 负载均衡兼高可用集群投入生产,其中keepalived的配置思路如下图:
天不如人愿,在配置过程中遇到了公网IP不够用的尴尬情况,于是想破头皮,在这过程中也逐渐掌握了keepalived的奥妙和真谛,获得了新的思路图,整个公网双线高可用集群只需要电信、联通各一个IP,并且经过测试成功。如下图:
配置策略路由
echo 252 tel >>/etc/iproute2/rt_tables echo 251 cnc >>/etc/iproute2/rt_tables echo ip route flush table tel >>/etc/rc.local echo ip rule add from 14.x.x.112/28 table tel >>/etc/rc.local echo ip route flush table cnc >>/etc/rc.local echo ip rule add from 122.x.x.152/29 table cnc >>/etc/rc.local
直接上配置文件(主服务器)
global_defs{ notification_email{ purplegrape4@gmail.com } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id web01 } vrrp_instanceVI_1 { state BACKUP interface em1 virtual_router_id 51 priority 120 advert_int 1 nopreempt authentication { auth_type PASS auth_pass 654321 } virtual_ipaddress{ 14.x.x.117/28 dev em2 label em2:1 122.x.x.157/29 dev em2 label em2:2 } virtual_routes{ default via 14.x.x.113 dev em2 src 14.x.x.117 table tel default via 122.x.x.153 dev em2 src 122.x.x.157 table cnc } } |
配置文件慎用tab制表符,会引起莫名奇妙的问题!
加亮的地方都是需要注意的地方,特别是静态路由!
从服务器需要修改的地方有:
1、修改email地址和route_id中的名称
2、优先级更低一些,比如70
3、去掉nopeempt,这样主服务器恢复后不会抢占VIP
(注:本文用的是两个优先级不同BACKUP,这样才支持nopeempt)
配置的要点在于理解一下几点:
1、vrrp协议跟VIP无关;
2、vrrp心跳网卡与VIP所在网卡可以不同;
3、私网卡不需配网关,公网卡不需配置公网地址,但仍然需要ONBOOT=yes
必要的内核优化
echo“net.ipv4.ip_nonlocal_bind= 1” >>/etc/sysctl.conf sysctl -q -p |
该选项允许程序监听在一个非本地IP上,而不报错。
很多同学最后关头防火墙调不通,于是干脆关闭了iptables服务,这是不可取的。
keepalived的健康检查走的是D段IP地址,协议是vrrp
/sbin/iptables-A INPUT -d 224.0.0.0/8 -j ACCEPT /sbin/iptables-A INPUT -p 112 -j ACCEPT |
update 2014-05-20
为了充分利用备机,可以在keepalived内部做2个实例,互相冗余,让电信走一台机器,联通走另一台。
update 20170112
keepalived 存在脑裂风险,即BACKUP 不释放VIP,可使用arping检测(arping是ping不通本地mac地址的),集群节点运行在BACKUP 状态的情况下,
如果本地ping不通VIP,则证明VIP在本地,需要手动移除VIP
如果本地ping通VIP,则VIP已顺利漂移。
转载于:https://blog.51cto.com/purplegrape/1259940