Nginx高级篇:从原理到实战,彻底搞懂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高级篇:从原理到实战,彻底搞懂Nginx

    文章插图
     
    【Nginx高级篇:从原理到实战,彻底搞懂Nginx】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 的) 。
    Nginx高级篇:从原理到实战,彻底搞懂Nginx

    文章插图
     
    一个 master 和多个 worker 的好处?
    • 可以使用 nginx -s reload 进行热部署 。
    • 每个 worker 是独立的进程 , 如果其中一个 worker 出现问题 , 其它 worker 是独立运行的 , 会继续争抢任务 , 实现客户端的请求过程 , 而不会造成服务中断 。
    设置多少个 worker 合适?
      Nginx 和 redis 类似 , 都采用了 io 多路复用机制 , 每个 worker 都是一个独立的进程 , 每个进程里只有一个主线程 , 通过异步非阻塞的方式来处理请求 , 每个 worker 的线程可以把一个 cpu 的性能发挥到极致 , 因此 , worker 数和服务器的 cpu 数相等是最为适宜的 。
    思考:
    (1)发送一个请求 , 会占用 worker 几个连接数?
    (2)有一个 master 和 4个 worker , 每个 worker 支持的最大连接数为 1024 , 该系统支持的最大并发数是多少?
    作者:臧小晶
    原文链接:https://juejin.im/post/5e1c263e5188254dc74a3b23




    推荐阅读