目录
- 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都挂掉了