LVS集群介绍
三种运作方式
- VS-NAT (Virtual Server via NAT)
- VS-DR(Virtual Server via Direct Routing)
- VS-TUN (Virtual Server via IP Tunneling)
LVS运作方式的比较
/ | VS-NAT | VS-DR | VS-TUN |
外送连线的处理方式 | 以虚拟服务器为所有对外和对内连线的通讯闸道 | 真实服务器使用网络原有通讯闸直接回应使用者 | 真实服务器使用网络原有通讯闸直接回应使用者 |
节点间的连线,要求 | 内部网路,可不同网段.真实机网关需要指向调度机,所有输入输出进过调度机 | 单一网段的区域网络,所有响应真实机自行处理,返回用户 | 任何区域网络和Internet网络,所有响应真实机自行处理,返回用户 |
真实服务器理论上的最大数量 | 10-20 | >100 | >100 |
群集的最大效率 | 低 | 最佳 | 佳 |
对于真实服务器的要求 | 不拘 | 必须支援封包过滤或是能够忽略ARP封包 | 必须支援IP Tunneling技术 |
十种调度算法介绍
- 轮叫调度(Round Robin)(简称rr)
- 加权轮叫(Weighted Round Robin)(简称wrr)
- 最少链接(Least Connections)(LC)
- 加权最少链接(Weighted Least Connections)(WLC)
- 基于局部性的最少链接(Locality-Based Least Connections)(LBLC)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)
- 目标地址散列(Destination Hashing)(DH)
- 源地址散列(Source Hashing)(SH)
- 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)
- 最少队列调度(Never Queue Scheduling NQ)(NQ)
LVS解决方案
(环境:两台调度机,N台真实机)
一
1、heartbeat高可用
2、ipvsadm负载均衡
3、heartbeat-ldirectord真实服务器健康检测
二
1、Keepalived高可用(VRRP Stack功能,vrrp子进程)与真实服务器健康检测(Checkers功能,checkers子进程)
2、ipvsadm负载均衡
运维
watch ipvsadm -L -n //动态监控连接情况
ipvsadm -C
ipvsadm -L -n --stats
ipvsadm -L -n --rate
ipvsadm -L -n -c
参数备忘
-L|-l --list 显示内核虚拟服务器表
-Z --zero 虚拟服务表计数器清零(清空当
前的连接数量等)
-C --clear 清除内核虚拟服务器表中的所有
记录。
--stats 显示统计信息
--rate 显示速率信息
-c --connection 显示LVS 目前的连接
调度机tcp连接优化
1、增加以下内容到/etc/sysctl.conf末尾
kernel.core_uses_pid = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.ip_local_port_range = 1024 65536
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.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 5
fs.file-max = 655360
net.core.somaxconn = 4096
执行:
sysctl -p
使之生效
2、加大可允许打开的文件句柄数
echo "* soft nofile 65536" >>/etc/security/limits.conf
echo "* hard nofile 65536" >>/etc/security/limits.conf
==========================20170608=============
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_keepalive_time=1800
=======================================
缺省的FIN_WAIT超时是120秒。如果你的服务都是非常短的连接,可以考虑减少FIN_WAIT的超时时间,例如60秒或者30秒。
# ipvsadm -Lcn |awk '{print $3}'|sort |uniq -c |sort -rn
548 FIN_WAIT
456 NONE
80 ESTABLISHED
9 SYN_RECV
2 CLOSE
1 state
1 entries
TCP状态为NONE的是持久性模板,它是记录来自同一IP地址的访问调度到同一服务器。
TCP状态为CLOSE的是已关闭连接。
# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
默认FIN_WAIT是120秒
修改成60
# ipvsadm --set 900 60 300
# ipvsadm -Lcn |awk '{print $3}'|sort |uniq -c |sort -rn
327 NONE
279 FIN_WAIT
62 ESTABLISHED
4 SYN_RECV
1 state
1 entries
如果是用长连接的话:
lvs的设置:
# ipvsadm --list --timeout
Timeout (tcp tcpfin udp): 7200 5 60
表明tcp session的timeout时间是7200秒。
设置timeout:
ipvsadm --set 7200 5 60
这个值如果设置太小,client将会收到 connection reset by peer此类的错误提示。
刷新MAC地址:
/sbin/arping -f -q -c 5 -w 5 -I eth0 -s $WEB_VIP -U $GW
keealived方案切换的时候会内置自动发送send_arp命令
清空ARP表
arp -n|awk '/^[1-9]/{system("arp -d "$1)}'
清空某网卡的ARP表
ip neigh flush dev eth0