首页 > 系统相关 >nginx负载均衡二

nginx负载均衡二

时间:2024-03-31 20:55:35浏览次数:22  
标签:10.0 负载 http ip server nginx proxy 均衡

2.反向代理(负载均衡的重要参数)

2.反向代理(负载均衡的重要参数)


# 转发http请求的,明确你的后端是运行在基于http协议上。

proxy_pass  请求转发的目标地址;

proxy_pass  http://127.0.0.1:8888;

# 部署PHP网站
# 后端php-fpm此时配置文件/etc/php-fpm.d/www.conf
# 人家说该服务,是以fastcgi这个协议运行(http  > fastcgi > php-fpm)
fastcgi_pass  php-fpm运行的地址;
web-7 (nginx+php-fpm)

fastcgi_pass  127.0.0.1:9000;

这里的俩种协议配置语法,能看懂扣  1,看不懂 2;
请求转发的


# 关于http协
# 你要记住,除了要吧请求转发过去,还得保留着客户端原始的信息数据
# 如何保留这个数据,也是基于不同的协议来设置的


# 先看如下的转发参数,都是基于http协议来的,因为它是以proxy_pass开头的参数
# 和proxy_pass参数对应起来。 
# 你在做负载均衡转发参数的时候,如果不加这些参数,
# nginx代理机器,就会丢失client的信息
# 目标server也拿不到client的信息了
# 你公司的网站架构,是 
client  >  nginx机器    >    后端的机器
如果client的信息全部丢失,你无法再后端获取client的信息
你要在后端client做一些基于ip,基于用户身份的验证,那就全部没法验证了,因为http客户端信息丢失了。。。。
简单理解,就是 如 remote_addr那个信息,x_forwarder_for 参数,获取client真实ip

真实ip 是 10.0.0.1  >  nginx代理 10.0.0.5  >   10.0.0.7


proxy_pass 结合着用;

proxy_set_header Host       $http_host; 
lb服务器将用户访问网站的hosts信息转发给后端节点
浏览器访问 域名的形式 ,  请求头部信息
host: 域名xxxx

【这里的关于http协议的请求转发,以及客户端信息转发,参数能听懂的】
结合者proxy_pass  proxy_set_header  这些参数
能理解 扣 6  不懂 7 


# nginx的代理转发参数,就是proxy_pass
# 四层转发
proxy_pass  ip:port;

# 基于七层的,http协议转发
proxy_pass  http://ip:port; 

【这两句话,看懂扣 1,不懂 2】




proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for ;
将用户真实的ip传递给后端的节点

其他的就是关于性能的参数,你可以不加,直接使用nginx默认的设置,也没问题,
关于性能的参数,不加,比你乱加,要稳定的多!这是线上的经验。

proxy_connect_timeout 60s;
peoxy和server的连接超时,要求不超过75s;

proxy_send_timeout 60s;
proxy等待server回传数据的超时时间

proxy_read_timeout 60s;
proxy等待server响应的超时;

proxy_buffering on | off;
把server返回的数据先放入缓冲区,然后再返回给client,一边收数据,一边传递,而不是全部接收完再传递。

proxy_buffers  4 128k;
缓冲区的容量参数;

nginx四层负载均衡

四层是没有应用层协议的,基于ip:port找到目标的地址。

3.nginx可以同时实现
- 四层负载均衡,基于ip:port的转发,配置如下
# nginx配置文件
# 【无须关于http的请求参数了】

[root@lb-5 /etc/nginx]#cat /etc/nginx/nginx.conf 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

# 四层基于stream{}这个模块即可,无须http协议相关的

stream {
    upstream mysql_pool {
		# 目标机器,后端的ip:port  以及负载均衡的参数
      server 172.16.1.51:3306  max_fails=3 fail_timeout=30s;
      server 172.16.1.52:3306  max_fails=3 fail_timeout=30s;
    }
	# 定义虚拟主机,nginx最基本的功能,就是虚拟主机,得接收请求
	# 访问这个nginx代理机器的3306端口,请求就进入如下
    server {
            listen 0.0.0.0:3306;
            proxy_pass mysql_pool;
    }


}

# 描述下请求转发过程

client 发出登录mysql请求
mysql -uroot -p -h10.0.0.5 -P3306
登录请求发给了代理服务器
↓
nginx四层代理服务器,请求轮询发给后端2个节点
↓ 
一次看到 51机器数据
一次看到52机器数据

