nginx 负载均衡服务
实现的原理使用的是 proxy_pass,nginx将不同的服务转发到服务池当中。
//语法
Syntax:upstream name {...}
Default:-
Context:http
在目标服务器配置三个不同server表示不同的服务
//server1
server{
listen 8001;
...
location / {
root /opt/app/code1;
index index.html index.htm;
}
}
//server2
server{
listen 8002;
...
location / {
root /opt/app/code2;
index index.html index.htm;
}
}
//server3
server{
listen 8003;
...
location / {
root /opt/app/code3;
index index.html index.htm;
}
}
在代理服务器配置 upsteram.conf
//后面的名字是自定义的,在proxy_pass配置
upstream imooc{
server 192.168.9.1:8001;
server 192.168.9.1:8002;
server 192.168.9.1:8003 ;
}
server {
listen 80;
server_name www.applelife.xyz;
...
location /{
#配置上面的名称 imocc
proxy_pass http://imocc;
#proxy_params 为共同参数配置文件
include proxy_params;
}
}
启动之后,浏览验证查看,访问代理服务器,默认服务请求是轮询的操作查看
在目标服务器上停止掉一个服务验证:利用iptables
//命令 不对外提供8002的端口的服务
iptables -I INPUT -p tcp --dport 8002 -j DROP
upstream举例
//支持ip域名的方式
upstream backend{
#weight表示权重,在轮询当中比重
server backend1.example.com weight =5;
server backend2.exxample.com:8080;
#socket方式
server unix:/tmp/backend3;
#backup表示是一个备份的节点
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
后端服务器在负载均衡调度中的状态参数介绍
#当前的server暂时不参与负载均衡
down
#预留的备份服务器
backup
#允许请求失败的次数
max_fails
#经过max_fails失败后,服务暂停的时间,默认10秒
fail_timeout
#限制最大的接收的连接数
max_conns
//示例
upstream applelife {
#不进行服务 server1
server 192.168.9.1:8001 down;
#备份服务 server2
server 192.168.9.1:8002 backup;
#允许请求失败次数 server3
server 192.168.9.1:8003 max_fails=1 fail_timeout=10s;
}
在验证的时候,发现只会出现server3 在目标服务器上停止掉一个服务验证:利用iptables
//命令 不对外提供8003的端口的服务
iptables -I INPUT -p tcp --dport 8003 -j DROP
停掉 8003服务之后,之后就会启动8002备份服务了
//关闭 iptables
iptables -F
调度算法方式
- 轮询 按照时间的顺序逐一分配到不同的后端服务器
- 加权轮询 weight值越大 ,分配到的访问的机率越高
- ip_hash 每个请求的按访问ip的hash结果分配,这样来自同一个ip的固定访问一个后端服务器(代理不能访问的客户端的ip)
- url_hash 按照访问的url的hash结果来分配请求,是每个url定向到同一个后端服务器
- least_conn 最少的链接数,那个机器连接数少就分发
- hash关键数值 hash自定义的key
//iphash方式
upstream applelife {
ip_hash;
# server1
server 192.168.9.1:8001;
# server2
server 192.168.9.1:8002;
# server3
server 192.168.9.1:8003;
}
hash关键数值
//语法 这个是在版本1.7.2出现的
Syntax:hash key [consistent];
Default:-
Context:upstream
//示例
upstream applelife {
#request_uri请求参数 不包括域名的部分
hash $request_uri;
# server1
server 192.168.9.1:8001;
# server2
server 192.168.9.1:8002;
# server3
server 192.168.9.1:8003;
}
网友评论