Nginx进阶之负载均衡服务

版权声明:原创文章, 欢迎转载. https://blog.csdn.net/ip_JL/article/details/84331078

进阶阶段回顾:

Nginx进阶之静态Web资源服务

Nginx进阶之代理服务

模型:

① GSLB(全局负载均衡), 特点: 节点庞大, 范围广

② SLB(服务器负载均衡), 特点: 范围小, 实时性/响应性好

SLB分为四层负载均衡和七层负载均衡, Nginx是典型的七层负载均衡.

Nginx的负载均衡:

测试Nginx的负载均衡

要测试Nginx的负载均衡功能需要两台服务器, 192.168.19.134和192.168.19.136

136服务器提供三个server服务:

134服务器提供负载均衡服务:

客户端(浏览器)访问:

http://192.168.19.134

默认的结果是在这3个服务端口之间轮询

可以使用命令关闭其中某个端口, 模拟其中一个服务挂掉的情况, 测试其他两个服务还能否正常访问.

命令如下:

iptables -I INPUT -p tcp --dport 8082 -j DROP   #关闭8082端口

iptables -I INPUT -p tcp --dport 8082 -j ACCEPT  #开启8082端口

测试结果是8082端口的服务无法访问, 而其他两个服务正常访问.

上面提到的upstream模块还有其他的配置项:

upstream [自定义的虚拟服务的名称, 如上面我自定义的"testSLB"] {

    server [域名的写法www.example.com] weight=[权重值越大则访问越多, 值为1/2/3/4/5/...];

    server [域名+端口的写法www.example.com:8080];

    server [socket的写法unix:/tmp/...];

}

配置参数:

down 表示当前的server不参与负载均衡
backup 备份服务器, 当其他服务没有完全挂掉的情况下不使用该备份服务器, 一旦全部挂掉, 则启用该备份服务器
max_fails 允许请求失败的次数, 如: max_fails=1
fail_timeout 经过max_fails失败后服务暂停的时间, 如: fail_timeout=10s
max_conns 限制最大的接收连接数(用于每台服务器配置不统一的情况, 降低低配置服务器的压力)

进入134服务器的.conf配置, 在upstream的每一台server后面加上对应的参数再测试

测试结果是只能访问到8083端口, 利用上面的命令关闭8083端口, 测试能够访问到的是8082端口.

Nginx的调度算法

Nginx的调度算法默认是轮询策略, 依次访问.

调度算法:

轮询 按照时间顺序逐一分配到不同的后端服务器
加权轮询 weight值越大, 分配到的访问几率就越大
ip_hash 每个请求按照访问的ip的hash结果进行分配, 使得来自同一个ip的固定访问同一个后端服务器
least_conn 最少链接数, 当前哪个服务器的连接数少就分发给哪个服务器
url_hash 每个请求按照访问的url的hash结果进行分配, 使得来自同一个url的请求定向到同一个后端服务器
hash关键值 hash自定义的key

测试加权轮询:

134服务器的配置:

轮询和加权轮询都是基于请求来实现的, 这种轮询有个缺点会导致用户的cookie等信息丢失, 可以采取ip_hash的调度算法:

此时通过ip下的方问就只会固定一个server

ip_hash的缺陷在于, 如果用户在前端再走代理的话, 此时nginx是无法获取到用户的真是ip的, 同时如果用户访问的后台是多台服务器的话, 那么会导致用户的缓存发生改变, 那么信息也将发生改变.

解决办法: hash关键值/url_hash

url_hash跟hash关键值其实是同一个道理, 配置语法如下:

systax: hash [key, 如$request_uri]

default: 无配置

context: upstream域

进入.conf文件进行配置:

134服务器:

136服务器分别在code1/code2/code3里面添加url1.html/url2.html/url3.html文件, 用于区别访问的路径而已.

重新加载配置文件

访问: http://192.168.19.134/url1.html, 此时只能定向访问到server1下的url1.html, 

访问: http://192.168.19.134/url2.html, 此时只能定向访问到server3下的url2.html,

访问: http://192.168.19.134/url3.html, 此时只能定向访问到server2下的url3.html,

具体访问哪台服务器则根据url的hash计算结果进行分发的.

猜你喜欢

转载自blog.csdn.net/ip_JL/article/details/84331078
今日推荐