# 部署负载均衡器 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 {#安装-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
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
}
}
}
service keepalived start
# 安装 LVS_Backup {#安装-lvs-backup}
与安装 LVS_Master 的区别(共 3 项)如下:
vi /etc/keepalived/keepalived.conf
router_id LVS_BACKUP
state BACKUP
priority 90
# 安装 realServer1 {#安装-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
chmod +x /root/dr-rs.sh
/root/dr-rs.sh start
echo "/root/dr-rs.sh start" >>/etc/rc.local
# 安装 realServer2 {#安装-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-负载均衡}
- 当客户端断开 rtmp 连接后,LVS 服务器上 ipvsadm --ln 显示的 ActiveConn 短时间内不减少(会导致再次推送相同的发布地址失败),可以通过减少 tcp 空闲等待时间来解决,命令为 ipvsadm --set 1 2 100
- ipvsadm --set 注意事项 TCP 连接超时时间一定要小于 TCPFIN 的时间
- linux 端用 ffmpeg 向同一发布地址推送直播只能推送一次,再次推送会失败,提示信息如下:
然而在 windows 下用 ffmpeg 向同一发布地址推送直播,可以反复推送。不知原因。
# 与 HAProxy 区别 {#与-haproxy-区别}
客户端必须通过 VIP 访问 LVS,不能通过 LVS 实际 IP 访问。然而,HAProxy 允许通过 LVS 实际 IP 访问。