keepalived_LVS生产环境实施总结

1、InActConn并不代表错误连接,它是指不活跃连接(InactiveConnections),

我们将处于TCP ESTABLISH状态以外的连接都称为不活跃连接,例如处于SYN_RECV状态的连接,处于TIME_WAIT状态的连接等。

2、用四个参数来关闭arp查询响应请求:

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

3ipvsadm -L -n --stats

Prot LocalAddress:Port Conns InPkts OutPkts InBytesOutBytes

连接数 输入包 输出包 输入流量 输出流量

4、注意事项:

1)在LVS方案中,虚拟ip地址与普通网络接口大大不同,这点需要特别注意。

虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255。 为什么要这样呢?因为有若干机器要使用同一个ip地址,

用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。

2)假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地 址还是被替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp命令(piranha软件包里带的一个小工具) 格式如下:

send_arp:

send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addrtar_hw_addr

这个命令不一定非要在VS上执行,只+要在同一VLAN即可。

/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW

 

5.Virtual Server via Direct Routing(VS/DR)

VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地

提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连

在同一物理网段上。

6. LVS 经验:

1). LVS调度的最小单位是连接

2). 当apache的KeepAlive被设置成Off时,连接才能被较均衡的调度。

3). 在不指定-p参数时,LVS才真正以连接为单位按权值调度流量。

4). 在指定了-p参数时,则一个client在一定时间内,将会被调度到同一台RS。

5). 可以通过ipvsadm set tcp tcpfin udp来调整TCP和UDP的超时,让连接淘汰得快一些。

6). 在NAT模式时,RS的PORT参数才有意义。

7). DR和TUN模式时,InActConn 是没有意义的(Thus the count in the InActConn columnfor LVS-DR, LVS-Tun is

inferred rather than real.)

/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW

 

三、LVS 性能调优

Least services in System or Compile kernel.

Performace Tuning base LVS:

LVS self tuning( ipvsadm Timeout (tcp tcpfin udp)).

ipvsadm -Ln --timeout

Timeout (tcp tcpfin udp): 900 120 300

ipvsadm --set tcp tcpfin udp

Improving TCP/IP performance

net.ipv4.tcp_tw_recyle=1

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_max_syn_backlog=8192

net.ipv4.tcp_keepalive_time=1800

net.ipv4.tcp_fin_timeout=30

net.core.rmem_max=16777216

net.core.wmem_max=16777216

net.ipv4.tcp_rmem=4096 87380 16777216

net.ipv4.tcp_wmem=4096 65536 16777216

net.core.netdev_max_backlog=3000

项目实施案例及经验分享:

1、机房无法实时刷新MAC,LVS+Heartbeat方案无法正常随机切换IP?

假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里无法及时刷新MAC.关于vip这个

地址的MAC地址还是替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp /arpiing命令.

以arping命令为例.

/sbin/arping -I eth0 -c 3 -s ${vip}     ${gateway_ip}> /dev/null 2>&1

eg:

/sbin/arping -I eth0 -c 3 -s 192.168.1.6          192.168.1.1

 

【注】07年部署某大型商业网站项目时,263机房遇到此问题,最好让机房调整路由

MAC缓存表的刷新频率;同朋公司移动机房实施相关项目时发现切换IP后还是无法

访问VIP,最后利用上面的arping一个命令搞定.

【附】如果采用Piranha/keealived方案切换的时候会内置自动发送send_arp命令.

UltraMonkey方案经测试也会自动发送此命令.如用heartbeat方案,需要写一个send_arp或者arping相关的脚本当作

heartbeat一个资源切换服务的时候自动发送

相关命令脚本.

2、某台机器down掉以后,IPVS列表中权值已经置0了,为什么还轮询到这台机器上?

配置 ldirectord.conf

quiescent=no echo 1>/proc/sys/net/ipv4/vs/expire_nodest_conn

【注】经如上设置某台Realserver服务down掉以后如何从IPVS列表自动中删除恢复时如何自动添加.

 

3、为什么做压力测试的时候,LVS不能负载均衡多部分连接只到某一台机器上?

难道是LVS不能实现真正的负载均衡?

这和LVS脚本里指定-p参数有关,如果指定了一个client在一定的时间内,将会被调度到同一台RS上。所以你在从来源来做压力测试的时候大部分连接

会调度到同一台机器上,这样就出现了负载不均衡的状况。很多人经常问我这个问题,仍后我叫他们多从几个点去同时向LVS服务器做压力测试的时候就发现负载

很均衡了。

 

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS