【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 lovalid_lft forever preferred_lft forever inet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen \ 1000link/ether 52:54:00:34:6c:35 brd ff:ff:ff:ff:ff:ffinet 192.168.1.2/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft foreverinet6 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:1mcreate=$upstream_cookie_session lookup=$cookie_sessionsync;}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 服务器都将能够感知到会话及其绑定到的上游服务器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python的集合模块,使用数据容器处理数据集合

大家好,Python是一种功能强大的编程语言,可以简化许多编程任务。它的标准库中有一个collections模块,提供了处理集合数据的有用容器数据类型。 ChainMap类将多个字典合并为一个映射。Counter类用于计算列表或其他可迭代对象中元素的出现次数…

距离向量路由协议——RIP

目录 动态路由动态路由简介为什么需要动态路由动态路由基本原理路由协议的分类 距离向量路由协议RIPv1RIP简介RIPv1的主要特征RIPv1的基本配置RIPv1配置案例被动接口单播更新使用子网地址 RIPv2RIPv2的基本配置RIPv2配置案例 RIPv2的高级配置与RIPv1的兼容性手工路由汇总触发更…

第四十一篇,一次matlab与spdlog的合作

做了一次matlab解析spdlog日志文件并动态绘制行车轨迹的尝试,大获成功。 spdlog的存储,数据头有固定格式如下: 日志类型一个字符空格[日期时间]空格[日志内容tag]空格日志内容 有了固定的格式,做解析就好办了。 (日…

快速了解ChatGPT(大语言模型)

目录 GPT原理:文字接龙,输入一个字,后面会接最有可能出现的文字。 GPT4 学会提问:发挥语言模型的最大能力 参考李宏毅老师的课快速了解大语言模型做的笔记: Lee老师幽默的开场: GPT:chat Ge…

高等数学积分关系定理(格林公式、高斯公式、斯托克斯公式)的理解

1 格林公式、高斯公式、斯托克斯公式 1.1 格林公式(Green formula) 1.1.1 格林公式例题 1.2 高斯公式(Gauss formula) 1.2.1 高斯公式例题1 1.2.2 高斯公式例题2 1.3 斯托克斯公式(Stokes formula) 1.3.1 …

Git修改远程仓库名称

1、先直接在远程点仓库名,然后左侧菜单栏找settings-general,然后直接修改工程名,保存即可。 2、还是在settings-general下,下拉找到Advanced点击Expand展开,然后下拉到最底部 在Change path里填入新的项目名称&#x…

GCN01——Ubuntu中设置vivado编辑器为vscode

确定vscode位置 在命令行中输入 which code得到文件地址 进入文件夹后可看到,这是个链接文件,不过无所谓,就用这个地址就行 设置Text Editor 打开setting选择右侧text editor 这里说明了如何进行设置 将自己的地址加进去就行 /usr/share…

Echarts 设置数据条颜色 宽度

设置数据条颜色(推荐) let yData [{value: 500,time: 2012-11-12,itemStyle: //设置数据条颜色{normal: { color: red }}},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}]…

亚马逊云科技:探索未来云计算之窗

云计算技术已经成为现代科技领域中至关重要的一个环节,它为各种行业提供了高效、灵活、可扩展的计算和数据存储解决方案。而在这个领域中,亚马逊云科技(Amazon Web Services,AWS)以其卓越的技术创新和广泛的云服务覆盖…

近期知识点随笔

菜单查询(编写权限时的细节) 菜单查询list为了侧边框展示更完整(不报空指针) 登录时(用户名)查询出多个结果(保证用户名唯一) 文件上传 前端 对权限与菜单绑定的修改(实…

opencv读取二进制灰度图并显示

#include <iostream> #include <fstream> #include <vector> #include <stdint.h>#include <opencv2/opencv.hpp> // 包含OpenCV头文件using namespace std;// 注意&#xff1a;确保这些值与Python脚本中生成数据的值匹配。 const int WIDTH 19…

(三)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB代码)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

ClassPathScanningCandidateComponentProvider

ClassPathScanningCandidateComponentProvider ClassPathScanningCandidateComponentProvider是Spring框架中的一个类&#xff0c;用于扫描classpath下指定包名中的类&#xff0c;并将其转换为Spring的BeanDefinition对象。 使用ClassPathScanningCandidateComponentProvider…

基本数据类型与引用数据类型的区别(java基础)

目录 &#x1f35f; 八大基本数据类型&#x1f35f; 引用数据类型&#x1f35f; 值传递&#x1f367;传递基本数据类型时&#xff0c;传递的是真实的数据&#xff0c;形参的改变&#xff0c;不影响实际参数的值&#x1f367;传递引用数据类型时&#xff0c;传递的是地址值&…

Win Server 2019远程桌面服务部署

一、添加远程桌面授权服务 服务器管理 - 添加角色和功能打开“添加角色和功能向导”窗口&#xff0c;选择基于角色或给予功能安装&#xff1a; 打开服务器管理&#xff0c;打开角色和功能&#xff0c;添加远程回话主机和远程桌面授权 image.png 以上配置完成后使用期限为120…

月度产品更新(11月):数据同步功能上线,配置更简单

为了满足用户不断增长的需求&#xff0c;我们持续努力提升产品的功能和性能&#xff0c;以更好地支持用户的工作。 数环通11月的最新产品更新已经正式发布&#xff0c;带来了一系列强大的功能&#xff0c;以提升您的工作效率和系统的可靠性。 更新快速预览 新增&优化功能&a…

【开源】基于Vue.js的超市账单管理系统的设计和实现

项目编号&#xff1a; S 032 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S032&#xff0c;文末获取源码。} 项目编号&#xff1a;S032&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

java springboot通过application配置文件生成随机值并控制范围

我们找到 项目的 application 配置文件 这里我们还是习惯用 yml格式的 我们在配置文件中 写出 ${random.} 的时候 他就会将所有可配置的随机类型都提示出来了 有 整数 长整星 字符串 uuid 这里 我们来个模板 testcase:book:id: ${random.int}name: ${random.value}date: ${r…

时序预测 | Python实现TCN时间卷积神经网络价格预测

时序预测 | Python实现TCN时间卷积神经网络时间序列预测 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 时间卷积网络,TCN。 利用CNN技术处理时间序列数据。 卷基础层有三种,第一种是一维CNN,用于输…

C语言每日一题(42)删除链表的倒数第N个结点

力扣网 19 删除链表的倒数第N个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head …