Nginx【反向代理负载均衡动静分离】--下

这篇具有很好参考价值的文章主要介绍了Nginx【反向代理负载均衡动静分离】--下。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nginx【反向代理负载均衡动静分离】–下

Nginx 工作机制&参数设置

master-worker 机制

示意图

Nginx【反向代理负载均衡动静分离】--下

图解
  1. 一个master 管理多个worker
    Nginx【反向代理负载均衡动静分离】--下

一说master-worker 机制

● 争抢机制示意图

Nginx【反向代理负载均衡动静分离】--下

图解
  1. 一个master Process 管理多个worker process, 也就是说Nginx 采用的是多进程结构, 而不是多线程结构.
  2. 当client 发出请求(任务)时,master Process 会通知管理的worker process
  3. worker process 开始争抢任务, 争抢到的worker process 会开启连接,完成任务
  4. 每个worker 都是一个独立的进程,每个进程里只有一个主线程
  5. Nginx 采用了IO 多路复用机制(需要在Linux 环境), 使用IO 多路复用机制, 是Nginx 在使用为数不多的worker process 就可以实现高并发的关键

二说master-worker 机制

示意图

Nginx【反向代理负载均衡动静分离】--下

对上图说明

● Master-Worker 模式

1、Nginx 在启动后,会有一个master 进程和多个相互独立的worker 进程

2、Master 进程接收来自外界的信号,向各worker 进程发送信号,每个进程都有可能来处理这个连接。

3、Master 进程能监控Worker 进程的运行状态,当worker 进程退出后(异常情况下),会自动启动新的worker 进程。

● accept_mutex 解决"惊群现象"/理论

1、所有子进程都继承了父进程的sockfd,当连接进来时,所有子进程都将收到通知并“争着”与它建立连接,这就叫“惊群现象”。

2、大量的进程被激活又挂起,只有一个进程可以accept() 到这个连接,会消耗系统资源。

3、Nginx 提供了一个accept_mutex ,这是一个加在accept 上的一把共享锁。即每个worker 进程在执行accept 之前都需要先获取锁,获取不到就放弃执行accept()。有了这把锁之后,同一时刻,就只会有一个进程去accpet(),就不会有惊群问题了。

4、当一个worker 进程在accept() 这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,完成一个完整的请求。

5、一个请求,完全由worker 进程来处理,而且只能在一个worker 进程中处理。

● 用多进程结构而不用多线程结构的好处/理论

1、节省锁带来的开销, 每个worker 进程都是独立的进程,不共享资源,不需要加锁。在编程以及问题查上时,也会方便很多。

2、独立进程,减少风险。采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快重新启动新的worker 进程

● 实现高并发的秘密-IO 多路复用

1、对于Nginx 来讲,一个进程只有一个主线程,那么它是怎么实现高并发的呢?

2、采用了IO 多路复用的原理,通过异步非阻塞的事件处理机制,epoll 模型,实现了轻量级和高并发

3、nginx 是如何具体实现的呢,举例来说:每进来一个request,会有一个worker 进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker 不会这么傻等着,他会在发送完请求后,注册一个事件:“如果upstream 返回了,告诉我一声,我再接着干”。于是他就休息去了。此时,如果再有request 进来,他就可以很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个request 才会接着往下走。由于web server 的工作性质决定了每个request 的大部份生命都是在网络传输中,实际上花费在server 机器上的时间片不多,这就是几个进程就能解决高并发的秘密所在

小结

Nginx 的master-worker 工作机制的优势

1、支持nginx -s reload 热部署, 这个特征在前面我们使用过

2、对于每个worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多

3、每个worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式/IO 多路复用来处理请求, 即使是高并发请求也能应对.

4、采用独立的进程,互相之间不会影响,一个worker 进程退出后,其它worker 进程还在工作,服务不会中断,master 进程则很快启动新的worker 进程

5、一个worker 分配一个CPU , 那么worker 的线程可以把一个cpu 的性能发挥到极致

参数设置

worker_processes

● 需要设置多少个worker
  • 每个worker 的线程可以把一个cpu 的性能发挥到极致。所以worker 数和服务器的cpu数相等是最为适宜的。设少了会浪费cpu,设多了会造成cpu 频繁切换上下文带来的损耗。
  • 设置worker 数量, Nginx 默认没有开启利用多核cpu,可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu 的性能
#2 核cpu,开启2 个进程
worker_processes 2;
worker_cpu_affinity 01 10;

#2 核cpu,开启4 个进程,
worker_processes 4;
worker_cpu_affinity 01 10 01 10;

