KeepAlive + VIP 配置高可用 Nginx 主备集群

一、 背景

        本文主要介绍使用 keepalive 实现 nginx 的主备高可用

        实验环境:CentOS 7 64 位

        

二、 实验步骤

2.1   安装 Nginx 和 Keepalive 软件 (两台机器都装)

# sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# sudo yum install -y nginx
# sudo systemctl start nginx.service
# sudo systemctl enable nginx.service
# sudo yum install keepalived -y
# sudo systemctl start keepalived.service
# sudo systemctl enable keepalived.service

2.2  编写 nginx 服务存活检测脚本(两台机器都装)

# vim /usr/bin/check_nginx_alive.sh
#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

A=`ps -C nginx --no-header |wc -l`

if [ $A -eq 0 ]
   then
     echo 'nginx server is died'
     killall keepalived
fi
# chmod +x /usr/bin/check_nginx_alive.sh

2.3  配置 keepalive (两台机器略有差异)

# vim /etc/keepalived/keepalived.conf

       机器 A

vrrp_script check_nginx_alive {
    script "/usr/bin/check_nginx_alive.sh"
    interval 3
    weight -10
}
global_defs {
    ## 设置lvs的id,在一个网络内唯一
    router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    ## 主机配置,从机为BACKUP
    state MASTER
    ## 网卡名称
    interface ens37
    virtual_router_id 51
    ## 权重值,值越大,优先级越高,backup设置比master小,这样就能在master宕机后讲backup变为master,而master回复后就可以恢复.
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        ## 同一网段虚拟IP
        192.168.1.100
    }
    track_script {
        check_nginx_alive
    }

}

virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.9 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

       机器 B

vrrp_script check_nginx_alive {
    script "/usr/bin/check_nginx_alive.sh"
    interval 3
    weight -10
}
global_defs {
    ## 设置lvs的id,在一个网络内唯一
    router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    ## 主机配置,从机为BACKUP
    state BACKUP
    ## 网卡名称
    interface ens37
    virtual_router_id 51
    ## 权重值,值越大,优先级越高,backup设置比master小,这样就能在master宕机后讲backup变为master,而master回复后就可以恢复.
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        ## 同一网段虚拟IP
        192.168.1.100
    }
    track_script {
        check_nginx_alive
    }

}

virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.8 80 {
        weight 1
        TCP_CHECK{
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

       注解: 虚拟 IP 为 192.168.1.100,A 机器 IP 为 192.168.1.9,B 机器 IP 为 192.168.1.8

                   A 为 Master,B 为 Slave,A 优先级(100)高于 B 优先级(90),

2.4  修改 Nginx 主页,便于追溯主机(非必需,两台主机不同)

# vim /usr/share/nginx/html/index.html

        机器 A

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx! @Node A </h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

        机器 B

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx! @Node B </h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

2.5  重启 keepalive 生效(两台机器都执行)

# systemctl restart keepalived

2.6 结果检查

      客户端访问虚拟 IP

       


      A 机器 停止 nginx 服务
# systemctl stop nginx

      再次访问虚拟地址

      

      A 机器 重新启动 nginx ,同时重新启动 keepalived

# systemctl start nginx
# systemctl restart keepalived

      再次访问虚拟 IP

      

         本实验验证了 VIP 的自动漂移,基本实现了nginx 的主备自动切换

         值得注意的是,修复失败的服务后,

         必须重启所在机器的keepalive服务,否则keepalive是无法感知到服务恢复的!!!

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
keepalivenginx都与高可用相关。keepalive是一个用于维持TCP连接的工具,它可以确保在网络中的连接保持活跃,从而提高服务的可用性和可靠性。而nginx是一个高性能的Web服务器和反向代理服务器,它可以处理大量的并发连接并分发请求到不同的后端服务器,从而提供高可用性和负载均衡。在高可用的部署中,我们可以将nginxkeepalive结合使用,通过配置keepalive来监控后端服务器的健康状态,并使用nginx来实现负载均衡和故障转移,以保证系统的高可用性。引用中的命令systemctl enable nginx keepalived用于启用nginxkeepalived服务,使其在系统启动时自动运行。引用中的命令systemctl enable kubelet用于启用kubelet服务,kubelet是Kubernetes集群中的一个核心组件,它负责管理节点上的容器和Pod。而引用中的命令vim /etc/nginx/nginx.conf用于编辑nginx配置文件,通过配置nginx的参数和指令可以实现高可用性的设置,例如配置反向代理、负载均衡和健康检查等。因此,通过结合keepalivenginx的使用,我们可以实现高可用的部署和管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [keepalive+nginx高可用K8S集群部署](https://blog.csdn.net/fzqdyyd/article/details/127340860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值