【NGINX--10】高可用性部署模式

1、NGINX Plus HA(高可用性)模式

需要高可用性负载均衡解决方案。

从 NGINX Plus 仓库中安装 nginx-ha-keepalived 包,利用 keepalived 实现 NGINX Plus 的 HA 模式。
详解
nginx-ha-keepalived 包基于 keepalived,管理暴露给客户端的虚拟 IP 地址。在NGINX 服务器上运行的另一个进程可确保 NGINX Plus 和 keepalived 进程保持运行。Keepalived 进程使用虚拟路由器冗余协议(VRRP)将短消息(通常被称为心跳消息)发送到备份服务器。如果备份服务器连续三个周期接收不到心跳消息,备份服务器就会启动故障转移,将虚拟 IP 地址切换到自己这里并成为主服务器。nginx-hakeepalived 的故障转移功能经配置,可识别自定义故障情形。

2、通过 DNS 实现负载均衡器的负载均衡

需要在两台或多台 NGINX 服务器之间分发负载。

通过向 DNS A 记录中添加多个地址,使用 DNS 轮询 NGINX 服务器。
详解
运行多个负载均衡器时,可通过 DNS 分发负载。A 记录允许在单个 FQDN 下列出多个 IP 地址。DNS 将自动轮询所有列出的 IP。DNS 还为加权记录提供加权轮询,其工作方式与【NGINX–2】高性能负载均衡中所描述的 NGINX 的加权轮询工作方式相同。这些功能帮助极大。但是,当 NGINX 服务器处理请求遇到故障时,记录可能不会被删除,这是个问题。DNS 提供商(Amazon Route 53 和 Dyn DNS)通过其 DNS 产品提供健康检查和故障转移功能,可帮助缓解这些问题。如果使用 DNS 帮助 NGINX 进行负载均衡,那么当某台NGINX 服务器被标记为删除时,最好在删除上游服务器时遵循 NGINX 所使用的协议。首先,通过从 DNS 记录中删除服务器的 IP 地址,停止向其发送新连接,然后在停止或关闭服务之前允许连接清空。

3、在 EC2 上实现负载均衡

正在 AWS 上使用 NGINX,而 NGINX Plus HA(高可用性)模式不支持 Amazon IP。

配置 NGINX 服务器的 Auto Scaling 组并将 Auto Scaling 组链接到目标组,然后将目标组连接到 NLB,从而将 NGINX 置于 AWS NLB 之后。或者,也可以使用 AWS 控制台、命令行接口或 API,手动将 NGINX 服务器添加到目标组中。

详解
由于 EC2 IP 地址以不同的方式使用,AWS 不支持浮动虚拟 IP 地址,所以基于keepalived 的 NGINX Plus HA 解决方案将无法在 AWS 上使用。这并非意味着 NGINX 无法在 AWS 云中实现高可用性;实际上,事实正好相反。亚马逊产品 AWS NLB 可以在多个被称作可用区的在物理上分隔的数据中心之间进行本地负载均衡,提供主动健康检查,并提供 DNS CNAME 端点。在 AWS 上实现 NGINX 高可用性的一种常见解决方案是将 NGINX 层置于 NLB 之后。NGINX 服务器可按需自动添加到目标组中或从目标组中删除。NLB 无法替代 NGINX;NGINX 可提供许多 NLB 无法提供的功能,例如多种负载均衡方法、速率限制、高速缓存和七层路由。尽管 AWS ALB 能够基于URI 路径和主机请求头执行七层负载均衡,但是无法提供 WAF 高速缓存、带宽限制、HTTP/2 服务器推送等 NGINX 可提供的功能。如果 NLB 无法满足需求,还有许多其他解决方案可供选择。其中一种选择是 DNS 解决方案:AWS Route 53 提供健康检查和DNS 故障转移。

4、NGINX Plus 配置同步

正在运行 HA(高可用性)NGINX Plus 层,需要实现服务器配置同步。

使用 NGINX Plus 独有的配置同步功能。该功能的配置步骤如下:
从 NGINX Plus 软件包仓库中安装 nginx-sync 包。
对于 RHEL 或 CentOS:

$ sudo yum install nginx-sync

对于 Ubuntu 或 Debian:

$ sudo apt-get install nginx-sync

授予主机以 root 身份 SSH 访问对等机。
为 root 权限生成 SSH 身份验证密钥对,并检索公钥:

$ sudo ssh-keygen -t rsa -b 2048
$ sudo cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3Nz4rFgt...vgaD root@node1

获取主节点的 IP 地址:

$ ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
    inet 127.0.0.1/8 scope host lo
        valid_lft forever preferred_lft forever 
    inet6 ::1/128 scope host
        valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen \ 1000
    link/ether 52:54:00:34:6c:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0 
        valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe34:6c35/64 scope link 
        valid_lft forever preferred_lft forever

