一般情况下,通过 Nginx 主服务器访问后台目标服务集群,当主服务器挂掉后,自动切换至备份服务器,此时由备份服务器充当主服务器的角色,访问后端目标服务器 。
实现效果:准备两台 Nginx 服务器,通过浏览器地址栏访问虚拟 IP 地址,把主服务器的 Nginx 停止,再次访问虚拟 IP 地址仍旧有效 。
具体配置:
# 安装 keepalived yum install keepalived -y# 检查版本 rpm -q -a keepalived keepalived-1.3.5-16.el7.x86_64 1.在两台 Nginx 服务器上安 Keepalived:Keepalived 相当于一个路由,它通过一个脚本来检测当前服务器是否还活着,如果还活着则继续访问,否则就切换到另一台备份服务器 。
2.修改主备服务器 /etc/keepalived/keepalivec.conf 配置文件(可直接替换),完成高可用主从配置 。
Keepalived 将 Nginx 服务器绑定到一个虚拟 IP,Nginx 高可用集群对外统一暴露这个虚拟 IP,客户端都是通过访问这个虚拟 IP 来访问 Nginx 服务器。
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from_Alexandre.Cassen@firewall.locsmtp_server 192.168.4.32smtp_connect_timeout 30router_id LVS_DEVEL# 在 /etc/hosts 文件中配置,通过它能访问到我们的主机 }vrrp_script_chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2# 检测脚本执行的时间间隔weight 2# 权重每次加2 }vrrp_instance VI_1 {interface ens7f0 # 网卡,需根据情况修改state MASTER# 备份服务器上将 MASTER 改为 BACKUPvirtual_router_id 51 # 主备机的 virtual_router_id 必须相同priority 100# 主备机取不同的优先级,主机值较大,备份机值较小advert_int 1# 每隔多长时间(默认1s)发送一次心跳,检测服务器是否还活着authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100 # VRRP H 虚拟地址,可以绑定多个} } 字段说明如下:
router_id:在 /etc/hosts 文件中配置,通过它能访问到我们的主机 。
127.0.0.1localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1LVS_DEVELinterval:设置脚本执行的间隔时间 。
weight:当脚本执行失败即 Keepalived 或 Nginx 挂掉时,权重增加的值(可为负数) 。
interface:输入 ifconfig 命令查看当前的网卡名是什么 。
ens7f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500inet 192.168.4.32netmask 255.255.252.0broadcast 192.168.7.255inet6 fe80::e273:9c3c:e675:7c60prefixlen 64scopeid 0x20<link>... ... 3.在 /usr/local/src 目录下添加检测脚本 nginx_check.sh:
#!/bin/bash A=`ps -C nginx -no-header |wc -l` if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ ps -C nginx -no-header |wc -l` -eq 0 ];thenkillall keepalivedfi fi 4.启动两台服务器的 Nginx 和 Keepalived:
# 启动 nginx ./nginx# 启动 keepalived systemctl start keepalived.service 5.查看虚拟 IP 地址 IP a 。把主服务器 192.168.4.32 Nginx 和 Keepalived 停止,再访问虚拟 IP 查看高可用效果 。
原理解析

文章插图
Nginx 启动之后,在 Linux 系统中有两个进程,一个为 Master,一个为 Worker 。
Master 作为管理员不参与任何工作,只负责给多个 Worker 分配不同的任务(Worker 一般有多个) 。
ps -ef |grep nginx root20473102019 ?00:00:00 nginx: master process /usr/sbin/nginx nginx4628 204730 Jan06 ?00:00:00 nginx: worker process nginx4629 204730 Jan06 ?00:00:00 nginx: worker process Worker 是如何工作的?客户端发送一个请求首先要经过 Master,管理员收到请求后会将请求通知给 Worker 。多个 Worker 以争抢的机制来抢夺任务,得到任务的 Worker 会将请求经由 Tomcat 等做请求转发、反向代理、访问数据库等(Nginx 本身是不直接支持 JAVA 的) 。

文章插图
一个 Master 和多个 Worker 的好处?
- 可以使用 nginx -s reload 进行热部署 。
- 每个 Worker 是独立的进程,如果其中一个 Worker 出现问题,其他 Worker 是独立运行的,会继续争抢任务,实现客户端的请求过程,而不会造成服务中断 。
通过异步非阻塞的方式来处理请求,每个 Worker 的线程可以把一个 CPU 的性能发挥到极致,因此,Worker 数和服务器的 CPU 数相等是最为适宜的 。
推荐阅读
- 辛夷花泡水喝的步骤教程,四大步骤教你如何简易而快速的冲泡百合花茶
- 花茶的正确喝法你知道吗,由内而外的美
- 喝苦荞茶的注意事项,四大步骤教你如何简易而快速的冲泡百合花茶
- 冬季滋补不用面面俱到 但这类食物必不可少
- 玫瑰和茉莉能起喝吗,而且越喝越年轻吗
- 空间站中的氧气为什么感觉永远用不完,从何而来?
- 为什么程序员不拿自己写的程序去卖,而要在公司领死工资呢?
- 求职|大专生打败985高材生转正,网友不但不祝福,反而质疑声不断
- 红巧梅泡水喝的功效,由内而外的美
- 真正厉害的人,向来不是一团和气,而是具备一定的“攻击性”
