nginx - 负载均衡配置-负载均衡策略

article/2025/10/28 16:27:22

目录

知识点1:网站流量分析指标

什么是pv?

什么是uv?

什么是IP?

知识点2:正向代理和反向代理

知识点3:负载均衡实验

什么是负载均衡?

IP地址规划:

实验拓扑图

知识点4:负载均衡策略

1、请求轮询

2、增加权重

 3、最少连接数

4、ip_hash 策略 

知识点5:获取访问机器的真实ip地址

1、在负载均衡器上修改http请求报文头部字段,谈价一个X_Real-IP字段

2、修改web服务器的nginx配置文件,在日志格式里面添加http_x_real_ip字段

 知识点6:nginx的四层负载均衡和七层负载均衡

七层负载均衡:

四层负载均衡 

nginx四层负载均衡和七层负载均衡的区别

知识点7:lvs负载均衡和nginx负载均衡的区别

层数的区别

效率的区别


知识点1:网站流量分析指标

什么是pv?

PV(page view),即页面浏览量,通常是衡量一个网络新闻频道或网站的主要指标

什么是uv?

UV(unique visitor),指的是访问某个站点或点击某个网站的不同ip地址的人数

在同一天内,uv只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数

什么是IP?

IP表示拥有特定唯一IP地址的计算机访问您的网站的次数,

 ###########################################################################################

知识点2:正向代理和反向代理

正向代理:

        代理的对象为客户

        代理清楚知道客户要访问的目标

反向代理:

        代理的对象为服务器

        代理不知道客户要访问的目标

  

  ###########################################################################################

知识点3:负载均衡实验

什么是负载均衡?

负载均衡就是将用户的访问请求,平均的分配给后端服务器

IP地址规划:

load balance 负载均衡服务器:192.168.44.132

web1 真实web服务器 :192.168.44.166

web2 真实web服务器:192.168.44.141

web3 真实web服务器:192.168.44.205

实验拓扑图

 首先在web1,web2,web3,三台web服务器安装nginx软件,使用一键安装nginx脚本安装

一键安装nginx脚本:

[root@web1 ~]# cat onekey_install_nginx.sh #!/bin/bash#解决软件的依赖关系,需要安装的软件包
yum install epel-release -y
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make psmisc net-tools lsof vim geoip geoip-devel wget -y#新建liming用户和组
id  liming || useradd liming -s /sbin/nologin#下载nginx软件
mkdir  /liming99 -p
cd /liming99
wget  https://nginx.org/download/nginx-1.21.6.tar.gz#解压软件
tar xf nginx-1.21.6.tar.gz 
#进入解压后的文件夹
cd nginx-1.21.6#编译前的配置
./configure --prefix=/usr/local/scliming99  --user=liming --group=liming  --with-http_ssl_module   --with-threads  --with-http_v2_module  --with-http_stub_status_module  --with-stream  --with-http_geoip_module --with-http_gunzip_module#如果上面的编译前的配置失败,直接退出脚本
if (( $? != 0));thenexit
fi
#编译
make -j 2
#编译安装
make  install#修改PATH变量
echo  "PATH=$PATH:/usr/local/scliming99/sbin" >>/root/.bashrc
#执行修改了环境变量的脚本
source /root/.bashrc#firewalld and selinux#stop firewall和设置下次开机不启动firewalld
service firewalld stop
systemctl disable firewalld#临时停止selinux和永久停止selinux
setenforce 0
sed  -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config#开机启动
chmod +x /etc/rc.d/rc.local
echo  "/usr/local/scliming99/sbin/nginx" >>/etc/rc.local#修改nginx.conf的配置,例如:端口号,worker进程数,线程数,服务域名sed  -i '/worker_processes/ s/1/2/' /usr/local/scliming99/conf/nginx.conf
sed  -i  '/worker_connections/ s/1024/2048/' /usr/local/scliming99/conf/nginx.conf
sed  -i -r '36c \\tlisten  80;' /usr/local/scliming99/conf/nginx.conf
sed  -i -r '37c \\tserver_name www.liming.com;' /usr/local/scliming99/conf/nginx.conf#killall nginx进程
killall -9 nginx#启动nginx
/usr/local/scliming99/sbin/nginx

修改web服务首页index.html

[root@web1 html]# cat index.html
this is nginx-web1  192.168.44.166
[root@web2 html]# cat index.html 
this is nginx-web2  192.168.44.141
[root@web3 html]# cat index.html 
this is nginx-web3  192.168.44.205

修改load balance 负载均衡服务器nginx的配置文件nginx.conf

在http块里面定义一个负载均衡器,然后创建一个路由规则,使用创建的upstream节点

    # 定义上游服务器集群,定义一个负载均衡器upstream myweb1{server 192.168.44.166;server 192.168.44.141;server 192.168.44.205;}server {listen       80;location / {# 使用myweb1分配规则,即刚才定义的upstream节点proxy_pass http://myweb1;

 修改完配置文件以后刷新一下nginx服务,然后再访问load balance服务器就会将流量采用轮询的方式分发到三台真实web服务器上面

############################################################################################

知识点4:负载均衡策略

1、请求轮询

依次转发给配置的服务器,即上个实验,默认是以轮询的方式来分发流量访问

2、增加权重

使用服务器权重,还可以进一步影响ngixn负载均衡算法,谁的权重越大,分发到的请求就越多

修改负载均衡服务器配置文件

    # 定义上游服务器集群,定义一个负载均衡器upstream myweb1{server 192.168.44.166 weight=3;server 192.168.44.141 weight=1;server 192.168.44.205 weight=1;}server {listen       80;location / {# 使用myweb1分配规则,即刚才定义的upstream节点proxy_pass http://myweb1;}

 接下来访问负载均衡服务器,它会根据权重的多少来分发流量,权重越大,分发到的请求就越多

 ############################################################################################

 3、最少连接数

在连接负载最少的情况下,nginx会尽量避免过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载

轮询法不能识别在给定的时间里保持了多少连接,因此可能发生,服务器B服务器收到的连接比服务器A少但是它已经超载,比如B服务器虽然收到的连接数少,但是都保持连接,没有断开,A服务器虽然收到的连接数多,但是实际大都断开连接,这时候就需要优先选择活跃连接数最少的服务器

    # 定义上游服务器集群,定义一个负载均衡器upstream myweb1{least_conn;server 192.168.44.166;server 192.168.44.141;server 192.168.44.205;}server {listen       80;location / {# 使用myweb1分配规则,即刚才定义的upstream节点proxy_pass http://myweb1;}

 ############################################################################################

4、ip_hash 策略 

每个请求按访问的ip分配hash,即一个客户端第一次请求nginx后,会分配到hash,下次改客户端请求 ##的结果还是一样的,不会改变,解决session问题。

    # 定义上游服务器集群,定义一个负载均衡器upstream myweb1{ip_hash;server 192.168.44.166;server 192.168.44.141;server 192.168.44.205;}server {listen       80;location / {# 使用myweb1分配规则,即刚才定义的upstream节点proxy_pass http://myweb1;}

 ############################################################################################

知识点5:获取访问机器的真实ip地址

当我们使用负载均衡服务器来分发流量以后,在真实web服务器上的访问日志是谁的ip?负载均衡服务器的还是真实访问ip的?

可以看到,web1机器上nginx的访问日志是负载均衡服务器的ip地址,那么如何让web服务器知道真实访问机器的IP地址? 

让web服务器日志显示真实访问机器的IP

1、在负载均衡器上修改http请求报文头部字段,谈价一个X_Real-IP字段

