侧边栏壁纸
  • 累计撰写 45 篇文章
  • 累计创建 15 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

【Nginx】使用Nginx+Keepalived实现双机主备

Administrator
2024-09-21 / 0 评论 / 0 点赞 / 73 阅读 / 8770 字 / 正在检测是否收录...

在实际的场景中,我们使用nginx实现后端服务器的反向代理和负载均衡,但是如果负载均衡节点宕机等不能工作的情况,即使后端服务都正常,也将不能正常访问,给实际工作带来巨大的影响。

我们可以使用nginx和keepalived的组合实现双机主备,提高服务的可靠性。

1. 基本架构图

正常情况下nginx主节点会工作,将流量转发到后端服务器中,如果主节点宕机或nginx本身故障,备节点将被启用进行工作,确保服务的稳定性和可靠性。

2. 节点规划

ip

角色

已安装软件

暴露端口

11.0.1.10

反向代理服务器

nginx

80

11.0.1.11

反向代理服务器

nginx

80

11.0.1.50

服务器一

tomcat9.0

8080

11.0.1.51

服务器二

tomcat8.5

8080

11.0.1.60

虚拟ip

/

/

在这种场景中,只需要对外暴露虚拟ip,不需要暴露真实的方向代理服务器ip和真实服务器ip。

3. 部署keepalived

以下操作在反向代理服务器节点执行

  1. 下载并安装keepalived

yum install -y keepalived
  1. 修改配置

# 在 11.0.1.10 节点执行
cat >/etc/keepalived/keepalived.conf<<"EOF"
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
    script_user root
    enable_script_security
}
vrrp_script chk_nginx {
    script "ss -tulnp | grep ':80'"   # 用于对nginx端口的检查
    interval 5
    weight -5
    fall 2  
    rise 1
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    mcast_src_ip 11.0.1.10
    virtual_router_id 51
    priority 101
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        11.0.1.60
    }
    track_script {
       chk_nginx
    }
}
EOF
# 在 11.0.1.11 节点执行
cat >/etc/keepalived/keepalived.conf<<"EOF"
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
    script_user root
    enable_script_security
}
vrrp_script chk_nginx {
    script "ss -tulnp | grep ':80'"   # 用于对nginx端口的检查
    interval 5
    weight -5
    fall 2  
    rise 1
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    mcast_src_ip 11.0.1.11
    virtual_router_id 51
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        11.0.1.60
    }
    track_script {
       chk_nginx
    }
}
EOF

说明:在一个局域网中,`virtual_router_id`必须相同,它能让keepalived自动探测到相关联的服务器。`state`有`MASTER`和`BACKUP`的区别,分别表示主节点和从节点。`11.0.1.60`为节点规划中的虚拟ip。

  1. 启动keepalived服务

systemctl daemon-reload

systemctl enable --now keepalived

启动完之后可通过`ip addr`命令查看各主机ip的变化。

除了`11.0.1.10`,还多了`11.0.1.60`的虚拟ip,如果发生宕机等事故,虚拟ip会漂移到`11.0.1.11`的节点,而不至于停止服务。

  1. 测试连通性

ping -c 4 11.0.1.60

4. 修改nginx配置

vi /usr/local/nginx/conf/nginx.conf

upstream fzjh{
    server 11.0.1.50:8080;
    server 11.0.1.51:8080;
}
server {
    listen       80;
    server_name  localhost;
    location / {
        proxy_pass http://fzjh;
    }
}

两台主备的配置完全一致。

5. 访问测试

http://11.0.1.60/

6. 主节点nginx进程故障访问测试

# 在 nginx 主节点执行
/usr/local/nginx/sbin/nginx -s stop

虚拟ip已成功漂移。

访问依旧不受影响。

0
博主关闭了所有页面的评论