大连网站公司,网站开发的有哪些好的软件,介绍公司的简介范文,用什么网站做封面最好一、前言
1、简介
Nginx作为一款高性能的Web服务器和反向代理服务器#xff0c;被广泛使用。且现如今很多高并发场景需要后端服务集群部署#xff0c;因此nginx也需要支持集群部署从而避免单点故障的问题。 本文将详细介绍使用 KeepalivedNginx 来实现Nginx的高可用集群和N…一、前言
1、简介
Nginx作为一款高性能的Web服务器和反向代理服务器被广泛使用。且现如今很多高并发场景需要后端服务集群部署因此nginx也需要支持集群部署从而避免单点故障的问题。 本文将详细介绍使用 KeepalivedNginx 来实现Nginx的高可用集群和Nginx实现Gateway网关服务集群。
2、什么是Keepalived
Keepalived是基于VRRP协议作用是检测服务器的状态如果有一台web服务器宕机或工作出现故障Keepalived将检测到并将有故障的服务器从系统中剔除同时使用其他服务器代替该服务器的工作当服务器工作正常后Keepalived自动将服务器加入到服务器群中这些工作全部自动完成不需要人工干涉需要人工做的只是修复故障的服务器。 简单来讲Keepalived可以在master和slave子网卡建立一个相同的VIPvirtual IP然后通过同一个虚拟出来的IP地址就可以访问两台服务器的Nginx。
二、实现步骤
实现 KeepalivedNginx 高可用集群共有两种常用方案即主从模式和双主模式。服务安装很简单所以本文不介绍如何安装Keepalived和Nginx服务将从配置方面分别介绍如何实现。
1、主从模式
这种方案由两台服务器均部署一个Keepalived和一个Nginx服务然后虚拟出一个VIP地址两台服务器一台做主一台做备但同时只有一台机器工作主节点宕机后由从节点自动成为主节点。当主节点不出现故障的时候从节点永远处于空闲状态。当主节点宕机重新上线后自动再次成为主节点。
1.1 服务器规划
角色ipvip地址部署服务主节点10.50.7.5110.50.7.100KeepalivedNginx从节点10.50.7.7610.50.7.100KeepalivedNginx
1.2 服务配置
1.2.1 keepalived配置
1、主节点keepalived.conf 配置如下我的目录是在 /etc/keepalived/keepalived.conf如下图 keepalived.conf
! Configuration File for keepalivedglobal_defs {#路由id当前安装keepalived节点主机的标识符全局唯一router_id keep_51
}# 定义chk_nginx脚本,脚本执行间隔10秒权重-10检测nginx服务是否在运行。
vrrp_script chk_nginx { #这里通过脚本监测 script /etc/keepalived/chk_nginx.sh #脚本执行间隔每2s检测一次interval 2 #脚本结果导致的优先级变更检测失败脚本返回非0则优先级 -5 weight -10 #检测连续2次失败才算确定是真失败。会用weight减少优先级1-255之间 fall 2 #检测1次成功就算成功。但不修改优先级 rise 1
}vrrp_instance VI_1 {# 表示的状态当前服务器为nginx的主节点MASTER/BACKUPstate MASTER# 当前实例绑定的网卡 可通过ip addr查询interface ens18# 保证主备节点一致virtual_router_id 100# 优先级/权重谁的优先级高在MASTER挂掉以后就能成为MASTERpriority 100# 主备之间同步检查的时间间隔默认1sadvert_int 1# 认证授权的密码防止非法节点的进入authentication {auth_type PASSauth_pass 1111}# 虚拟出来的VIP地址virtual_ipaddress {10.50.7.100}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面实验中碰过的坑否则nginx监控失效track_script { #引用VRRP脚本即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级并最终引发主备切换。 chk_nginx }
}2、从节点keepalived.conf配置
! Configuration File for keepalivedglobal_defs {#路由id当前安装keepalived节点主机的标识符全局唯一router_id keep_76
}# 定义chk_nginx脚本,脚本执行间隔10秒权重-10检测nginx服务是否在运行。
vrrp_script chk_nginx { #这里通过脚本监测 script /etc/keepalived/chk_nginx.sh #脚本执行间隔每2s检测一次interval 2 #脚本结果导致的优先级变更检测失败脚本返回非0则优先级 -5 weight -10 #检测连续2次失败才算确定是真失败。会用weight减少优先级1-255之间 fall 2 #检测1次成功就算成功。但不修改优先级 rise 1
}vrrp_instance VI_1 {# 表示的状态当前服务器为nginx的从节点MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡 可通过ip addr查询interface ens18# 保证主备节点一致virtual_router_id 100# 优先级/权重谁的优先级高在MASTER挂掉以后就能成为MASTERpriority 99# 主备之间同步检查的时间间隔默认1sadvert_int 1# 认证授权的密码防止非法节点的进入authentication {auth_type PASSauth_pass 1111}# 虚拟出来的VIP地址virtual_ipaddress {10.50.7.100}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面实验中碰过的坑否则nginx监控失效track_script { #引用VRRP脚本即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级并最终引发主备切换。 chk_nginx }
}3、chk_nginx.sh vim /etc/keepalived/chk_nginx.sh 编辑完内容之后需要赋权限命令chmod x /etc/keepalived/chk_nginx.sh
#!/bin/bash
Aps -C nginx --no-header |wc -l
if [ $A -eq 0 ];then /home/chnsys/ecms/nginx/sbin/nginxsleep 3 if [ ps -C nginx --no-header |wc -l -eq 0 ] thensystemctl stop keepalived fi
fi或者 #!/bin/bashcounter$(ps -ef|grep nginx | grep -v grep|wc -l)if [ ${counter} 0 ]; then/home/chnsys/ecms/nginx/sbin/nginx || truesleep 3counter$(ps -ef|grep nginx | grep -v grep|wc -l)if [ ${counter} 0 ]; thensystemctl stop keepalivedfifi上述脚本需要按实际修改nginx的启动命令两个脚本均可推荐第二个这两个 Bash 脚本的主要目的是检查 Nginx 是否正在运行并在其未运行时启动 Nginx。如果启动后 Nginx 仍然未运行那么它将停止 keepalived 服务keepalived 停止之后将由从节点代替为主节点防止主节点keepalived服务运行但是nginx服务挂掉导致后续服务无法访问的问题。
1.3 启动服务
分别启动两个服务器的nginx服务和keepalived服务命令如下 /home/chnsys/ecms/nginx/sbin/nginx看具体的安装位置 systemctl start keepalived 全局生效
1.4 验证效果
分别访问主服务器和从服务器以及虚拟vip的nginx服务的默认页面地址 可以看到访问虚拟的VIP地址也可以访问到主服务器的nginx的默认页面。
1.5 主从切换
1、nginx
关闭主节点上的nginx服务观察主节点的nginx是否会被自动重启。如果重启则说明chk_nginx脚本执行成功如果nginx未能重启则应当执行脚本中的命令关闭keepalived服务。
2、keepalived
关闭主节点的keepalived服务观察vip是否会绑定到从服务器上。
重启主节点的keepalived服务观察vip是否会绑定到主服务器上。
2、互为主从模式
这种方案使用两个VIP地址互为主备轮询请求两个VIP地址同时有两台机器工作当其中一台机器出现故障两台机器的请求转移到一台机器负担非常适合于生产架构环境。
2.1 服务器规划
角色ipvip地址部署服务主、从节点10.50.7.5110.50.7.100KeepalivedNginx从、主节点10.50.7.7610.50.7.101KeepalivedNginx
2.2 服务配置
2.2.1 keepalived配置
在双主模式中大致内容与主从模式一样需要额外添加以下内容新增一个新的vrrp_instance配置state 为主从配置相反的角色如下 注chk_nginx.sh脚本在1.2.1 keepalived配置的第三个
1、主节点keepalived.conf 配置如下
! Configuration File for keepalivedglobal_defs {#路由id当前安装keepalived节点主机的标识符全局唯一router_id keep_51}# 定义chk_nginx脚本,脚本执行间隔10秒权重-10检测nginx服务是否在运行。vrrp_script chk_nginx { #这里通过脚本监测 script /etc/keepalived/chk_nginx.sh #脚本执行间隔每2s检测一次interval 2 #脚本结果导致的优先级变更检测失败脚本返回非0则优先级 -5 weight -10 #检测连续2次失败才算确定是真失败。会用weight减少优先级1-255之间 fall 2 #检测1次成功就算成功。但不修改优先级 rise 1 }vrrp_instance VI_1 {# 表示的状态当前服务器为nginx的主节点MASTER/BACKUPstate MASTER# 当前实例绑定的网卡 可通过ip addr查询interface ens18# 保证主备节点一致virtual_router_id 100# 优先级/权重谁的优先级高在MASTER挂掉以后就能成为MASTERpriority 100# 主备之间同步检查的时间间隔默认1sadvert_int 1# 认证授权的密码防止非法节点的进入authentication {auth_type PASSauth_pass 1111}# 虚拟出来的VIP地址virtual_ipaddress {10.50.7.100}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面实验中碰过的坑否则nginx监控失效track_script { #引用VRRP脚本即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级并最终引发主备切换。 chk_nginx }}vrrp_instance VI_2 {# 表示的状态当前服务器为nginx的主节点MASTER/BACKUPstate BACKUP# 当前实例绑定的网卡 可通过ip addr查询interface ens18# 保证主备节点一致virtual_router_id 101# 优先级/权重谁的优先级高在MASTER挂掉以后就能成为MASTERpriority 99# 主备之间同步检查的时间间隔默认1sadvert_int 1# 认证授权的密码防止非法节点的进入authentication {auth_type PASSauth_pass 1111}# 虚拟出来的VIP地址virtual_ipaddress {10.50.7.101}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面实验中碰过的坑否则nginx监控失效track_script { #引用VRRP脚本即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级并最终引发主备切换。 chk_nginx }}2、从节点keepalived.conf 配置如下 ! Configuration File for keepalivedglobal_defs {router_id 76
}# 定义chk_nginx脚本,脚本执行间隔10秒权重-10检测nginx服务是否在运行。
vrrp_script chk_nginx { #这里通过脚本监测 script /etc/keepalived/chk_nginx.sh #脚本执行间隔每2s检测一次interval 2 #脚本结果导致的优先级变更检测失败脚本返回非0则优先级 -5 weight -10 #检测连续2次失败才算确定是真失败。会用weight减少优先级1-255之间 fall 2 #检测1次成功就算成功。但不修改优先级 rise 1
}vrrp_instance VI_1 {state BACKUPinterface ens18virtual_router_id 100priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.50.7.100}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面实验中碰过的坑否则nginx监控失效track_script { #引用VRRP脚本即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级并最终引发主备切换。 chk_nginx }
}vrrp_instance VI_2 {state MASTERinterface ens18virtual_router_id 101priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.50.7.101}#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面实验中碰过的坑否则nginx监控失效track_script { #引用VRRP脚本即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级并最终引发主备切换。 chk_nginx }
}2.3 启动或重启服务
分别启动两个服务器的nginx服务和keepalived服务命令如下 /home/chnsys/ecms/nginx/sbin/nginx看具体的安装位置 systemctl restart keepalived 全局生效
2.4 验证效果
分别访问主服务器和从服务器的虚拟vip的nginx服务的默认页面地址 可以看到两个服务器互为主从的效果
2.5 主从切换
同上述1.5中效果验证即可
三、实现网关集群
本文通过两种方案实现 KeepalivedNginx 的高可用集群。还有一些其他的特性功能例如主备节点切换后邮件通知等也只需修改相关配置即可本文主要实现主备切换的功能就不在此赘述。 一般来讲会再通过nginx来路由请求后台网关服务网关服务同样需要集群来解决单点故障问题可以利用nginx的特性来反向代理网关集群
1、nginx.conf配置
upstream niginx-http-cluster{server 10.50.7.51:8080;server 10.50.7.76:8080;
}server {listen 8080;server_name localhost;location / {proxy_redirect off;proxy_set_header Host $host;proxy_set_header Origin ;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://niginx-http-cluster/hello/;}
}按照上述配置之后nginx会轮询访问两个网关服务的地址当其中一个服务挂掉之后就会自动切换到正常的服务从而实现网关服务集群。