将nginx内部的remote_addr 这个变量的值,赋值给X_Real-IP这个变量,X_Real-IP这个变量会在http协议的请求报文里面添加一个X_Real-IP的字段,后端的real server服务器上的nginx就可以读取这个字段的值

    server {listen       80;location / {# 使用myweb1分配规则,即刚才定义的upstream节点proxy_pass http://myweb1;proxy_set_header X-Real-IP $remote_addr;}

2、修改web服务器的nginx配置文件,在日志格式里面添加http_x_real_ip字段

    log_format  main  '$remote_addr - $http_x_real_ip  $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

修改配置文件以后重新启动服务

[root@web1 conf]# nginx -t
nginx: the configuration file /usr/local/scliming99/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/scliming99/conf/nginx.conf test is successful
[root@web1 conf]# nginx -s reload

测试访问负载均衡服务器后查看日志文件

 

  ############################################################################################

 知识点6:nginx的四层负载均衡和七层负载均衡

七层负载均衡:

七层负载均衡主要工作在网络七层ISO协议的第七层,即应用层。由于在应用层主要是处理对应的应用层协议的相关数据,如HTTP协议,而无法操作传输层TCP连接相关细节,故在七层负载均衡当中,负载均衡器主要是基于应用层协议的相关数据来进行请求转发,

四层负载均衡 

所谓四层就是基于IP+端口的负载均衡,它通过用户请求的端口来决定将请求转发至哪台后端服务器。就是通过第三层(网络层)的IP地址并加上四层(传输层)的端口号,来决定哪些流量需要做负载均衡。对需要负载均衡的流量进行NAT转换,然后转发至后端服务器节点,并记录这个TCP或者UDP的流量是由哪台后端服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

nginx四层负载均衡和七层负载均衡的区别

七层负载均衡是工作在第七层,只能给web应用,使用http协议的

四层负载均衡是根据端口进行转发的,支持的服务数量比七层多

四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的要高。
四层负载均衡不识别域名,而七层负载均衡识别域名。

   ############################################################################################

知识点7:lvs负载均衡和nginx负载均衡的区别

层数的区别

lvs只支持四层负载均衡

nginx支持四层和七层负载均衡

效率的区别

lvs的效率更高,lvs已经在内核里内置了,不需要安装,数据通过网卡解封装后,经过kernel space,然后lvs直接调用

nginx工作在user space,nginx需要等内核将数据处理以后送到user space,然后nginx再处理,所以lvs比nginx工作少一层,lvs效率较高

 

 

############################################################################################

 


http://chatgpt.dhexx.cn/article/aunFw0eX.shtml

相关文章

负载均衡

流量负载均衡介绍 1 负载均衡产生的背景 LB(Load Balance,负载均衡)是一种集群技术,它将特定的业务(网络服务、网络流量等)分担给多台网络设备(包括服务器、防火墙等)或多条链路&a…

Ribbon七种负载均衡策略详解

Ribbon是什么? 主要负责请求分发,例如一个服务节点集群:六台服务器部署着订单服务,用户请求过来了就要根据不同的负载策略分发请求到不同机器上,起到一个缓解请求压力的作用。其自身不会发起请求,这个在源…

负载均衡有哪些常见策略?

分析&回答 轮循 Round Robin 这种方法会将收到的请求循环分配到服务器集群中的每台机器,即有效服务器。如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量 以及负载相同的应用程序。如果所有的服务器有相同或者相近的性能那么选…

负载均衡策略-七种策略

LoadBalancer LoadBalancer下面更底层的7种内置的负载均衡策略 RandomRule - 随性而为 RoundRobinRule - 按部就班 RandomRule是随性而为挑选节点,RobinRule却按部就班从一个节点一步一步地向后选取节点,既不会跳过一个,也不会原地踏步&am…

【Nginx】Nginx服务器之负载均衡策略(6种)

一、关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。 二、Nginx负载均衡策略 负载均衡用于从“upstream”模块…

负载均衡策略图文详解

一、「负载均衡」是什么 正如题图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是「负载均衡」,它的本质和「分布式系统」一样,是「分治」。 如果大家习惯了开车的时候用一些导航软件,我们会发现…

常用负载均衡及策略图解

文章目录 一、负载均衡二、负载均衡模型分类三、CDN负载均衡四、LVS负载均衡4.1 LVS 支持的三种模式4.1.1 DR 模式4.1.2 TUN 模式4.1.3 NAT 模式 4.2 LVS 基于 Netfilter 的框架实现 五、负载均衡策略是什么六、常用负载均衡策略图解6.1 轮询6.2 加权轮询6.3 最少连接数6.4 最快…

关于0范数、1范数和无穷范数

若 则p范数 p取0时对应0范数,p取1时对应1范数,p取无穷大时对应无穷范数 //LaTeX真的好用 【注意理解】当p取无穷大时,最终只与元素中绝对值最大的元素有关,证明如下:

向量和矩阵的 1范数、2范数

1.向量的范数:0范数,向量中非零元素的个数。 1范数,为绝对值之和。 2范数,就是通常意义上的模。 无穷范数,就是取向量的最大值。 但是向量的范数和矩阵的范数关系不大,百度了好久也没看到狠心的东西&…

向量的范数norm:1范数、2范数、无穷范数;矩阵的行范数、列范数

0范数: 向量中非零元素的个数。1范数: 为绝对值之和。2范数: 通常意义上的模。无穷范数:取向量的最大值。 转自:范数对于数学的意义?1范数、2范数、无穷范数

向量的1范数,2范数,无穷范数,KNN中的Lp距离

L-0范数:用来统计向量中非零元素的个数。 L-1范数:向量中所有元素的绝对值之和。 L-2范数:欧式距离。 L-∞范数:计算向量中的最大值。 你也可以这样理解 1-范数: ║ x ║ 1 │ x 1 │ │ x 2 │ … │ x n │ ║…

范数与模

复数的模 向量的范数 范数,在机器学习中通常用于衡量一个向量的大小,范数的定义如下: P>1 比如如下常见的范数 1-范数:║x║1│x1││x2│…│xn│ (曼哈顿距离) 2-范数&…

求矩阵的1,和2范数

1.向量的范数:0范数,向量中非零元素的个数。 1范数,为绝对值之和。 2范数,就是通常意义上的模。 无穷范数,就是取向量的最大值。 但是向量的范数和矩阵的范数关系不大,百度了好久也没看到狠心的东西&…

矩阵L2,1范数及矩阵L2,p范数的求导

常见的矩阵范数有L1,L2, ∞ 范数,F范数和引申出的L2,1范数。而在机器学习的特征选择中,利用选择矩阵的范数对选择矩阵进行约束,即是正则化技术,是一种稀疏学习。 L0 , L1 向量范数 L0 范数 L0 …

计算方法 | 范数(向量:1范数、2范数、无穷范数;矩阵:行范数、列范数)

0范数: 向量中非零元素的个数。1范数: 为绝对值之和。2范数: 通常意义上的模。无穷范数:取向量的最大值。 行范数:矩阵中每行绝对值之和的最大值列范数:矩阵中每列绝对值之和的最大值 详细研究请访问&#…

到底什么是范数?什么是0范数、1范数、2范数?区别又是什么?

其实我的专业不是数学专业,只不过在阅读paper时,我们会经常看到0范数或者1范数这些范数问题。本文就来分析看看到时什么是范数?什么是0范数、1范数、2范数?它们的区别又是什么?为了方便某些着急的people,先…

向量和矩阵的各种范数比较(1范数、2范数、无穷范数等等)

一、向量的范数 首先定义一个向量(一般用列向量表示)为: 1.1 向量的1范数 向量的1范数即:向量的各个元素的绝对值之和,上述向量a的1范数结果就是:29,MATLAB代码实现为:norm(a,1&am…

未为python配置解释器_Python环境安装,解释器配置

下载安装完Pycharm后,创建一个py文件编写代码会提示No Python interpreter configured for the project,这是提示要配置解释器,可以去官网下载安装。 从官网下载https://www.python.org/downloads/windows/ 以我的电脑为例,选择64…

Python开发环境安装及配置

提示:在Python中,一切皆为对象 文章目录 前言初始PythonPyCharm开发环境主要包括以下特点:一、Python自带编辑器IDLE使用二、Anaconda集成环境安装及使用Anaconda环境创建 三、PyCharm环境安装及使用 前言 提示:这里可以添加本文…