对于四层的转发,使用mysql的测试,用了它的3306默认端口
比如 比如数据库的redis,6379,四层转发,用法和这个一样,就是端口不同。

七层负载均衡配置(http)

主配置文件,如下的http协议的配置都应该在


/etc/nginx/nginx.conf
# 打标签
http {

	xxxxx;
    
    include /etc/nginx/conf.d/*.conf;
  

}

[root@lb-5 ~]#cat  /etc/nginx/conf.d/proxy.conf 
# 定义一组服务器 nginx反向代理,请求转发给一组服务器
# client是不知道,本次请求,到底是 7 给你返回的,还是8返回的
# client 数据都是 nginx这个代理,发给他的
# 因此实现了反向代理+负载均衡的效果
# 这里的nginx七层反向代理负载均衡,看懂扣 6,不懂7 


upstream  web-pools {
    server 172.16.1.7:8080;
    server 172.16.1.8:8080;
}

server {
    listen 80;
    # 当你访问 
    #   http://wordpress.yuchaoit.cn:80/
    #   协议 http://        域名wordpress.yuchaoit.cn 端口80  
    #  path网页资源路径 /
    
    #  这个http 的url协议规范,看懂扣 1 不懂 2
    # http://wordpress.yuchaoit.cn:80/
    server_name wordpress.yuchaoit.cn;
    	
    location / {
        proxy_pass http://web-pools;
        include /etc/nginx/proxy_params.conf;
    }
}

才能协同工作。

负载均衡策略

rr轮询(round-robin)

# 编写地址池
upstream web-pool{
	# 默认这么写,就是轮训模式,没加任何其他的参数
	server 172.16.1.7;
	server 172.16.1.8;

}

# 以及转发参数
# 创建虚拟主机文件,实现代理转发功能
# 大伙能看懂,调试配置文件,解决错误问题的过程吗?
# 能 3  不能 4

server {

	listen 22555;
	server_name _;
	location / {
		proxy_pass http://web-pool;
		include /etc/nginx/proxy_params;
	}
}

Weight(权重轮询)

upstream backend {
server 192.168.178.122 weight=1;
server 192.168.178.121 weight=2;
}

ip_hash

MD5sum 能够得到字符串的唯一值,对它进行哈希
你client每次来访问,得有client的ip地址
针对这个ip进行哈希算法,求值,nginx底层做的,得到一个唯一值
后续这个ip继续访问nginx,nginx就讲这个ip客户端的请求,固定的发给后端的一个节点。

upstream chaoge_backend {
ip_hash;
server 192.168.178.121;
server 192.168.178.122;

}

url_hash

根据访问url的hash结果分配,同一个url固定发给一个后端节点。

学习查看linux的tcp连接情况(ss命令)

ss -an     或者netstat -an 
查看当前机器的所有socket连接情况(ip:port)的连接数有多少个
# -a 显示当前服务器,所有的socket

#  -n, --numeric       don't resolve service names
# 只显示ip:port 而不是显示主机名,让你跟更清晰,ip地址是谁

netstat命令

[root@web-7 ~]#netstat -an |grep -i estab
Active Internet connections (servers and established)
tcp        0     52 10.0.0.7:22             10.0.0.1:53292          ESTABLISHED
tcp        0      0 10.0.0.7:22             10.0.0.1:58119          ESTABLISHED
Active UNIX domain sockets (servers and established)


[root@web-7 ~]#ss -an |grep -i estab | grep '10.0.0.7:22'
tcp    ESTAB      0      52     10.0.0.7:22                 10.0.0.1:53292              
tcp    ESTAB      0      0      10.0.0.7:22  

负载均衡参数

backup参数

upstream web-pool{
# 默认是轮训算法
# 还可以针对每一个节点,设置不同的功能参数
# backup 被标记为backup参数的服务器,只有服务器池内的其他机器都无法访问了,才会使用该该机器。
	server 172.16.1.7;
	server 172.16.1.8 backup;
}


down参数

down
标记这个机器停止使用了。

某个服务器,要停掉,但是也不能立即删除配置文件,down让它下线,不再接收负载均衡的请求。


[root@lb-5 /etc/nginx/conf.d]#cat proxy-web.conf 
# 编写地址池
upstream web-pool{
	# 默认这么写,就是轮训模式,没加任何其他的参数
	server 172.16.1.7 down;
	server 172.16.1.8;
}


[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8
[root@master-61 ~]#curl 10.0.0.5:22555
~~~~~~~~~~~web8

其他参数

max_failes
允许请求失败的次数,一般和fail_timeout结合用
nginx请求转发给某个节点,如果它故障,重试次数

fail_timeout
经过max_failes失败后服务暂停的时间。
重试超时时间

nginx新版本中,默认直接就是健康检查,且延迟很短,后端挂掉,立即请求转发给健康节点,在轮训实验中看过了。



down
标记这个机器停止使用了。

max_conns
限制最大接收的连接数。

图解四层负载均衡,七层负载均衡


标签:10.0,负载,http,ip,server,nginx,proxy,均衡
From: https://www.cnblogs.com/btcm409181423/p/18107231

相关文章

  • Nginx 配置,自定义日志格式 log_format
    文章目录前沿配置Nginx重点解析前沿nginx记录日志,太方便。这里提供一种小技巧。配置Nginxserver{listen8080;server_namelocalhost;location/proxy/server{default_typetext/html;return200"success";}......
  • 【Docker】使用 Docker 主机启动 Nginx 服务器的步骤详解
    文章目录步骤一:安装Docker步骤二:拉取Nginx镜像步骤三:启动Nginx容器步骤四:访问Nginx服务器步骤五:管理Nginx容器总结在本文中,我们将介绍如何使用Docker在主机上启动Nginx服务器。Nginx是一个高性能的HTTP和反向代理服务器,经常用于托管网站和Web应用。通过Docker,我们可......
  • helm 安装 nginx-ingress-controller v1.10.0
    1、说明准备nginx-ingress三种不同的部署模式Deployment+LoadBalancer采用deployment进行部署nginx-ingress-controller,需要创建一个type:LoadBalancer的service进行关联nginx-ingress-controller这组pod。通常是在使用公有云进行创建负载均衡器并绑定公网地址。只要将域名......
  • Nginx(面试)
    NGINX速记问答Q什么是Nginx?它的主要特点是什么?ANginx是一个高性能的开源Web服务器和反向代理服务器。它以高并发、低内存消耗和高稳定性著称。QNginx与ApacheWeb服务器有什么区别?ANginx与Apache相比,更适用于处理高并发和静态内容。它使用异步、事件驱动的架构,占用......
  • 下载阿里云服务器的SSL证书,并部署到Nginx服务中
    环境说明linux系统版本:lsb_release-a  JDK版本:1.8  不同的操作系统以及软件版本,可能会遇到不一样的问题,一定要注意版本问题。.1.登录阿里云服务器,下载SSL证书。  选择SSL证书->免费证书->下载。  选择Nginx证书进行下载,因为真实访问的时候,都是访问ng......
  • windows下nginx-rtmp-module的编译方法
    ForewordLinux为当前nginx添加rtmp模块非常的方便,sudo./configure--add-module+sudomake就完事儿了,但是windows比较复杂,没有包管理器,所以各个模块的源码要自己找,下面是我在windows11下的nginxwithrtmpmodule的编译记录。编译器工具链大概有msvctoolchain,perl......
  • 深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的
    大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用39-深度学习模型训练过程中数据均衡策略SMOTE的详细介绍,以及SMOTE的算法原理与实现,本文介绍了一种用于处理分类数据不平衡问题的过采样方法——SMOTE算法。SMOTE算法通过在少数类的样本之间插值来创建新的样本,从而增加少......
  • 深入理解nginx mp4流媒体模块[下]
    深入理解nginxmp4流媒体模块[上]深入理解nginxmp4流媒体模块[中]  以下对各个mp4的加载过程依次进行分析。1.加载ftypatom  加载ftypatom的逻辑由ngx_http_mp4_read_ftyp_atom函数来完成,其最主要的逻辑就是将文件中读取到的ftypatom放到ngx_http_mp4_file_t上......
  • 转载:Linux 负载均衡
    /procfs运行时文件系统loadavg:算法与内核实现2.2内核基础本文主要关注的是与计算load有关的几个字段,//kernel/sched/sched.h//Thisisthemain,per-CPUrunqueuedatastructure.structrq{unsignedintnr_running;//runningtask数量struct......
  • 用docker创建nginx反向代理tcp流量
    有这样一个需求,需要反向代理一个tcp连接,我打算用nginx来做,比较简单的实现掉./conf/nginx.conf配置文件usernginx;worker_processesauto;error_log/var/log/nginx/error.lognotice;pid/var/run/nginx.pid;events{worker_connections1024;}......