LVS 负载均衡安装部署

首先打开两台机器的ip_forward转发功能
[root@LVS_Master ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
需要安装以下软件包
[root@LVS_Master src]# yum install -y libnl* popt*
安装ipvsadm
[root@LVS_Master src]# yum install -y ipvsadm

两台机器都编写LVS启动脚本/etc/init.d/realserver
[root@MySQL1 ~]# vim /etc/init.d/realserver
#!/bin/sh
VIP=10.22.86.50
. /etc/rc.d/init.d/functions
 
case "$1" in
# 禁用本地的ARP请求、绑定本地回环地址
start)
    /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/sysctl -p >/dev/null 2>&1
    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up #在回环地址上绑定VIP,设定掩码,与Direct Server(自身)上的IP保持通信
    /sbin/route add -host $VIP dev lo:0
    echo "LVS-DR real server starts successfully.\n"
    ;;
stop)
    /sbin/ifconfig lo:0 down
    /sbin/route del $VIP >/dev/null 2>&1
    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
echo "LVS-DR real server stopped.\n"
    ;;
status)
    isLoOn=`/sbin/ifconfig lo:0 | grep "$VIP"`
    isRoOn=`/bin/netstat -rn | grep "$VIP"`
    if [ "$isLoON" == "" -a "$isRoOn" == "" ]; then
        echo "LVS-DR real server has run yet."
    else
        echo "LVS-DR real server is running."
    fi
    exit 3
    ;;
*)
    echo "Usage: $0 {start|stop|status}"
    exit 1
esac
exit 0
将lvs脚本加入开机自启动
[root@MySQL1 ~]# chmod +x /etc/init.d/realserver
[root@MySQL1 ~]# echo "/etc/init.d/realserver start" >> /etc/rc.d/rc.local

[root@MySQL1 ~]# /etc/init.d/realserver start

查看MySQL1 Real Server服务器,发现VIP已经成功绑定到本地回环口lo上了
[root@localhost ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.22.86.40  netmask 255.255.255.0  broadcast 10.22.86.255
        inet6 fe80::20c:29ff:fe17:85d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:17:08:5d  txqueuelen 1000  (Ethernet)
        RX packets 44065  bytes 52703413 (50.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29290  bytes 2542398 (2.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 196  bytes 17232 (16.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 196  bytes 17232 (16.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 10.22.86.50  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

配置iptables防火墙
1)后端两台机器MySQL1 Real Server和MySQL2 Real Server要在iptables里开放3306端口
[root@MySQL1 ~]# vim /etc/sysconfig/iptables
......
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
 
[root@MySQL1 ~]# /etc/init.d/iptables restart
 
2)LVS_Master和LVS_Backup两台机器要在iptables开放VRRP组播地址的相关规则。
   注意:这个一定要设置!!!否则会出现故障时的VIP资源漂移错乱问题!
 
[root@LVS_Master ~]# vim /etc/sysconfig/iptables       //两台LVS机器都要设置
.......
-A INPUT -s 10.22.86.0/24 -d 224.0.0.18 -j ACCEPT        //允许组播地址通信
-A INPUT -s 10.22.86.0/24 -p vrrp -j ACCEPT              //允许VRRP(虚拟路由器冗余协)通信
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 
[root@LVS_Master ~]# /etc/init.d/iptables restart
接着配置LVS+Keepalived配置
1)LVS_Master上的操作
[root@LVS_Master ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id ha1
}

vrrp_instance VI_1 {
    state MASTER            
    interface ens32         
    virtual_router_id 66    
    priority 100            
    advert_int 1            
    authentication {
        auth_type PASS 
        auth_pass 1111
    }
    virtual_ipaddress {
        10.22.86.50/24      
    }
}

virtual_server 10.22.86.50 80 {
    delay_loop 6               #服务轮询的时间间隔
    lb_algo wrr                #加权轮询调度,LVS调度算法 rr|wrr|lc|wlc|lblc|sh|sh
    lb_kind DR                 #LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段
    #nat_mask 255.255.255.0
    persistence_timeout 50     #会话保持时间
    protocol TCP              #健康检查协议
 
    ## Real Server设置,80 为nginx代理端口
    real_server 10.22.86.200 80 {
        weight 3  ##权重
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}

virtual_server 10.22.86.50 3306 {
    delay_loop 6               #服务轮询的时间间隔
    lb_algo wrr                #加权轮询调度,LVS调度算法 rr|wrr|lc|wlc|lblc|sh|sh
    lb_kind DR                 #LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段
    #nat_mask 255.255.255.0
    persistence_timeout 50     #会话保持时间
    protocol TCP              #健康检查协议

    ## Real Server设置,3306就是MySQL连接端口
    real_server 10.22.86.200 3306 {
        weight 3  ##权重
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
}
/usr/local/keepalived/sbin/keepalived -D
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.22.86.50:80 wrr persistent 50
TCP  10.22.86.50:3306 wrr persistent 50
posted @   Rocky_940120  阅读(290)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示