nginx集群:nginx配置负载均衡集群(nginx1.18.0)
一,nginx的负载均衡集群的特点:
1,nginx集群和lvs的不同?
lvs集群:工作在第4层(传输层)
nginx集群:工作在第7层(应用层) lvs集群:性能更强
nginx集群:功能更强:可以针对域名/目录等进行配置 lvs:不支持重发请求
nginx集群:检测到错误后可以重发请求
2,调度算法有哪些?
rr (轮询)
wrr (就是rr的基础上加上权重weight)
ip_hash (根据ip分发)
url_pash (根据url分发)
least_conn (分发给连接数少的机器)
fair (按响应时间分发,是第三方的算法,如使用需要安装时添加相应的模块)
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,我们作为例子的nginx负载均衡集群的结构:
loader: 172.18.1.1 loadbalancer,负责作为负载均衡的入口
web1: 172.18.1.2 后端的web机器之一
web2: 172.18.1.3 后端的web机器之二
三,loader上负载均衡集群的配置
1,编辑配置文件:用upstream定义一个集群
#upstream :定义一个上游服务器集群
#webcluster :集群的名称,用来区分
#server 172.18.1.2:80 指定集群的机器ip的端口
upstream webcluster{
server 172.18.1.2:80;
server 172.18.1.3:80;
}
2,在server配置访问中使用上面定义的webcluster集群
server {
listen 80;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
proxy_connect_timeout 5;
proxy_read_timeout 5;
proxy_send_timeout 5;
proxy_pass http://webcluster;
}
}
3,配置中各个指令的说明:
proxy_pass
将代理转发给上方 upstream 中配置的集群中的两台服务器去处理
X-Real-IP
用来得到真实ip,否则在后端看到的都是loader的ip
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering
默认值是on,这里我们把它关闭,off
它负责开启从后端被代理服务器的响应body缓冲,
我们需要从后端服务器按收实时的数据,所以关闭
proxy_connect_timeout
该指令设置与upstream server的连接超时时间,默认值60s,最高不能超过75秒
注意这个不是等待后端返回页面的时间(那个时长是由proxy_read_timeout变量来定义)。
如果upstream服务器正在运行中,但是没有响应
则这个指令不会起作用,因为与upstream服务器的连接已经建立
proxy_read_timeout
该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应
如果两次读操作之间经过指定的时间还收不到upstream响应的数据,视为超时
默认值:60s
proxy_send_timeout
这个指定设置了发送请求给upstream服务器的超时时间
如果两次写操作之间经过指定的时间不能发送到upstream,视为超时
默认值:60s
四,nginx集群的轮循算法:
1,默认算法:轮询
轮询是upstream的默认分配方式,
每个请求按照时间顺序轮流分配到不同的后端服务器
2,使用ip_hash算法:
# ip_hash: 根据ip地址做hash,使同一个ip发出的请求能分发到相同的后端机器
upstream webcluster{
ip_hash;
server 172.18.1.2:80;
server 172.18.1.3:80;
}
如果同一个ip发出的请求能分发到相同的后端机器,
则一定程度上可以提高访问效率,因为可以避免多次建立http连接
注意:如果用户使用带有服务端缓存功能的浏览器(比如微信的内置浏览器),
则用户的ip地址会发生变化,
所以如果做session共享时不能寄希望于ip_hash
3,使用url_hash算法
说明: url hash把相同的请求地址转发到后端相同的机器
upstream webcluster{
hash $request_uri;
server 172.18.1.2:80;
server 172.18.1.3:80;
}
如果后端的web服务机器上有本地缓存,且缓存内容不同,可以使用这种方式
因为可以提高缓存命中率,缩短访问时间
比如:供下载用的文件缓存到web服务器
如果缓存内容相同,例如 redis缓存页面内容,则使用url_hash带来的益外不大
五,负载均衡的参数例子:
1,weight:
机器在集群中占的权重,默认值是1
weight越大,负载的权重就越大,
如果后端服务器的性能或带宽有差异时,可以用这个值来调整压力的分配
例子:
upstream webcluster{
server 172.18.1.2:80 weight=1;
server 172.18.1.3:80 weight=2;
}
说明:使用ip_hash和url_hash算法时weight不生效
2,max_fails /fail_timeout
例子:
upstream webcluster{
server 172.18.1.2:80 max_fails=3 fail_timeout=60s;
server 172.18.1.3:80 max_fails=3 fail_timeout=60s;
}
在fail_timeout参数定义的时间段内,如果失败的次数达到max_fails的值,Nginx就认为服务器不可用,标记此机器为fail,
当前的fail_timeout时长内不再尝试连接,
到下一个再去尝试请求,如果连接成功,则恢复之前的分发,
如果仍然不可用,则继续等到下一个周期再尝试
默认值:
fail_timeout为10s
max_fails为1次
建议值:
机器出故障一般没那么容易恢复,
建议设置为: 3/60
说明:
后端服务器连接失败时,会记录到error_log日志中:
例:
2020/05/12 05:44:32 [error] 483#0: *7 connect() failed (111: Connection refused) while connecting to upstream,
client: 172.18.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://172.18.1.3:80/", host: "192.168.3.59"
3,down
表示此服务器已被手动停用
例子:
upstream webcluster{
server 172.18.1.2:80 max_fails=3 fail_timeout=60s down;
server 172.18.1.3:80 max_fails=3 fail_timeout=60s;
}
4,backup
表示此服务器是备用服务器,
只有其它后端服务器都宕机或者很忙才会访问到
所以在集群中压力最小
例:
upstream webcluster{
server 172.18.1.2:80 max_fails=3 fail_timeout=60s;
server 172.18.1.3:80 max_fails=3 fail_timeout=60s backup;
}
六,查看nginx版本
[root@centos8 playbook]# /usr/local/soft/nginx-1.18.0/sbin/nginx -v
nginx version: nginx/1.18.0
nginx集群:nginx配置负载均衡集群(nginx1.18.0)的更多相关文章
- 简单的 Nginx+Tomcat 配置负载均衡集群
简单 Nginx+Tomcat 配置负载均衡集群 前期准备 解压两个tomcat,修改端口号 server1:8081 server:8082 同时启动 nginx官网下载解压版nginx 创建一个简 ...
- 使用nginx实现动静分离的负载均衡集群
一.概述: LB负载均衡集群分两类: LVS (四层)和 nginx或haproxy (七层) 客户端通过访问分发器的VIP来访问网站 |现在应用更复杂,比如现在网站页面有: .php .html . ...
- nginx+tomcat 配置负载均衡集群 (转载)
一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...
- Nginx+Tomcat 配置负载均衡集群
一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...
- Nginx + Tomcat 配置负载均衡集群简单实例
一.Hello world 1.前期环境准备 准备两个解压版tomcat,如何同时启动两个tomcat,请看我的另一篇文章<一台机器同时启动多个tomcat>. nginx官网下载解压版n ...
- Nginx+tomcat配置负载均衡集群
操作系统版本:Centos 6.4 Nginx版本:nginx-1.3.15.tar.gz wget http://nginx.org/download/nginx-1.5.9.tar.gz JDK版 ...
- nginx实现动静分离的负载均衡集群
实战: 一.源码编译安装nginx [root@tiandong63 ~]#yum groupinstall "Development Tools" "Developme ...
- 在centos7下搭建nginx环境,并配置负载均衡,最终能达到通过域名直接访问的目的
1.关于nginx:个人理解的nginx它的主要用途就是负载均衡,当然可能还有其他一些功能可能我们不长用到,我们通过nginx可以干什么呢?为什么要引入它呢?原因是当有高并发访问服务器时,服务器可能会 ...
- Nginx+Keepalived搭建高可用负载均衡集群
本文的重点是Keepalived的配置,Nginx的配置就简略带过.软件:CentOS 7.2 / Nginx 1.12.2 / Keepalived 1.3.9 ha-01:192.168.1.97 ...
随机推荐
- spring boot环境配置以及开发工具选择(Spring一)
首先安装java jdk jdk的安装参考:https://blog.csdn.net/zhys0902/article/details/79499329配置效果如下: 接下来是maven的相关配置 ...
- oracle数据处理之sql*loader(二)
目录 SQL*Loader对不同文件及格式的处理方法 2.1 Excel文件 一般的Excel文件最大行数不超过65536行,说明数据处理量并不大,处理Excel的方式是将其另存为CSV格式文件,然后 ...
- C/C++ 宏操作小技巧
Abstract 之前写了一个非常mini的log库(也不算库把,自己瞎jb写的),里面几乎都是宏的实现.这里打算趁热打铁,把自己知道的几下子都贴出来,后续如果有新的收获会更新这个博文. 文笔拙劣,主 ...
- Spring注解不生效原因总结
在Spring的注解学习中发现使用(@Resource.@PostConstruct. @PreDestroy)这三个注解时不生效.使用@Resource发生空指针异常,说 明被注解对象没有被成功注入 ...
- Jmeter引用外部jar包的几种方法
总结记录下jmeter引用外部jar包的3种方法及其优缺点: 一.测试计划中添加目录或jar包到Classpath 操作:测试计划->添加目录或jar包到Classpath-->浏览导入j ...
- spring-dao.xml通常写法
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- JVM的整体结构
整个jvm的运行流程图如上所示,首先需要进行加载class文件,然后使用类加载子系统将class翻译解析导入内存,在内存中分别导入到对应的运行时数据区,然后执行引擎开始执行,对于需要的数据在对应的区域 ...
- Spring Boot学习(二)搭建一个简易的Spring Boot工程
第一步:新建项目 新建一个SpringBoot工程 修改项目信息 勾选项目依赖和工具 选择好项目的位置,点击[Finish] 第二步:项目结构分析 新建好项目之后的结构如下图所示,少了很多配置文件: ...
- 使用jpa的注意事项
@Transactional 事务注解 nativeQuery = true表示使用写的sql,不是HQL@Modifying 注解完成修改操作使用jap时,在实体类的类名上面加上 @Entity@T ...
- 函数的arguments对象的使用和介绍
arguments对象用于函数,当不知道传递了多少个实参,就可以使用arguments对象进行存储传递过来的实参(这时不需要写形参). arguments是一个内置对象,也是一个伪数组,我们可以按照数 ...