zoukankan      html  css  js  c++  java
  • 高并发系列【LVS+keepAlived实现双机主备】

    准备四台服务器,系统centos7。
    一、配置虚拟ip
    1.在lvs和RS1和RS2上分别执行

    systemctl stop NetworkManager
    systemctl disable NetworkManager

    2.在lvs上

    cd /etc/sysconfig/network-scripts/
    
    ll
    
    cp ifcfg-ens33 ifcfg-ens33:1
    
    vi ifcfg-ens33:1
    #只保留
    BOOTPROTO=static
    DEVICE=ens33:1
    ONBOOT=yes
    IPADDR="192.168.26.101"
    NETMASK=255.255.255.0
    
    service network restart

    二、安装ipvsadm

    yum install -y ipvsadm
    
    ipvsadm -Ln

    RS1和RS2:
    一、配置虚拟ip

    cd /etc/sysconfig/network-scripts/
    
    ll
    
    cp ifcfg-lo ifcfg-lo:1
    
    vi ifcfg-lo:1
    #只保留
    DEVICE=lo:1
    IPADDR=192.168.26.101
    NETMASK=255.255.255.255
    NETWORK=127.0.0.0
    # If you're having problems with gated making 127.0.0.0/8 a martian,
    # you can change this to something else (255.255.255.255, for example)
    BROADCAST=127.255.255.255
    ONBOOT=yes
    NAME=loopback
    
    service network restart

    二、配置ARP

    vi /etc/sysctl.conf
    
    #添加
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_announce = 2
    
    sysctl -p

    三、配置虚拟ip路由

    #把关于192.168.26.101vip的请求,交给lo:1来处理
    route add -host 192.168.26.101 dev lo:1
    
    #此时,vip加入了路由
    route -n
    #192.168.26.101 0.0.0.0 255.255.255.255 UH 0 0 0 lo
    
    #重启不丢失
    echo "route add -host 192.168.26.101 dev lo:1" >> /etc/rc.local

    LVS:
    一、配置vip集群规则(rr:轮询)

    ipvsadm -A -t 192.168.26.101:80 -s rr
    
    #查看集群规则
    ipvsadm -Ln
    
    #给vip添加真实服务器(-g:代表DR模式)
    ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.128:80 -g
    ipvsadm -a -t 192.168.26.101:80 -r 192.168.26.129:80 -g

    至此,单节点Lvs+nginx已完成配置。
    打开浏览器:访问192.168.26.101:80,能访问通,即可。
    注意:
    你会发现,无论你怎么刷新,都只访问一台机器,明明配的轮询啊,这是
    因为lvs默认同一个用户同一个请求300秒以内,都路由到同一台机器。
    可以修改默认时间来验证:-p 0设置为0s
    ipvsadm -E -t 192.168.26.101:80 -s rr -p 0

    接下来查看ipvsadm默认超时时间

    [root@DR1 keepalived]# ipvsadm -L --timeout

    Timeout (tcp tcpfin udp): 900 120 300

    900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,巨坑!!!!!!因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:

    [root@DR1 ~]# ipvsadm --set 1 2 1

    调整之后查看调整效果

    [root@DR1 ~]# ipvsadm -L --timeout

    Timeout (tcp tcpfin udp): 1 2 1

    设置完之后,每隔2秒刷新一下浏览器,发现轮询了。

    给LVS配置keepAlived,实现高可用

    LVS-master:
    前置工作:

    #清除手动新增的vip
    rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
    service network restart

    一、安装keepalived

    yum install -y keepalived
    
    vi /etc/keepalived.conf
    #保存************************************************
    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_126
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 126
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.26.101
        }
    }
    
    #LVS的相关配置
    virtual_server 192.168.26.101 80 {
        #健康检查时间,单位:s
        delay_loop 6
    
        #负载均衡算法,默认轮询rr
        lb_algo rr
    
        #LVS的工作模式  NAT|TUN|DR
        lb_kind DR
        #会话持久化时间
        persistence_timeout 0
        protocol TCP
    
        #负载均衡的真实服务器
        real_server 192.168.26.128 80 {
            weight 1
    
            #设置健康检查
            TCP_CHECK {
                #检查的端口,对应真实服务器的服务端口
                 connect_port 80
                #超时时间3s
                connect_timeout 3
                #重试次数 3次
                nb_get_retry 3
                #间隔时间3s
                delay_before_retry 3
            }
        }
        real_server 192.168.26.129 80 {
            weight 1
    
            #设置健康检查
            TCP_CHECK {
                #检查的端口,对应真实服务器的服务端口
                connect_port 80
                #超时时间3s
                connect_timeout 3
                #重试次数 3次
                nb_get_retry 3
                #间隔时间3s
                delay_before_retry 3
            }
        }
    }
    #***********************************************
    
    #清除lvs用命令配置的集群策略
    ipvsadm -C
    
    #重启keepalived
    systemctl restart keepalived
    #设置开机自启动
    systemctl enable keepalived
    #查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
    ipvsadm -Ln

    LVS-backup:
    前置工作:

    #清除手动新增的vip
    rm -rf /etc/sysconfig/network-scripts/ifcfg-ens33:1
    service network restart

    一、安装keepalived

    yum install -y keepalived
    
    vi /etc/keepalived.conf
    #保存************************************************
    ! Configuration File for keepalived
    
    global_defs {
       #LVS127的id
       router_id LVS_127
    }
    
    vrrp_instance VI_1 {
        #备份
        state BACKUP
        #根据自己使用的网卡决定
        interface ens33
        #和master一样
        virtual_router_id 126
        #优先级,官方建议相差50
        priority 50
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.26.101
        }
    }
    
    #LVS的相关配置
    virtual_server 192.168.26.101 80 {
        #健康检查时间,单位:s
        delay_loop 6
    
        #负载均衡算法,默认轮询rr
        lb_algo rr
    
        #LVS的工作模式  NAT|TUN|DR
        lb_kind DR
        #会话持久化时间
        persistence_timeout 0
        protocol TCP
    
        #负载均衡的真实服务器
        real_server 192.168.26.128 80 {
            weight 1
    
            #设置健康检查
            TCP_CHECK {
                #检查的端口,对应真实服务器的服务端口
                 connect_port 80
                #超时时间3s
                connect_timeout 3
                #重试次数 3次
                nb_get_retry 3
                #间隔时间3s
                delay_before_retry 3
            }
        }
        real_server 192.168.26.129 80 {
            weight 1
    
            #设置健康检查
            TCP_CHECK {
                #检查的端口,对应真实服务器的服务端口
                connect_port 80
                #超时时间3s
                connect_timeout 3
                #重试次数 3次
                nb_get_retry 3
                #间隔时间3s
                delay_before_retry 3
            }
        }
    }
    #*********************************************
    
    #清除lvs用命令配置的集群策略
    ipvsadm -C
    
    #重启keepalived
    service keepalived restart
    
    #查看keepalived的keepalived.conf是否生效,如果有策略列表,则证明keepalived配置成功,若没有策略列表,则说明配置文件有问题,检查ip或大括号是否正确。
    ipvsadm -Ln

    注意:两台lvs和两台RS服务都要关闭防火墙

    LVS主备高可用测试

    #1.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上
    ip addr
    #2.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101没有绑定在ens33网卡上
    ip addr
    #3.停止master的keepalived,此时继续访问http://192.168.26.101:80,仍然能访问通
    systemctl stop keepalived
    #4.在lvs-master上执行查看ip命令,你会发现,vip192.168.26.101没有了
    ip addr
    #5.在lvs-backup上执行查看ip命令,你会发现,vip192.168.26.101绑定在ens33网卡上,此时vip成功的从master漂移到了backup上
    ip addr
    #6.重新启动lvs-master上的keepalived,通过"ip addr"命令发现,此时vip成功的从backup又漂移到了master上
    systemctl stop keepalived


    Nginx健康检测 

    #1."./nginx -s stop"停掉RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中只剩RS2服务了。此时再访问vip,无论怎么访问,都只会访问到RS2服务。
    
    #2."./nginx -s start"启动RS1的nginx服务,此时在lvs的master或backup上执行"ipvsadm -Ln"命令,会发现,列表中RS1服务又出现了,此时再访问vip,又开始了轮询。

    至此已完成keepalived的配置。

    愿你走出半生,归来仍是少年!
  • 相关阅读:
    高质量的函数 —— 《clean code》读后感
    保证代码的高质量 —— 《clean code》读后感
    [转 TDD] 如何坚持TDD:使用者出现的问题以及解决方案
    注释 —— 《clean code》读后感
    注释 —— 《clean code》读后感
    如何命名 —— 《clean code》读后感
    高质量的函数 —— 《clean code》读后感
    保证代码的高质量 —— 《clean code》读后感
    格式 —— 《clean code》读后感
    华为内部面试题库(14)
  • 原文地址:https://www.cnblogs.com/hujunwei/p/15766986.html
Copyright © 2011-2022 走看看