Nginx 的这些妙用,你都 get 到了吗?( 六 )


后来又加入了可以实现高可用的 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能 。
因此,Keepalived 除了能够管理 LVS 软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL 等)的高可用解决方案软件 。
②故障转移机制
Keepalived 高可用服务之间的故障切换转移,是通过 VRRP 来实现的 。
在 Keepalived服务正常工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点自己还活着 。
当主 Master 节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master 节点的心跳了,于是调用自身的接管程序,接管主 Master 节点的 IP 资源及服务 。
而当主 Master节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来的备用角色 。
实现方法如下:
①准备两台安装 Nginx 和 Keepaliver(yum install keepalived -y)的服务器
②修改两台服务器上的 /etc/keepalived/keepalived.conf
#主机#检测脚本vrrp_scriptchk_http_port{script"/usr/local/src/check_nginx.sh"#心跳执行的脚本,检测nginx是否启动interval2#(检测脚本执行的间隔,单位是秒)weight2#权重}#vrrp实例定义部分vrrp_instanceVI_1{stateMASTER#指定keepalived的角色,MASTER为主,BACKUP为备interfaceens33#当前进行vrrp通讯的网络接口卡(当前centos的网卡)用ifconfig查看你具体的网卡virtual_router_id66#虚拟路由编号,主从要一直priority100#优先级,数值越大,获取处理请求的优先级越高advert_int1#检查间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication{auth_typePASS#设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass1111}track_script{chk_http_port#(调用检测脚本)}virtual_ipaddress{192.168.16.150#定义虚拟ip(VIP),可多设,每行一个}} 
#备机#检测脚本vrrp_scriptchk_http_port{script"/usr/local/src/check_nginx.sh"#心跳执行的脚本,检测nginx是否启动interval2#(检测脚本执行的间隔)weight2#权重}#vrrp实例定义部分vrrp_instanceVI_1{stateBACKUP#指定keepalived的角色,MASTER为主,BACKUP为备interfaceens33#当前进行vrrp通讯的网络接口卡(当前centos的网卡)用ifconfig查看你具体的网卡virtual_router_id66#虚拟路由编号,主从要一直priority99#优先级,数值越大,获取处理请求的优先级越高advert_int1#检查间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication{auth_typePASS#设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass1111}track_script{chk_http_port#(调用检测脚本)}virtual_ipaddress{192.168.16.150#定义虚拟ip(VIP),可多设,每行一个}}③新建检测脚本(chmod 775 check_nginx.sh):
#!/bin/bash#检测nginx是否启动了A=`ps-Cnginx--no-header|wc-l`if[$A-eq0];then#如果nginx没有启动就启动nginxsystemctlstartnginx#重启nginxif[`ps-Cnginx--no-header|wc-l`-eq0];then#nginx重启失败,则停掉keepalived服务,进行VIP转移killallkeepalivedfifi④启动 Nginx 和 Keepalived(systemctl start keepalived.service)
⑤模拟 Nginx 故障(关闭主服务器 Nginx),验证,仍可以通过配置的虚拟 IP 访问,OK 。
Nginx 原理与优化参数配置
Nginx 默认采用多进程工作方式,Nginx 启动后,会运行一个 Master 进程和多个 Worker 进程 。
其中 Master 充当整个进程组与用户的交互接口,同时对进程进行监护,管理 Worker 进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能 。
Worker 用来处理基本的网络事件,Worker 之间是平等的,他们共同竞争来处理来自客户端的请求 。

Nginx 的这些妙用,你都 get 到了吗?

文章插图
 
master-workers 的机制的好处:
  • 可以使用 nginx-s reload 热部署 。
  • 每个 Worker 是独立的进程,不需要加锁,省掉了锁带来的开销 。采用独立的进程,可以让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,Master 进程则很快启动新的 Worker 进程 。
 需要设置多少个 Worker?Nginx 同 redis 类似都采用了 IO 多路复用机制,每个 Worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是成千上万个请求也不在话下 。每个 Worker 的线程可以把一个 CPU 的性能发挥到极致 。所以 Worker 数和服务器的 CPU 数相等是最为适宜的 。设少了会浪费 CPU,设多了会造成 CPU 频繁切换上下文带来的损耗 。#设置 worker 数量 。worker_processes4#work 绑定 cpu(4 work 绑定 4cpu) 。worker_cpu_affinity0001001001001000#work 绑定 cpu (4 work 绑定 8cpu 中的 4 个) 。worker_cpu_affinity0000001000000100000010000001000


推荐阅读