nginx实现负载均衡load balance

目录

    • 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地址

解决方法

  1. 后端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了

  2. 后端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.162
    	server 192.168.232.163 max_files=3 fail_timeout=30s
    }
    

    fial_timeout:设置必须多次尝试失败才能将服务器标记为不可用时间,以及将服务器标记为不可用时间(默认10s)
    max_fails:设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认1次)
    backup:备份当其他的服务器都不提供服务的时候,再启用这台服务器提供服务
    slow_start:慢启动
    down:将上游的服务器标识为不可用,不会再发送任何请求给这台服务器

提升负载均衡的并发数量

  1. 增加服务器数量

  2. 参数优化

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

你可能感兴趣的:(Nginx,nginx,负载均衡,运维)