目录
- nginx实现负载均衡load balance
- 相关算法
- 负载均衡https的访问
- 后端的real server是否知道真正访问的用户的IP地址
- 健康检查
- 提升负载均衡的并发数量
- 七层负载均衡和四层负载均衡
- 七层负载均衡
- 四层负载均衡
- 四层和七层的区别
- 502错误
nginx实现负载均衡load balance
准备:3台服务器,一台做负载均衡器,另外两台做web服务器,建议编译安装nginx
服务器 | IP |
---|---|
LB | 192.168.232.161 |
web1 | 192.168.232.162 |
web2 | 192.168.232.163 |
1、修改LB的配置文件
用于cpu的核心是两个,所以可以修改配置文件中的进程数为2,并将应该worker的并发数修改为2048
worker_processes 2;events {worker_connections 2048;
}
2、负载均衡器的配置
http {upstream chenapp1 {server 192.168.232.162;server 192.168.232.163;}server {listen 80;server_name localhost;location / {proxy_pass http://chenapp1;}
}
修改web1和web2的页面显示,然后在浏览器中输入LB服务器的网址,反复刷新可以看见不同的页面。
这个时候web服务器的日志access.log中记录的IP就是负载均衡服务器的 IP
相关算法
upstream chenapp1 {ip_hash; # 用户访问了某一个服务器的页面,就会一直访问那个页面least_conn; # 最小链接数(轮询),每次刷新会将web服务器的页面轮流展示# 加上权重值,权重值大的那个就会访问的更多server 192.168.232.162 weight=5;server 192.168.232.163 weight=2;}
负载均衡https的访问
server {listen 443 ssl;server_name www.sanchuangedu.com;ssl_certificate 8905404_sanchuangedu.cn.pem ; # pem文件和key文件都需要下载证书ssl_certificate_key 8905404_sanchuangedu.cn.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on; location / { #root html;#index index.html index.htm;proxy_pass http://chenapp1;} }
后端的real server是否知道真正访问的用户的IP地址
web服务器的日志access.log中记录的IP是负载均衡服务器的 IP,不知道用户的IP地址
解决方法
-
后端real server不使用realip模块
-
在负载均衡器上修改http请求报头部字段,添加一个X-Real-IP字段
server {listen 80;server_name localhost;location / {proxy_pass http://chenapp1;proxy_set_header X-Real-IP $remote_addr;}
-
在后端real server上使用这个X-Real-IP字段
http {include mime.types;default_type application/octet-stream;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"';access_log logs/access.log main;
现在就可以在
/usr/local/scnginx99/logs/access.log
文件中看到client的IP了
-
-
后端real server使用realip模块
前提条件:在后端backend server上编译安装nginx的时候,
--with http_realip_module
开启相关功能
backend server是如何知道前端client的IP地址的
负载均衡器在应用层把要发送给bakend server的http协议添加新的IP存储字段x_real_ip
健康检查
查看web服务器是否还存活
-
主动检查。负载均衡服务器主动检查web服务器,需要安装nginx plus
-
被动检查。当client发请求给LB,然后LB再去转发请求给后端的real server,这个时候如果后端的服务器出现问题,LB就发现了。
upstream backend {server 192.168.232.162server 192.168.232.163 max_files=3 fail_timeout=30s }
fial_timeout
:设置必须多次尝试失败才能将服务器标记为不可用时间,以及将服务器标记为不可用时间(默认10s)
max_fails
:设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认1次)
backup
:备份当其他的服务器都不提供服务的时候,再启用这台服务器提供服务
slow_start
:慢启动
down
:将上游的服务器标识为不可用,不会再发送任何请求给这台服务器
提升负载均衡的并发数量
-
增加服务器数量
-
参数优化
worker_processes 2; worker_connections 2048;在命令行允许一个进程可以打开的连接数量 ulimit -n 1000000
七层负载均衡和四层负载均衡
七层负载均衡
nginx是根据http协议来做负载均衡的,http协议工作在应用层,是web服务的一部分,按照OSI七层网络模型来封装和解封装,属于第七层
四层负载均衡
在传输层完成所有的工作,根据端口号来区分不同的业务
实现四层负载均衡:
修改LB的nginx.conf
stream {upstream dns_servers {least_conn;server 192.168.136.130:53;server 192.168.136.131:53;server 192.168.136.132:53;}upstream web_servers {server 192.168.232.162:80;server 192.168.232.163:80;}server {listen 53udp;proxy_pass dns_servers;}server {listen 80;procy_pass web_servers;}
}
events {worker_connections 1024;
}
四层和七层的区别
七层负载均衡:
1、基于应用层
2、支持HTTP协议
3、效率低
4、可以实施应用层安全策略
四层负载均衡:
1、基于传输层,关注IP地址和端口号
2、支持http、MySQL、DNS、ftp等协议
3、效率高
4、无法执行高级内容处理,如HTTP请求的URL路由或请求头修改
502错误
原因:所有的backend server都挂掉了