LVS 搭建集群的一些介绍(方案,优化)


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技术

十种调度算法介绍 1. 轮叫调度(Round Robin)(简称rr) 2. 加权轮叫(Weighted Round Robin)(简称wrr) 3. 最少链接(Least Connections)(LC) 4. 加权最少链接(Weighted Least Connections)(WLC) 5. 基于局部性的最少链接(Locality-Based Least Connections)(LBLC) 6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR) 7. 目标地址散列(Destination Hashing)(DH) 8. 源地址散列(Source Hashing)(SH) 9. 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED) 10. 最少队列调度(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