6. 高可用 一般情况下,通过 nginx 主服务器访问后台目标服务集群,当主服务器挂掉后,自动切换至备份服务器,此时由备份服务器充当主服务器的角色,访问后端目标服务器 。
6.1 实战一
实现效果:
准备两台 nginx 服务器,通过浏览器地址栏访问虚拟 ip 地址,把主服务器的 nginx 停止,再次访问虚拟 ip 地址仍旧有效 。
具体配置:
(1)在两台 nginx 服务器上安 keepalived 。
keepalived 相当于一个路由,它通过一个脚本来检测当前服务器是否还活着,如果还活着则继续访问,否则就切换到另一台备份服务器 。
# 安装 keepalivedyum install keepalived -y# 检查版本rpm -q -a keepalivedkeepalived-1.3.5-16.el7.x86_64(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.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 127.0.0.1 LVS_DEVEL 复制代码
- interval: 设置脚本执行的间隔时间
- weight: 当脚本执行失败即 keepalived 或 nginx 挂掉时,权重增加的值(可为负数) 。
- interface: 输入 ifconfig 命令查看当前的网卡名是什么 。
ens7f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.4.32 netmask 255.255.252.0 broadcast 192.168.7.255 inet6 fe80::e273:9c3c:e675:7c60 prefixlen 64 scopeid 0x20<link> ... ... (3)在 /usr/local/src 目录下添加检测脚本 nginx_check.sh 。#!/bin/bashA=`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 keepalivedfifi(4)启动两台服务器的 nginx 和 keepalived 。# 启动 nginx./nginx# 启动 keepalivedsystemctl start keepalived.service(5)查看虚拟 ip 地址 ip a。把主服务器 192.168.4.32 nginx 和 keepalived停止,再访问虚拟 ip 查看高可用效果 。6. 原理解析

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

文章插图
一个 master 和多个 worker 的好处?
- 可以使用 nginx -s reload 进行热部署 。
- 每个 worker 是独立的进程,如果其中一个 worker 出现问题,其它 worker 是独立运行的,会继续争抢任务,实现客户端的请求过程,而不会造成服务中断 。
Nginx 和 redis 类似,都采用了 io 多路复用机制,每个 worker 都是一个独立的进程,每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,每个 worker 的线程可以把一个 cpu 的性能发挥到极致,因此,worker 数和服务器的 cpu 数相等是最为适宜的 。
推荐阅读
- MySql主从复制,从原理到实践
- 邵武市组织茶企到建阳考察现代茶业生产发展项目点
- 隐形文胸穿法
- 炒花甲很简单,用一个方法,就不怕吃到泥和沙子,学习一下吧
- 穿越时空?我国科学家找到构造“类虫洞”的新思路
- 瞬间吸引到顾客注意力的说话方式,这三个“工具”功不可没
- 上海迪斯尼门票有几种?到迪士尼游玩前不搞清楚,很容易吃亏的
- 运动式减肥方法有哪些?
- 夏季减肥瘦身运动有什么?
- 应该怎样运动减肥呢?
