最近准备配置一个nginx+keepalived 负载均衡兼高可用集群投入生产,其中keepalived的配置思路如下图:

天不如人愿,在配置过程中遇到了公网IP不够用的尴尬情况,于是想破头皮,在这过程中也逐渐掌握了keepalived的奥妙和真谛,获得了新的思路图,整个公网双线高可用集群只需要电信、联通各一个IP并且经过测试成功。如下图:

配置策略路由

1
2
3
4
5
6
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{

 root@localhost

 purplegrape4@gmail.com

 }

 notification_email_from keepalived@web01

 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/2dev 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)

配置的要点在于理解一下几点:

1vrrp协议跟VIP无关;

2vrrp健康检查与具体网卡无关;

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个实例,互相冗余,让电信走一台机器,联通走另一台。

本文出自 “” 博客,请务必保留此出处