NGINX负载均衡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGINX负载均衡相关的知识,希望对你有一定的参考价值。

nginx简介:

NGINX是一个开源的,支持高性能、高并发的WWW服务器和代理服务软件,由俄罗斯人开发,NGINX因为具有高并发(特别是静态网页)、占用资源少等特性,且功能丰富而逐渐流行起来。
在功能上,NGINX不但是一个优秀的web服务软件,而且还具有反向代理负载均衡和缓存服务的功能,在反向代理方面,它类似于LVS负载均衡及haproxy等专业化的软件,但NGINX 部署起来更简单,方便,在缓存方面,它又类似于squid 等专业缓存服务软件。
NGINX可以运行在Unix,Linux、BSD、MACosX ,solaris 以及microsoft windows 等操作系统中。

1 NGINX 重要性

1 可针对静态资源高并发访问及缓存
2 可使用反向代理加速,而且可进行数据缓存
3 具有简单负载均衡、节点健康检查和容错功能
4 支持远程FASTCGI服务的缓存加速
5 支持fastCGI、Uwsgi、SCGI/memcached servers 的加速和缓存
6 支持SSL、TLS、SNI
7 具有模块化结构:过滤器包括gzip压缩,rangs支持。chunked相应,XSLT、SSI及图像缩放功能,在SSI过滤器中,一个包含多个SSI的页面,如果经由fastCGI或反向代理处理,可被并行处理

2 所具备的WWW服务特性

1 支持基于域名、端口及IP的多虚拟主机站点
2 支持keep-alived 和 pipelined链接
3 可进行简单、方便、灵活的配置和管理
4 支持修改NGINX配置、并在代码上线时,可平滑重启,不中断业务访问
5 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮循及通过rsyslog处理日志
6可利用信号控制NGINX进程
7 支持状态码重定向
8 支持rewrite模块,支持URI重写及正则表达式匹配
9 支持基于客户端的IP地址和HTTP基本认证的访问控制
10 支持PUT、DELETE、MKCOL、COPY及MOVE等特殊的HTTP请求方法
11 支持FLV 流和MP4流技术产品应用
12 支持HTTP响应速率限制
13 支持统一IP地址的并发链接或请求数限制
14 支持邮件服务代理

3 NGINX的主要企业应用:

1 作为web服务软件
2 反向代理或负载均衡
3 前端业务数据缓存服务

4 NGINX负载均衡集群介绍

负载均衡集群提供了一种廉价、有效、透明的方法,来扩展网络和服务的负载,带宽和吞吐量,同时增加了网络数据处理能力,提高了网络的灵活性和可用性。
NGINX负载均衡依赖于ngx_http_upstream_module 模块,
支持的代理方式包括proxy_pass、fastcgi_pass,memcached_pass等
ngx_http_upstream_module 模块允许nginx 定义一组或多组节点服务器组,使用时可以
通过proxy_pass代理的方式把网站的请求发送到事先定义好的对应upstream组的名字上
基本格式:
upstream www_server_pools {
server 192.168.122.85:80 weight=1;
server 192.168.122.58:80 weight=1;
}

location / {
proxy_pass http://www_server_pools;
}
upstream 关键字必须有,
server可以接域名和IP,如果不指定端口,默认是80
max_fails=1 NGINX尝试连接后端主机失败的次数,配合proxy_next_upstream 使用的,
backup : 热备配置。前面的RS都down了才会使用它。
fail_timeout:在max_files 定义的失败次数后,距离下次检查的时间间隔
down:表示这个服务器永远不用。配合ip_hash使用
check 开启健康检查
inter:设置连续两次健康检查的时间间隔,单位为毫秒
rise:指定多少次链接成功健康检查后,即可认定其处于可用
fall:指定多少次不成功健康检查后,及认为该服务器为宕机状态
maxcom:指定可被发送到服务器的最大并发数。

5 upstream 调度算法

1 静态算法:

1 rr(默认)
2 wrr 通过修改weight进行确定
3 ip_hash 通过在upstream 模块的顶端指定的方式进行 客户端IP进行hash
当为此时,后端状态不能有weight 和backup 会话保持

2 动态算法:

1 fair 根据后端响应时间进行分配
在 upstream 里面的server 下一行配置 fair
2 least_conn 根据链接次数进行分配
3 url_hash 根据URL访问hash进行分配 web缓存节点
{
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc 32;
}
4 一致性hash
用于代理后端业务为缓存服务的场景(根据请求内容分配调度)
通过将用户请求的URL或指定字符串进行计算,然后调度到后端服务器上,此后任何用户查找
同一个URI或者指定字符串都会被调度到这一台服务器上,因此后端节点的缓存内容都是不相同
的,可以解决后端某个或几个节点宕机后,缓存震荡小。
http {
upstream test{
consistne_hash $request_uri;
server 127.0.0.1:9001 id= 1001 weight=3;
server 127.0.0.1:9002 id= 1002 weight=10;
server 127.0.0.1:9003 id= 1003 weight=20;
}
}

二 实验环境准备:

1 设备分布情况:

设备名 功能 IP地址
server 1 NGINX负载均衡 192.168.122.149
server2 后端web服务 192.168.122.177
server3 后端web服务 192.168.122.85

2 软件:
链接:https://pan.baidu.com/s/1xUH5vHeUJjDdz79i56BhTQ
密码:n527

三 NGINX负载均衡实验:

1 安装软件

1 下载并解压软件

技术分享图片
技术分享图片

2 去除修改gcc产生的文件,以减少NGINX的文件大小

技术分享图片
技术分享图片

3 去除NGINX版本号,以防止黑客攻击

技术分享图片
技术分享图片

4 指定其安装位置及安装的模块

技术分享图片
技术分享图片

5 编译并安装

技术分享图片

6 查看文件大小

技术分享图片

7 创建连接文件

技术分享图片

8 启动及查看

技术分享图片
技术分享图片

9 其默认发布目录位置

技术分享图片

10 备份主配置文件

技术分享图片

2 基本优化

一般优化项:
技术分享图片
技术分享图片

1 优化NGINX运行用户,其默认使用nobody

技术分享图片
创建nginx 用户和组
技术分享图片
修改配置
技术分享图片
重启服务
技术分享图片
查看其启动情况:
技术分享图片

2 优化进程数

默认的NGINX多个进程有可能跑在一个CPU上,导致NGINX进程使用硬件的资源不均,因此需要针对一个CPU配置一个进程

技术分享图片

技术分享图片
技术分享图片

3 配置最大链接数

Woker_connections 的值要根据具体服务器性能和程序的内存使用量来指定(一个进程启动使用的是内存根据程序确定),如下Events 核定NGINX的工作模式以及链接数上限。
服务端修改:
技术分享图片

技术分享图片
配置文件修改
技术分享图片
技术分享图片
查看
技术分享图片

3 配置负载均衡

1 查看后端服务IP地址

技术分享图片
技术分享图片

2 修改配置文件

技术分享图片
技术分享图片
技术分享图片

3 重启服务:

技术分享图片

4 启动后端服务

技术分享图片
技术分享图片

5 配置客户端域名解析:

技术分享图片

6 测试,实现了负载均衡,其默认的调度算法是RR轮循机制:

技术分享图片

7 配置backup服务器,用于当上面服务器down机后使用

技术分享图片
技术分享图片
技术分享图片

8 添加网页提示信息:

技术分享图片

9 关闭后端服务

技术分享图片
技术分享图片

10 客户端测试:

技术分享图片

11 浏览器测试则乱码

技术分享图片

12 配置给网页指定其编码方式为UTF-8的方式

技术分享图片

13 检查配置是否正确,并启动

技术分享图片

14 客户端浏览器查看

技术分享图片

4 基本调度算法

1 默认是轮循调度算法 RR

技术分享图片

2 加权轮循调度机制: WRR

权重也大,其被访问的概率也越高
技术分享图片
技术分享图片
技术分享图片

3 配置IP_hash ,

其作用是当同一个IP访问时,其被调度到同一个服务器上
技术分享图片
技术分享图片

技术分享图片

4 配置最小链接数 least_conn:

因为目前没有并发,因此与RR无异同
当链接数最小的情况下回吧客户端的请求发送到给服务器上
技术分享图片
技术分享图片

5 配置URI哈希,

其是当URI 相同时,访问被调度到相同的web服务器上
技术分享图片
技术分享图片

技术分享图片
技术分享图片

6 配置cookie 以将客户端的访问信息保存在客户端浏览器上,

技术分享图片
技术分享图片技术分享图片

以上是关于NGINX负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Nginx---负载均衡和缓存

nginx负载均衡

使用Nginx配置TCP负载均衡

Nginx实现负载均衡

Nginx——nginx作为负载均衡服务(负载均衡与nginx)

nginx+keepalive实现负载均衡高可用