#4 核cpu,开启2 个进程,0101 表示开启第一个和第三个内核,1010 表示开启第二个和第四个内核;
worker_processes 2;
worker_cpu_affinity 0101 1010;

#4 个cpu,开启4 个进程
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

#8 核cpu,开启8 个进程
worker_processes  8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

worker_cpu_affinity 理解

Nginx【反向代理负载均衡动静分离】--下

配置实例

Nginx【反向代理负载均衡动静分离】--下

  1. 重新加载nginx/usr/local/nginx/sbin/nginx -s reload
  2. 查看nginx 的worker process 情况

Nginx【反向代理负载均衡动静分离】--下

worker_connection

  1. worker_connection 表示每个worker 进程所能建立连接的最大值,所以,一个nginx 能建立的最大连接数,应该是worker_connections * worker_processes

​ (1)默认:worker_connections: 1024

​ (2)调大:worker_connections: 60000,(调大到6 万连接)

​ (3)同时要根据系统的最大打开文件数来调整.

系统的最大打开文件数>= worker_connections*worker_process 根据系统的最大打开文件数来调整,worker_connections 进程连接数量要小于等于系统的最大打开文件数,worker_connections 进程连接数量真实数量=worker_connections * worker_process

查看系统的最大打开文件数
ulimit -a|grep "open files"
open files (-n) 		65535
  1. 根据最大连接数计算最大并发数:如果是支持http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,而如果是HTTP 作为反向代理来说, 最大并发数量应该是worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端
    服务的连接,会占用两个连接,
看一个示意图

Nginx【反向代理负载均衡动静分离】--下

配置Linux 最大打开文件数

  1. 使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
  2. 新装的linux 默认只有1024,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。
  3. 使用ulimit -n 65535 可即时修改,但重启后就无效了。(注ulimit -SHn 65535 等效ulimit -n 65535,-S 指soft,-H 指hard)
  4. 有如下三种修改方式:
    1. 在/etc/rc.local 中增加一行ulimit -SHn 65535
    2. 在/etc/profile 中增加一行ulimit -SHn 65535
    3. 在/etc/security/limits.conf 最后增加如下两行记录
      1. *soft nofile 65535
      • *hard nofile 65535

在CentOS 中使用第1 种方式无效果,使用第3 种方式有效果,而在Debian 中使用第2 种有效果
5. 参考: https://blog.csdn.net/weixin_43055250/article/details/124980838

搭建高可用集群

Keepalived+Nginx 高可用集群(主从模式)

集群架构图

Nginx【反向代理负载均衡动静分离】--下

解读

1、准备两台nginx 服务器, 一台做主服务器, 一台做备份服务器

2、两台Nginx 服务器的IP 地址, 可以自己配置, 不一定和我的一样(具体可以使用ifconfig 命令)

3、安装keepalived , 保证主从之间的通讯

4、对外提供统一的访问IP(虚拟IP-VIP)

示意图

Nginx【反向代理负载均衡动静分离】--下

具体搭建步骤

搭建高可用集群基础环境

准备两台Linux 服务器192.168.198.130 和192.168.198.131
  1. 可以克隆来完成
  2. 也可以直接拷贝一份
    Nginx【反向代理负载均衡动静分离】--下
在两台Linux 服务器, 安装并配置好Nginx
  1. 安装配置Nginx 步骤前面讲过, 如果你克隆的Linux, 本身就有安装好了Nginx, 直接使用即可.
  2. 验证安装是否成功, 在windows 可以通过IP 访问到Nginx,
  3. 因为我们是拷贝了一份Linux , 而新的Linux 的Ip 已经变化了, 所以需要克隆的Linux的nginx.conf 文件中的IP 地址, 做相应的修改
    Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

在两台Linux 服务器, 安装keepalived
  1. 下载keepalived-2.0.20.tar.gz 源码安装包, https://keepalived.org/download.html

Nginx【反向代理负载均衡动静分离】--下

  1. 上传到两台Linux /root 目录下

Nginx【反向代理负载均衡动静分离】--下

  1. mkdir /root/keepalived
  2. 解压文件到指定目录: tar -zxvf keepalived-2.0.20.tar.gz -C ./keepalived
  3. cd /root/keepalived/keepalived-2.0.20
  4. ./configure --sysconf=/etc --prefix=/usr/local

说明: 将配置文件放在/etc 目录下, 安装路径在/usr/local

  1. make && make install

说明: 编译并安装
8) 如果成功, 就会安装好keepalived 【可以检查一下】

说明: keepalived 的配置目录在/etc/keepalived/keepalived.conf

