美文网首页Linux系统运维
【实战演练】Linux操作系统15-LVS实现Nginx服务器负

【实战演练】Linux操作系统15-LVS实现Nginx服务器负

作者: 工程师Waiting | 来源:发表于2020-05-24 18:46 被阅读0次

    #本文欢迎转载,转载请注明出处和作者。

    理论部分,在之前的文章已经说明过了,详见《【理论研究】业务系统高可用及负载均衡》。

    上一篇已经讲述通过对2台Nginx服务器安装Keepalived软件+Nginx服务检测脚本,做高可用HA的配置。

    本篇介绍通过增加LVS服务器,对2台Nginx服务器做负载均衡。

    一般的系统,如果在私有云,企业会购买硬件负载均衡器(如F5、Radware、Array等),或者用服务器+LVS,再最外面弄一层网络负载均衡,这个通常是所有业务系统/服务共用的,属于IT基础实施。而每个业务系统/服务,会自己用服务器+Nginx,做自己的应用负载均衡/反向代理,这个通常是业务系统/服务自己使用的,不同业务系统自行搭建不同的Nginx服务器。

    1、LVS

    LVS的控制端,叫director,负责VIP以及分发流量。

    后端被分发的服务器,叫做RealServer。有时候为了节省,机器可以既做Director也做Realserver。

    实验中,我们增加1台LVS服务器(10.1.30.40)1做director,原来的2台Nginx服务器30.26、30.27做Realserver。

    1.1检查LVS模块

    用lvs分发到2台nginx服务器(此处nginx仅当作web服务器使用)

    Centos6.5自带lvs模块,用如下命令可以检查

    modprobe -l | grep ipvs
    

    1.2安装依赖

    yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt*
    

    1.3安装lvs管理工具

    管理工具叫ipvsadm,ipvsadm-1.26.tar.gz拷贝至/usr/local/下

    cd /usr/local
    tar -zxvf ipvsadm-1.26.tar.gz
    cd ipvsadm-1.26
    make & make install 
    

    2、Nginx服务测试预设置

    由于实现负载均衡后,直接访问VIP,发现业务能够正常访问,并且能够负载均衡到apache01、02,但是由于Nginx01、02设置了负载均衡到Apache,所以访问VIP屏蔽了Nginx01、02,无法看出到底VIP有没有负载到Nginx01、02,因此需要提前做些修改,方便测试。

    2.1 临时取消Nginx负载均衡Apahce设置

    cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
    vi  /usr/local/nginx/conf/nginx.conf
    

    删除

    upstream site{
            server 10.1.30.24;
            server 10.1.30.25;
        }
    
    proxy_pass http://site;
    #在location / {}里面
    

    修改会话保持时间

    keepalive_timeout  0;
    #原有#去掉,否则连续访问VIP,会65秒内连续分发到同一台Nginx服务器
    #keepalive_timeout  65;
    #加上#注释掉
    

    详见之前《【实战演练】Linux操作系统13-Nginx实现WEB服务器负载均衡》的4.1-5)

    重启nginx服务

    service nginx restart
    

    此时单独访问Nginx01、02会显示Nginx的默认页面。

    2.2 修改Nginx默认页面

    修改Nginx01、02的默认欢迎页面,默认主页是/usr/local/nginx/html/index.html

    mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
    vi /usr/local/nginx/html/index.html
    #Nginx01设置为
    This is Nginx01 10.1.30.26
    #Nginx02设置为
    This is Nginx02 10.1.30.27
    

    单独访问Nginx01、02的IP进行测试

    2.3 关闭ARP解析

    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 
    #使用修改生效
    

    3、LVS Director配置

    3.1 脚本自动配置

    vi /etc/init.d/lvsdr
    

    内容如下

    #!/bin/sh
    # 定义虚拟ip
    VIP=10.1.30.31 #虚拟 ip根据需求修改
    # 定义realserver,并已空格分开,根据需求修改
    RIPS="10.1.30.26 10.1.30.27"
    # 定义提供服务的端口
    SERVICE=80
    # 调用init.d脚本的标准库
    . /etc/rc.d/init.d/functions
    case $1 in
            start)
            echo "Start LVS of DR Mode"
            # 开启ip转发
            echo "1" > /proc/sys/net/ipv4/ip_forward
            # 绑定虚拟ip
            ifconfig eth1:0 $VIP broadcast $VIP netmask 255.255.255.255 up
            route add -host $VIP dev eth1:0
            # 清除lvs规则
            ipvsadm -C
            # 添加一条虚拟服务器记录
        # -p指定一定的时间内将相同的客户端分配到同一台后端服务器
        # 用于解决session的问题,测试时或有别的解决方案时建议去掉
            ipvsadm -A -t $VIP:$SERVICE -s rr
            # 添加真实服务器记录
            for RIP in $RIPS
        do
            echo $RIP:$SERVICE;
                    ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
            done
            # 设置tcp tcpfin  udp的超时连接值
            ipvsadm --set 30 120 300
            ipvsadm
            ;;
    
            stop)
            echo "Stop LVS DR"
            ifconfig eth1:0 down
            ipvsadm -C
            ;;
            *)
            echo "Usage:$0 {start ¦ stop}"
            exit 1
    esac
    

    保存后增加执行权限

    chmod 777 /etc/init.d/lvsdr
    

    启动LVS服务

    service lvsdr start
    

    3.2 手工配置(如果已经做了脚本自动配置,就不需要再做手工配置了)

    3.2.1 绑定VIP

    绑定虚拟IP(注意网卡按照机器实际网卡更改,如eth0,则改eth1为eth0)

    ifconfig eth1:0 10.1.30.31 broadcast 10.1.30.31 netmask 255.255.255.255 up
    

    3.2.2添加路由规则

    route add -host 10.1.30.31 dev eth1:0
    

    3.2.3启动包转发功能

    echo "1" >/proc/sys/net/ipv4/ip_forward
    

    3.2.4清除原有转发规则

    ipvsadm --clear
    

    3.2.5添加虚拟IP规则

    ipvsadm -A -t 10.1.30.31:80 -s rr
    

    -s rr表示采用轮询策略。

    :80表示负载转发的端口是80

    3.2.6在虚拟IP中添加服务规则

    ipvsadm -a -t 10.1.30.31:80 -r 10.1.30.26:80 -g
    ipvsadm -a -t 10.1.30.31:80 -r 10.1.30.27:80 -g 
    

    在新加虚拟IP记录中添加两条新的Real Server记录,-g表示指定LVS 的工作模式为直接路由模式。

    lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口的一致,这里都为80。

    3.2.7重启LVS

    Ipvsadm

    4、Realserver配置(2台Nginx服务器)

    4.1 脚本自动配置

    vi /etc/init.d/lvsdr
    

    内容如下:

    #!/bin/sh
    VIP=10.1.30.31 #虚拟ip,根据需求修改
    . /etc/rc.d/init.d/functions
    case $1 in
            start)
            echo "lo:0 port starting"
            # 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
            ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
            # 限制arp请求
            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
            ;;
            stop)
            echo "lo:0 port closing"
            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
            ;;
            *)
            echo "Usage: $0 {start ¦ stop}"
            exit 1
    esac
    

    增加执行权限

    chmod 777 /etc/init.d/lvsdr
    

    然后可以直接使用service lvsdr start/stop进行启停。

    service lvsdr start
    

    4.2 手工配置(如果已经做了脚本自动配置,就不需要再做手工配置了)

    4.2.1环回接口绑定VIP

    ifconfig lo:0 10.1.30.31 broadcast 10.1.30.31 netmask 255.255.255.255 up
    /sbin/route add -host 10.1.30.31 dev lo:0
    

    4.2.2关闭ARP解析

    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 
    

    使用修改生效

    5、测试

    通过VIP(10.1.30.31)访问业务,并且不断刷新,发现能够早Ngix01与02之间负载均衡。

    相关文章

      网友评论

        本文标题:【实战演练】Linux操作系统15-LVS实现Nginx服务器负

        本文链接:https://www.haomeiwen.com/subject/folnohtx.html