ip addr 命令将转储机器接口信息。跳过环回接口,它通常显示在最前面。查找主接口inet 后面的 IP 地址。在本示例中,IP 地址是 192.168.1.2。
将公钥分发到 root 用户在每个对等节点上的 authorized_keys 文件,并指定仅从主 IP 地址授权:

$ sudo echo 'from="192.168.1.2" ssh-rsa AAAAB3Nz4rFgt...vgaD  root@node1' >> /root/.ssh/authorized_keys
将以下命令行添加到 /etc/ssh/sshd_config 中并在所有节点上重载 sshd:
$ sudo echo 'PermitRootLogin without-password' >> /etc/ssh/sshd_config
$ sudo service sshd reload

验证主节点上的 root 用户能否对每个对等节点进行 ssh 免密登录:

$ sudo ssh root@node2.example.com

在主机上使用以下配置创建配置文件 /etc/nginx-sync.conf:

NODES="node2.example.com node3.example.com node4.example.com" 
CONFPATHS="/etc/nginx/nginx.conf /etc/nginx/conf.d" 
EXCLUDE="default.conf"

本示例配置演示了该功能的三个常用配置参数:NODES、CONFIGPATHS 和EXCLUDE。NODES 参数被设置为用空格隔开的主机名或 IP 地址的字符串;主节点会将其配置更改推送给对等节点。CONFIGPATHS 参数表示应同步的文件或目录。最后,可以使用 EXCLUDE 参数将配置文件从同步进程中删除。在我们的示例中,主节点向名为 node2.example.com、node3.example.com 和 node4.example.com 的对等节点推送主要 NGINX 配置文件的配置更改并添加目录 /etc/nginx/nginx.conf 和 /etc/nginx/conf.d。如果同步进程发现名为 default.conf 的文件,由于该文件已被配置为EXCLUDE,因此不会被推送给对等节点。

高级配置参数可以配置 NGINX 二进制文件、RSYNC 二进制文件、SSH 二进制文件、diff 二进制文件、lockfile 和备份目录的位置。还有一个参数使用 sed 为给定文件提供模板。如欲了解有关高级参数的更多信息,请参阅“NGINX 集群配置同步”。

对配置进行测试:

$ nginx-sync.sh -h # 显示使用信息
$ nginx-sync.sh -c node2.example.com # 与节点 2 比较配置
$ nginx-sync.sh -C # 与所有对等节点比较主要配置
$ nginx-sync.sh # 在所有对等节点上同步配置并重载 NGINX

详解
这项 NGINX Plus 独有功能可帮助高效管理 HA 配置中的多台 NGINX Plus 服务器,您只需更新主节点,将配置同步到所有其他对等节点即可。配置同步的自动化可降低在配置同步过程中发生错误的风险。为避免将不良配置发送给对等节点,nginx-sync.sh 应用提供了多项保障措施,包括测试主节点的配置,在对等节点上创建配置备份,以及在重载之前验证对等节点的配置。尽管最好使用配置管理工具或 Docker 对配置进行同步,但如果尚不能通过这些方式管理环境,NGINX Plus 配置同步特性将会是不错的选择。

5、与 NGINX Plus 的状态共享和区域同步

需要 NGINX Plus 在大量高可用性服务器之间同步其共享内存区。

配置区域同步,然后使用 sync 参数配置 NGINX Plus 共享内存区:

stream {
    resolver 10.0.0.2 valid=20s;
    server {
        listen 9000; 
        zone_sync;
        zone_sync_server nginx-cluster.example.com:9000 resolve;
        # ...安全措施
    }
}
http {
    upstream my_backend { 
        zone my_backend 64k;
        server backends.example.com resolve; 
        sticky learn zone=sessions:1m
                 create=$upstream_cookie_session 
                 lookup=$cookie_session
                 sync;
    }
    server {
        listen 80; 
        location / {
            proxy_pass http://my_backend;
        }
    }
}

详解
zone_sync 模块是 NGINX Plus 的一项独有功能,能够让 NGINX Plus 真正实现集群。如配置所示,必须将一台 stream 服务器设为配置为 zone_sync。在本示例中,选用了侦听端口 9000 的服务器。NGINX Plus 与 zone_sync_server 指令定义的其他服务器通信。可以为此指令设置一个域名,使域名解析到多个 IP 地址以构成动态集群,或者静态定义一系列 zone_sync_server 指令以避免单点故障。应限制对区域同步服务器的访问;可以为 zone_sync 模块设置特定 SSL/TLS 指令以进行机器身份验证。将 NGINX Plus 配置为集群的好处是,可以对共享内存区进行速率限制、粘性学习(sticky-learn)会话和键值(key-value)存储等方面的同步。在所提供的示例中,sticky learn 指令在末端添加了 sync 参数。在本示例中,用户基于名为 session 的 cookie 绑定到上游服
务器。在没有 zone_sync 模块的情况下,如果用户向不同的 NGINX Plus 服务器发出请求,则可能会丢失会话。如果存在 zone_sync 模块,所有 NGINX Plus 服务器都将能够感知到会话及其绑定到的上游服务器。

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白--AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值