keepalived 的启动指令在/usr/local/sbin/keepalived

  1. 提示: 两台Linux 都要安装keepalived

完成高可用集群配置

1 、将其中一台Linux( 比如192.168.198.130) 指定为Master : vi/etc/keepalived/keepalived.conf

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

2、将其中一台Linux( 比如192.168.198.131) 指定为Backup( 备份服务器) : vi/etc/keepalived/keepalived.conf

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

3、启动两台Linux 的keepalived 指令: /usr/local/sbin/keepalived

4、观察两台linux 的ens33 是否已经绑定192.168.198.18

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

注意事项和细节

1、keepalived 启动后无法ping 通VIP,提示ping: sendmsg: Operation not permittedhttps://blog.csdn.net/xjuniao/article/details/101793935

2、nginx+keepalived 配置说明和需要避开的坑https://blog.csdn.net/qq_42921396/article/details/123074780

测试

1、首先保证windows 可以连通192.168.198.18 这个虚拟IP
Nginx【反向代理负载均衡动静分离】--下

2、访问nginx 如图

Nginx【反向代理负载均衡动静分离】--下

说明:大家可以看到, 因为192.168.198.130 是Master 他的优先级高, 所以访问的就是192.168.198.130 的Nginx, 同时仍然是支持负载均衡的.

3、停止192.168.198.130 的keepalived 服务, 否则直接关闭192.168.198.130 主机, 再次访问http://192.168.198.18/search/cal.jsp , 这时虚拟IP 绑定发生漂移, 绑定到192.168.198.131 Backup 服务, 访问效果如图
这里直接关闭192.168.198.130 Master 的keepalived 来测试

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

自动检测Nginx 异常, 终止keepalived

实现步骤

1、编写shell 脚本: vi /etc/keepalived/ch_nginx.sh简单说明: 下面的脚本就是去统计ps -C nginx --no-header 的行数, 如果为0 , 说明nginx已经异常终止了, 就执行killall keepalived

#!/bin/bash
        num=`ps -C nginx --no-header | wc -l`
        if [ $num -eq 0 ];then
        killall keepalived
fi

修改ch_nginx.sh 权限

chmod 755 ch_nginx.sh

修改192.168.198.130 主Master 配置文件

指令: vi /etc/keepalived/keepalived.conf

Nginx【反向代理负载均衡动静分离】--下

4、重新启动192.168.198.130 Master 的keepalived , 这时因为Master 的优先级高,会争夺到VIP 优先绑定.

Nginx【反向代理负载均衡动静分离】--下

Nginx【反向代理负载均衡动静分离】--下

5、手动关闭192.168.198.130 Master 的Nginx

Nginx【反向代理负载均衡动静分离】--下

注意观察keepalived 也终止了

Nginx【反向代理负载均衡动静分离】--下

6、再次访问nginx , 发现192.168.198.18 这个虚拟IP 又和192.168.198.131 备份服务器绑定了.

Nginx【反向代理负载均衡动静分离】--下

注意事项

keepalived vrrp_script 脚本不执行解决办法

-打开日志观察

tail -f /var/log/messages

-重启keepalived

systemctl restart keepalived.service文章来源地址https://www.toymoban.com/news/detail-479542.html

–说明一下,曾经出现过文件找不到可以修改执行脚本文件名,不要有_就OK
  1. 如果配置有定时检查Nginx 异常的脚本, 需要先启动nginx ,在启动keepalived ,否则keepalived 一起动就被killall 了
  2. 提醒: 小伙伴们配置时,会遇到各种各样问题,有针对性解决即可

配置文件keepalived.conf 详解

#这里只注释要修改的地方
global_defs {
    notification_email {
    	test@foxmail.com  #接收通知的邮件地址
        }
        notification_email_from Alexandre.Cassen@firewall.loc #发送邮件的邮箱

        smtp_server 192.168.200.1 #smtp server 地址
        smtp_connect_timeout 30

        router_id Node132 #Node132 为主机标识
       vrrp_skip_check_adv_addr

        #vrrp_strict 	#这里需要注释,避免虚拟ip 无法ping 通
        
        vrrp_garp_interval 0
        vrrp_gna_interval 0
    }
    vrrp_instance VI_1 {
    
        state MASTER #主节点MASTER 备用节点为BACKUP
        
        interface ens33 #网卡名称
        
        virtual_router_id 51 #VRRP 组名,两个节点的设置必须一样,指明属于同一VRRP 组
        
        priority 100 #主节点的优先级(1-254 之间),备用节点必须比主节点优先级低
        

         advert_int 1 #组播信息发送间隔,两个节点设置必须一样

            authentication { #设置验证信息,两个节点必须一致
                auth_type PASS
                auth_pass 1111
            }
            virtual_ipaddress { #指定虚拟IP, 两个节点设置必须一样

                192.168.200.16
            }
}

