部署负载均衡器LVS Keepalived
# 部署负载均衡器 LVS Keepalived
本文讲述负载均衡架构 LVS Keepalived 的安装部署步骤。还有其它解决方案如HAProxy Keepalived。
# 准备环境
CentOS-6.4-x86_64-minimal
# 约定
LVS_Master: 10.96.33.243
LVS_Backup: 10.96.33.244
realServer1: 10.96.33.246
realServer2: 10.96.33.249
VIP:10.96.33.230
所有服务器均须处同一网段(当然客户端除外)
所有服务器的网卡 MAC 地址不能相同(克隆虚拟机时注意此项)
realserver1、realserver2 的服务端口:80
# 安装 LVS_Master
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -d 224.0.0.0/8 -j ACCEPT -A INPUT -p vrrp -j ACCEPT
Copied!
service iptables restart
yum install -y ipvsadm
ipvsadm
chkconfig ipvsadm on
service ipvsadm start
yum install -y keepalived
chkconfig keepalived on
modprobe -l | grep ipvs
lsmod |grep ip_vs //查看模块是否加载成功
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_MASTER } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.96.33.230 } } virtual_server 10.96.33.230 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 #会话保持时间 protocol TCP real_server 10.96.33.246 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 10.96.33.249 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
Copied!
service keepalived start
# 安装 LVS_Backup
与安装 LVS_Master 的区别(共 3 项)如下:
vi /etc/keepalived/keepalived.conf
router_id LVS_BACKUP state BACKUP priority 90
Copied!
# 安装 realServer1
service iptables stop
yum install -y httpd
service httpd start
echo 10.96.33.246 > /var/www/html/index.html
vi /root/dr-rs.sh
#!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # . /etc/rc.d/init.d/functions VIP=10.96.33.230 host=`/bin/hostname` case "$1" in start) # Start LVS-DR real server on this machine. /sbin/ifconfig lo down /sbin/ifconfig lo up 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 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /sbin/route add -host $VIP dev lo:0 echo "LVS RealServer Start OK" ;; stop) # Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce /sbin/route del $VIP >/dev/null 2>&1 echo "LVS RealServer Stoped OK" ;; status) # Status of LVS-DR real server. islothere=`/sbin/ifconfig lo:0 | grep $VIP` isrothere=`netstat -rn | grep "lo:0" | grep $VIP` if [ ! "$islothere" -o ! "isrothere" ];then # Either the route or the lo:0 device # not found. echo "LVS-DR real server Stopped." else echo "LVS-DR real server Running." fi ;; *) # Invalid entry. echo "$0: Usage: $0 {start|status|stop}" exit 1 ;; esac
Copied!
chmod +x /root/dr-rs.sh
/root/dr-rs.sh start
echo "/root/dr-rs.sh start" >>/etc/rc.local
# 安装 realServer2
与“安装 realServer1”的区别:
echo 10.96.33.249 > /var/www/html/index.html
# 安装验证
确认虚拟 IP 地址已在 LVS_Master 上启动
在 LVS_Master 执行:ip addr show eth0
确认 LVS 规则已成功配置在 LVS_Master
在 LVS_Master 执行:ipvsadm -Ln
查看 LVS_Backup 的 IP
在 LVS_Backup 执行:ip addr show eth0
执行结果中没有显示虚拟 IP 是正确的,因为当前分发请求操作是由 LVS_Master 接管。
确认 LVS 规则已成功配置在 LVS_Backup
在 LVS_Backup 执行:ipvsadm -Ln
模拟 LVS_Master 宕机,分发请求操作由 LVS_Backup 接管
1> 在 LVS_Master 执行:service keepalived stop
2> 在 LVS_Backup 执行:ip addr show eth0
3> 通过 LVS_Backup 的日志可看出 LVS_Backup 开始接管 LVS_Master 的分发请求操作
客户端请求 VIP
可以浏览器或者 curl 等工具作为客户端。
LVS_Master、LVS_Backup 中任意一台宕机或者 realServer1、realServer2 任意一台宕机,均不影响业务。
# 查看日志
tail -f /var/log/messages
# 查看请求调度信息
watch -n 1 -d ipvsadm -ln
watch -n 1 -d ipvsadm -lnc
ipvsadm --list –timeout
# RTMP 负载均衡
- 当客户端断开 rtmp 连接后,LVS 服务器上 ipvsadm –ln 显示的 ActiveConn 短时间内不减少(会导致再次推送相同的发布地址失败),可以通过减少 tcp 空闲等待时间来解决,命令为 ipvsadm --set 1 2 100
- ipvsadm –set 注意事项 TCP 连接超时时间一定要小于 TCPFIN 的时间
- linux 端用 ffmpeg 向同一发布地址推送直播只能推送一次,再次推送会失败,提示信息如下:
然而在 windows 下用 ffmpeg 向同一发布地址推送直播,可以反复推送。不知原因。
# 与 HAProxy 区别
客户端必须通过 VIP 访问 LVS,不能通过 LVS 实际 IP 访问。然而,HAProxy 允许通过 LVS 实际 IP 访问。