美文网首页
keepalive+lvs,keepalive+nginx配置

keepalive+lvs,keepalive+nginx配置

作者: N33_LvQing | 来源:发表于2018-11-25 00:12 被阅读0次

    lvs容易出现单点故障,keepalive可以很好的解决这个问题,配置好keepalive会自动生成ipvs规则下面让我们来动手试试吧

    image.png

    将所有的地址都配好后我们只需要在两台lvs主机上编辑keepalive的配置文件

    vrrp_instance VI_1 {
        state MASTER
        interface ens33 
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 12345678
        }
        virtual_ipaddress {
            192.168.31.66/24 dev ens33 label ens33:0
        }
    }
    
    virtual_server 192.168.31.66 80 {
            delay_loop 1 #每隔1秒检测一次
            lb_algo wrr #wrr算法
            lb_kind DR
            protocol TCP
            sorry_server 127.0.0.1 80
    
            real_server 192.168.31.203 80 {
                    weight 1
                    HTTP_GET { #获取健康状态的方法
                            url {
                                    path /index.html
                                    status_code 200
                            }
                            nb_get_retry 3 #失败重试3次
                            delay_before_retry 2 #每一次重试之前延迟2秒
                            connect_timeout 3 #超时时长
                    }
            }
            
            real_server 192.168.31.204 80 {
                    weight 1
                    HTTP_GET {
                            url {
                                    path /index.html
                                    status_code 200
                            }
                            nb_get_retry 3 #失败重试3次
                            delay_before_retry 2 #每一次重试之前延迟2秒
                            connect_timeout 3 #超时时长
                    }
            }
                            
    }                                 
    

    与普通的keepalive不同的是需要定义一个虚拟服务器,然后在里面再定义两台真正的服务器
    启动keepalive服务


    image.png

    配置好后就会自动生成ipvs规则了


    image.png

    下面我们来测试下



    可以看到已经成功的负载均衡了,就算我们down掉其中一台主机lvs也能正常的工作,可用性大大的增强了。


    image.png
    就算我们down掉两台服务器也能访问sorry页面

    当然这样只有一台lvs主机在服务有点浪费资源,我们可以设置keepalived双主模式,让两台主机都动起来
    当然lvs使用起来由诸多的限制性,生产中较为常见的一般都是keepalived+nginx配置,现在让我们动手实验看看吧。
    keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整;也就是说当地址转移到本主机上就启动nginx,转走就关闭nginx这一切都是通过脚本的执行状态来完成,keepalived本身没有调动nginx的功能。当然如果是双主模式就不需要关闭nginx,只需要启动就行了。

    分两步:(1) 先定义一个脚本;(2) 调用此脚本;
    注意脚本要先定义在虚拟路由器之外,然后用track_script在虚拟路由器之内调用

    vrrp_script <SCRIPT_NAME> {
                    script "" #脚本如果很简单可直接写在这
                    interval INT #每隔多久脚本执行一次
                    weight -INT  #如果失败当前节点的priority减去多少(减去后因当小于备用节点)
                                      fall INT #至少检查几次
                                      rise INT# 如果可用立即加权
                }
                
                track_script {
                    SCRIPT_NAME_1
                    SCRIPT_NAME_2
                    ...
                }
    

    配置示例:

    vrrp_script chk_down {
            script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
            weight -10
            interval 1
            fall 1
            rise 1
    }
    
    vrrp_script chk_nginx {
        script "killall -0 nginx && exit 0 || exit 1"
        interval 1
        weight -5
        fall 2
        rise 1
                }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 12345678
        }
        virtual_ipaddress {
            192.168.31.66/24 dev ens33 label ens33:0
        }
    
    
        track_script {
            chk_down
            chk_nginx
        }
            notify_master "/etc/keepalived/notify.sh master"
            notify_backup "/etc/keepalived/notify.sh backup"
            notify_fault "/etc/keepalived/notify.sh fault"
    }
    
    

    在这个脚本我们通过判断目录下是否存在down文件来调整服务的优先级


    image.png

    这个时候如果我们创建一个down文件,则优先级就会被降低,ip地址会被移动到BACKUP上


    image.png
    既然这样我们也可以通过脚本来控制nginx,如果状态是主我们就启动nginx如果状态是备就关掉nginx
    在nginx的主配置文件中添加
     upstream webservs {
                    server 192.168.0.10:80
                    server 192.168.0.11:80
                    server 192.168.0.12:80
            {              
    
     proxy_pass http://webservs;
    
    
    #通知脚本
    
    notify() {
                   local mailsubject="$(hostname) to be $1, vip floating"
                   local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
                   echo "$mailbody" | mail -s "$mailsubject" $contact
                  }
    
     case $1 in
            master)
                     systemctl start nginx
                     notify master
                      ;;
            backup)
                     systemctl restart nginx
                     notify backup
                     ;;
            fault)
    
                     systemctl stop nginx   
    
    

    相关文章

      网友评论

          本文标题:keepalive+lvs,keepalive+nginx配置

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