到了这里,关于Nginx【反向代理负载均衡动静分离】--下的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx配置整合:基本概念、命令、反向代理、负载均衡、动静分离、高可用

    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理server。其特点是占有内存少。并发能力强,其并发能力确实在同类型的网页server中表现较好。 Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器

    2024年02月16日
    浏览(43)
  • 03Nginx的静态资源部署,反向代理,负载均衡,动静分离的配置

    部署静态资源 Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源 静态资源: 在服务端真实存在并且能够直接展示的一些html页面、css文件、js文件、图片、视频等资源文件 将静态资源部署到Nginx非常简单,只需要

    2024年02月04日
    浏览(44)
  • Nginx详解 第五部分:Ngnix反向代理(负载均衡 动静分离 缓存 透传 )

    什么是正向代理? 正向代理代理的是客户端 。 客户端设备要访问局域网以外的 Internet 时,需在客户端浏览器中配置代理服务器,然后通过代理服 务器来进行访问,将访问到的局域网以外的 Internet 网站内容返回给客户端,而不是通过局域网中的客 户端设备直接访问。 正向

    2024年02月10日
    浏览(76)
  • Linux-nginx(安装配置nginx、配置反向代理、Nginx配置负载均衡、动静分离)

    关于代理 正向代理: 客户明确知道自己访问的网站是什么 隐藏客户端的信息 目录 关于代理 一、Nginx的安装与配置 1、安装依赖 2、安装nginx (1)上传压缩包到目录 /usr/nginx里面 (2)解压文件 (3)进入到nginx的文件夹下面 进行默认的配置  ./configure (4) Make make install (5)

    2024年01月21日
    浏览(44)
  • Ngnix之反向代理、负载均衡、动静分离

    目录 1. Ngnix  1.1 Linux系统Ngnix下载安装 1.2 反向代理 正向代理(Forward Proxy): 反向代理(Reverse Proxy): 1.3 负载均衡 1.4 动静分离 Nginx是一个高性能的开源Web服务器,它还可以用作反向代理、负载均衡器以及动静分离的工具。 nginx: download 或   上传到服务器后: 进入到/usr/

    2024年02月04日
    浏览(49)
  • Nginx+Tomcat 负载均衡、动静分离

    目录 一、Nginx代理服务器概念 1.正向代理 2.反向代理 二、动静分离 三、负载均衡  四、Nginx七层代理实验 1.部署Nginx服务 2. 部署Tomcat服务  2.1在192.168.88.50 虚拟机上部署双实例 2.2在192.168.88.60 上部署Tomcat服务器3 3.动静分离配置 3.1Tomcat1 server 配置 3.2 Tomcat2 server 配置 3.3Tomc

    2024年02月08日
    浏览(50)
  • Nginx+Tomcat负载均衡、动静分离群集

    Nginx是一款非常优秀的HTTP服务器软件,支持高达50000个并发连接数的响应、拥有强大的静态资源处理能力、运行稳定、内存和CPU等系统资源消耗非常低 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力 Nginx实现负载

    2024年02月09日
    浏览(43)
  • Nginx+Tomcat实现负载均衡、动静分离

    目录 一、Nginx负载均衡实现原理 1.Nginx 实现负载均衡是通过反向代理实现  2、Nginx配置反向代理主要参数 3、动静分离原理  4、Nginx静态处理优势 5、并发量和吞吐量计算 二:7层反向代理          1、环境准备 ​2、配置Nginx Server 3、tomcat1 和tomcat2配置 4、 搭建tomcat3 5、设置

    2024年02月05日
    浏览(56)
  • “深入理解Nginx的负载均衡与动静分离“

    在现代互联网应用中,高性能和可扩展性是至关重要的。Nginx作为一款高性能的Web服务器和反向代理服务器,被广泛应用于各种规模的网站和应用程序中。本文将深入探讨Nginx的负载均衡和动静分离的原理与实践,帮助读者更好地理解和应用这些功能。 Nginx是一款轻量级的高性

    2024年02月06日
    浏览(44)
  • tomcat的负载均衡、动静分离(nginx联动)

    动静分离: 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟: 代理服务器:30 tomcat动态页面:21、22 代理服务器:   proxy_pass http://tomcat;         proxy_set_header HOST $host;         proxy_set_header X-Real-IP $remote_a

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包