Zyuuuuuaaa 2023-11-19 16:45 采纳率: 0%
浏览 8

LVS+Keepalived+Nginx负载均衡失效,分发节点失败,

理想效果
LVS+Keepalived +Nginx 实现高可用;

部署情况
Keepalived实现IP漂移无异常;LVS部署之后负载均衡出现问题,往从节点分发时候响应失败。

机器
CentOS7 2台
192.168.0.111(主) Nginx页面:This IS TEST 01!
192.168.0.112(备) Nginx页面:This IS TEST 02!
VIP:192.168.0.120

部署步骤
主从电脑执行以下通用命令

systemctl stop firewalld.service          #停止firewall
systemctl disable firewalld.service        #禁止firewall开机启动
>>>开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

sudo yum install ipvsadm   # 安装ipvs
ipvsadm -L --timeout  #查看超时时间
ipvsadm --set 1 2 1  #修改超时时间
sudo ipvsadm  #启动ipvs


怀疑问题是出在了脚本上,keepalived启动前执行了个脚本,如下:

#!/bin/bash
# description: Config realserver

VIP=192.168.0.120

case "$1" in
start)
       ip addr add $VIP/32 dev lo:0
       ip route add $VIP/32 dev lo:0
       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
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ip addr del $VIP/32 dev lo:0
       ip route del $VIP/32 dev lo:0
       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
       echo "RealServer Stopped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac

exit 0

启动脚本

sudu ./rs.sh start

启动keepalived和ipvsadm如下:
主机的Keepalived和LVS

img


img

从机的Keepalived和LVS

img


img

ip 情况
主机上ip a

img

从机上ip a

img

测试情况!

第一次访问直接卡住

img

第二次访问转发到了主机上也就是192.168.0.110上

img

不清楚是问题出在了哪里。之前只测试lvs+nginx时候是可以自动分发负载的,加了keepalived之后不是很理解问题出在了哪里,有明白的请指教

主节点Keepalived配置如下

! Configuration File for keepalived


global_defs {
   router_id v1
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}


vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 88
    mcast_src_ip 192.168.0.111
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
  unicast_src_ip  192.168.0.111
    unicast_peer {
             192.168.0.112
    }

    track_script {
        chk_nginx
    }


    virtual_ipaddress {
        192.168.0.120
    }
}



virtual_server 192.168.0.120 80 {     #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
    delay_loop 6                        #设置运行情况检查时间,单位是秒
    lb_algo rr                          #设置负载调度算法,这里设置为rr,即轮询算法
    lb_kind DR                          #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
    nat_mask 255.255.255.0
    persistence_timeout 0               #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                                        #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                                        #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
                                        #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
    protocol TCP                        #指定转发协议类型,有TCP和UDP两种
    real_server 192.168.0.111 80 {     #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
        weight 1                        #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
                                        #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
        TCP_CHECK {                     #realserver的状态检测设置部分,单位是秒
            connect_timeout 3           #表示3秒无响应超时
            nb_get_retry 3              #表示重试次数
            delay_before_retry 3        #表示重试间隔
            connect_port 80
        }
    }
    real_server 192.168.0.112 80 {
        weight 1

        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
    
    

补充:lvs+nginx 步骤如下,其实就几个命令后进行的测试,当时未使用VIP,所以该过程测试无异常

 ipvsadm -A -t 192.168.0.111:80 -s rr
 
 ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.111 -m
 ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.112 -m
 
 curl 192.168.0.120
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-19 18:07
    关注

    【以下回答由 GPT 生成】

    由于您提供的信息比较有限,无法明确问题出在哪里。但是我可以给出一些可能的解决方案来排查问题。

    1. 检查keepalived运行状态:确保keepalived服务正常运行,没有出现任何错误。您可以使用以下命令来检查keepalived的运行状态:systemctl status keepalived.service

    2. 检查Nginx配置文件:请确保Nginx的配置文件正确配置了LVS后端的服务器地址。您可以通过以下命令查看Nginx配置文件:cat /etc/nginx/nginx.conf,并验证配置文件中的upstream设置是否正确。

    3. 检查LVS配置:请确保您正确配置了LVS,包括服务器地址和端口等。您可以通过以下命令检查LVS配置:ipvsadm -L。确保配置了正确的服务器地址和端口。

    4. 检查防火墙规则和端口:请确保服务器的防火墙开放了需要的端口,比如80端口。您可以使用命令firewall-cmd --list-all来查看当前防火墙规则,并使用firewall-cmd --add-port=80/tcp --permanent来添加80端口的规则。

    5. 检查网络连接:请确保服务器之间可以互相通信,并且网络连接正常。您可以使用ping命令来测试服务器之间的连通性,比如ping 192.168.0.112

    如果以上解决方案都没有解决您的问题,建议您提供更多的详细信息,包括LVS配置文件、Nginx配置文件和keepalived配置文件,以便更好地排查和解决问题。如果您无法提供更多信息或者需要更进一步的技术支持,请咨询相关的网络专家或工程师。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月19日

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端