基于nginx做负载均衡器配合keepalived做高可用

基于nginx做负载均衡器配合keepalived做高可用

码农世界 2024-05-23 前端 64 次浏览 0个评论

准备集群

  • nginx01服务器 192.168.50.104
  • nginx02服务器 192.168.50.105
  • keepalived+nginx四层代理 192.168.50.102
  • keepalived+nginx四川代理 192.168.50.103

    一、安装nginx

    #四台服务器全部安装nginx
    rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum -y install  nginx
    

    二、安装keepalived

    # 192.168.50.102  192.168.50.103 安装keepalived服务
    yum -y install keepalived
    #修改主机192.168.50.102的keepalived配置文件 yum方式安装的会生产配置文件在/etc/keepalived下
    vim keepalived.conf
    keepalived.conf:
    #检测脚本
    vrrp_script chk_http_port {
        script "/etc/keepalived/check_nginx.sh" #心跳执行的脚本,检测nginx是否启动
        interval 1                          #(检测脚本执行的间隔,单位是秒)
        weight 1                            #权重
    }
    #vrrp 实例定义部分
    vrrp_instance VI_1 {
        state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备
        interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡
        virtual_router_id 51    # 虚拟路由编号,主从要一直
        priority 100            # 优先级,数值越大,获取处理请求的优先级越高
        advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)
        #授权访问
        authentication {
            auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
            auth_pass 1111
        }
        track_script {
            chk_http_port            #(调用检测脚本)
        }
        virtual_ipaddress {
            192.168.50.200            # 定义虚拟ip(VIP)
        }
    }
    scp keepalived.conf 192.168.50.103:`pwd`  #复制配置文件到103主机 修改state状态和priority优先级
    

    三、准备脚本文件

    ## 192.168.50.102  192.168.50.103 
    vim /etc/keepalived/check_nginx.sh
    #!/bin/bash
    if ! killall -0 nginx &> /dev/null; then   
        systemctl stop keepalived
    fi
    -----------------------------------------------------------------------------------------------------
    killall -0 nginx: 这个命令尝试发送信号0给名为 "nginx" 的进程。由于信号0不会对进程产生影响,它仅用于检查进程是否存在。如果进程存在,则命令的退出状态为0;如果进程不存在,则退出状态为非0。
     ! 符号用于对命令的退出状态进行逻辑非操作。如果 killall -0 nginx 命令返回非0,则条件成立。
    systemctl stop keepalived:如果条件成立(即不存在名为 "nginx" 的进程),则执行该命令停止 Keepalived 服务。
    -----------------------------------------------------------------------------------------------------
    chmod +x check_nginx.sh #给执行权限
    

    四、测试服务

    浏览器访问 http://192.168.50.200
    killall nginx           # 关闭192.168.50.102的nginx
    ip addr show ens 33     #查看vip漂移到103主机
    systemctl status keepalived #查看keepalived状态 102的keepalived自动停止
    

转载请注明来自码农世界,本文标题:《基于nginx做负载均衡器配合keepalived做高可用》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,64人围观)参与讨论

还没有评论,来说两句吧...

Top