51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

部署负载均衡器LVS Keepalived

# 部署负载均衡器 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

20200624120600.png
service iptables restart
yum install -y ipvsadm
20200624120624.png
ipvsadm
chkconfig ipvsadm on
service ipvsadm start
yum install -y keepalived
20200624120727.png
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

# 安装验证 {#安装验证}

  1. 确认虚拟 IP 地址已在 LVS_Master 上启动
    在 LVS_Master 执行:ip addr show eth0
    20200624120846.png

  2. 确认 LVS 规则已成功配置在 LVS_Master
    在 LVS_Master 执行:ipvsadm -Ln
    20200624120950.png

  3. 查看 LVS_Backup 的 IP
    在 LVS_Backup 执行:ip addr show eth0
    20200624121049.png 执行结果中没有显示虚拟 IP 是正确的,因为当前分发请求操作是由 LVS_Master 接管。

  4. 确认 LVS 规则已成功配置在 LVS_Backup
    在 LVS_Backup 执行:ipvsadm -Ln
    20200624121119.png

  5. 模拟 LVS_Master 宕机,分发请求操作由 LVS_Backup 接管
    1> 在 LVS_Master 执行:service keepalived stop
    20200624121134.png 2> 在 LVS_Backup 执行:ip addr show eth0
    20200624121204.png 3> 通过 LVS_Backup 的日志可看出 LVS_Backup 开始接管 LVS_Master 的分发请求操作
    20200624121233.png

  6. 客户端请求 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 向同一发布地址推送直播只能推送一次,再次推送会失败,提示信息如下: 20200624121424.png
    然而在 windows 下用 ffmpeg 向同一发布地址推送直播,可以反复推送。不知原因。

# 与 HAProxy 区别 {#与-haproxy-区别}

客户端必须通过 VIP 访问 LVS,不能通过 LVS 实际 IP 访问。然而,HAProxy 允许通过 LVS 实际 IP 访问。

赞(4)
未经允许不得转载:工具盒子 » 部署负载均衡器LVS Keepalived