nginx实现负载均衡load balance

这篇具有很好参考价值的文章主要介绍了nginx实现负载均衡load balance。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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都挂掉了文章来源地址https://www.toymoban.com/news/detail-702607.html

到了这里,关于nginx实现负载均衡load balance的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 配置Nginx实现负载均衡

    简介 在本教学文章中,我们将学习如何使用Nginx配置负载均衡,将流量均匀分配到多个后端服务器,从而提高应用程序的可靠性和性能。负载均衡是一种常见的应用场景,通过分配请求到多个服务器上,可以实现负载的均衡分配,增加系统的可扩展性和容错能力。本教程将介

    2024年02月13日
    浏览(49)
  • Nginx 如何实现负载均衡?

    Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。由于其具有丰富的功能和出色的性能,Nginx 广泛应用于 Web 开发、负载均衡、反向代理等场景。在负载均衡方面,Nginx 可以实现基于轮询、IP_HASH、URL_HASH 和其他算法的负载均衡。本文将详细介绍

    2024年01月18日
    浏览(28)
  • nginx负载均衡的实现

    1、 安装nginx https://blog.csdn.net/qq_50247813/article/details/126550316 2、 修改配置文件,配置后端服务器 2.1、有3台后端服务需要实现负载均衡 172.17.0.2:80 172.17.0.3:80 172.17.0.4:80 2.2、修改配置文件,使用代理的方式实现负载均衡(默认轮询) 设置代理名字为myweb,代理到myweb实现负载 3、

    2023年04月16日
    浏览(29)
  • 使用Nginx实现负载均衡

    本文将详细介绍使用Nginx实现负载均衡的方法。 负载均衡(Load Balancing)是将传入的请求流量分发到多个后端服务器的技术,以达到消除单点故障、提高可用性、增加扩展性等目的。 负载均衡需要根据算法来决定如何将请求分发到后端服务器。常见的负载均衡算法包括: 2.2.1 轮询

    2024年02月12日
    浏览(28)
  • [ 云计算 Azure ] Chapter 07 | Azure 网络服务中的虚拟网络 VNet、网关、负载均衡器 Load Balancer

    本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中。 本系列文章列表如下: 【Azure】微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx 【Azure】微软 Azure 基础解析(四)Azure核心体系结构组件之数据中心、区域与区域

    2024年02月06日
    浏览(38)
  • 【Azure】微软 Azure 基础解析(七)Azure 网络服务中的虚拟网络 VNet、网关、负载均衡器 Load Balancer

    本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中。 本系列文章列表如下: 【Azure】微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx 【Azure】微软 Azure 基础解析(四)Azure核心体系结构组件之数据中心、区域与区域

    2024年02月07日
    浏览(66)
  • 【创作赢红包】Nginx四——Nginx实现负载均衡的多种策略

    【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离) 【Nginx二】——Nginx常用命令 配置文件 Nginx如何处理请求 【Nginx三】——Nginx实现反向代理 本篇博客主要介绍Nginx实现负载均衡的多种策略,包括轮询、最少连接、IP哈希、加权轮询、URL哈希。 Nginx可以通过反

    2023年04月09日
    浏览(28)
  • Docker 安装 Nginx,并实现负载均衡

              1、获取 nginx 的镜像         2、运行 nginx 容器           3、浏览器输入 http://localhost 测试是否启动成功          4、实现 nginx 的负载均衡         5、启动多个 tomcat 容器用于实现负载均衡,我的 /usr/local/docker/xhf 文件夹里面只有一个 index.html ,

    2024年02月16日
    浏览(30)
  • Nginx反向代理实现负载均衡webshell

    目录 本实验所用的环境: 问题一:由于nginx采用的反向代理是轮询的方式,所以上传文件必须在两台后端服务器的相同位置上传相同的文件 问题二:我们在执行命令时,无法知道下次的请求交给哪台机器去执行我们在执行hostname -i查看当前执行机器的IP时,可以看到IP地址一

    2024年02月04日
    浏览(32)
  • nginx反向代理及负载均衡的实现

    目录 1.nginx反向代理 2.nginx负载均衡 3.nginx反向代理及负载均衡实现 nginx反向代理 4台主机都需要的操作: 两台服务器操作: 两台主机服务器进行测试; nginx负载均衡配置 4.nginx配置其他参数 多虚拟机访问 后端服务器日志中需要记录客户端真实ip nginx设置不同的url访问不同页面

    2024年02月14日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包