当前位置: 首页 > news >正文

nginx实现负载均衡load balance

目录

    • nginx实现负载均衡load balance
      • 相关算法
      • 负载均衡https的访问
      • 后端的real server是否知道真正访问的用户的IP地址
      • 健康检查
      • 提升负载均衡的并发数量
      • 七层负载均衡和四层负载均衡
        • 七层负载均衡
        • 四层负载均衡
        • 四层和七层的区别
        • 502错误

nginx实现负载均衡load balance

准备:3台服务器,一台做负载均衡器,另外两台做web服务器,建议编译安装nginx

服务器IP
LB192.168.232.161
web1192.168.232.162
web2192.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.162server 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都挂掉了

http://www.lryc.cn/news/160343.html

相关文章:

  • 淘宝订单接口:连接消费者与商家的桥梁
  • 数据结构-第一期——数组(Python)
  • 八 动手学深度学习v2 ——卷积神经网络之卷积+填充步幅+池化+LeNet
  • SparkCore
  • 配置 Windows 系统环境变量
  • 【计算机视觉】图片文件格式的讲解
  • 2023最全的性能测试种类介绍,这6个种类特别重要!
  • 代码随想录算法训练营19期第43天
  • 微信小程序wx.previewImage实现图片预览
  • Java实现Modbus读写数据
  • C++11新特性⑤ | 仿函数与lambda表达式
  • 解决websocket不定时出现1005错误
  • 文章内容生成随机图像,并将这些图像上链
  • l8-d9 UDP通信实现
  • MongoDB复杂聚合查询与java中MongoTemplate的api对应
  • WireShark抓包工具的安装
  • 审计智能合约的成本是多少?如何审计智能合约?
  • 9.7 校招 内推 面经
  • 【网络编程】IO多路复用
  • MySQL与postgreSQL数据库的区别
  • 单片机电子元器件-按键
  • Nacos docker实现nacos高可用集群项目
  • 基于Dubbo实现服务的远程调用
  • Redis事务的理解
  • PostgreSQL安装异常,服务无法启动导致创建服务器超时
  • 汽车电子系统网络安全解决方案
  • 切片机制和MR工作机制
  • 【postgresql 基础入门】基础架构和命名空间层次,查看数据库对象再也不迷路
  • 是的,决定放弃算法去机器学习了
  • Python 03(循环语句)