1 负载均衡 几个方面
1.1 上游服务器配置
-
配置 http 下面的upstream
- server
- IP地址和端口 配置上游服务器的IP地址和端口
- weight 权重 , 默认为1。
- server
-
配置 proxy_pass 处理用户请求
#设置fastdfs group1的服务器
upstream fdfs_group1 {
server 192.168.1.22:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.111:8888 weight=1 max_fails=2 fail_timeout=30s;
}
# proxy_pass
server {
location /fastdfs/group1/M00 {
proxy_pass http://fdfs_group1;
}
}
1.2 负载均衡算法
- round-robin 轮询,默认负载均衡算法,通过weight 配置权重
upstream fdfs_group1 {
server 192.168.1.22:8888 weight=1;
server 192.168.1.111:8888 weight=1;
server 192.168.1.111:8889 weight=3;
server 192.168.1.111:8890 weight=1;
}
- ip_hash 根据客户IP进行负载均衡,即相同的IP将负载均衡到同一个upstream server
upstream fdfs_group1 {
ip_hash;
server 192.168.1.22:8888 ;
server 192.168.1.111:8888 ;
server 192.168.1.111:8889 ;
server 192.168.1.111:8890 ;
}
- hash key 对某一个key进行哈希或者使用一致性哈希算法进行负载均衡
- 一致性哈希算法
- 0 - 2^32 -1, 形成圆环,请求根据 关键字hash后对2^32取模,按顺时针方向,寻找可用节点。
- 一致性哈希算法
upstream fdfs_group1 {
# hash 根据请求url
hash $uri;
# 一致性哈希算法
# hash $consistent_key consistent ;
server 192.168.1.22:8888 ;
server 192.168.1.111:8888 ;
server 192.168.1.111:8889 ;
server 192.168.1.111:8890 ;
}
- least_conn 最少活跃连接的上游服务器。如果配置的服务器较少,则将转而使用基于权重的轮询算法
upstream fdfs_group1 {
least_conn;
server 192.168.1.22:8888 ;
server 192.168.1.111:8888 ;
server 192.168.1.111:8889 ;
server 192.168.1.111:8890 ;
}
- fair 按响应时长 需要安装 upstream_fair模块
upstream fdfs_group1 {
fair;
server 192.168.1.22:8888 ;
server 192.168.1.111:8888 ;
server 192.168.1.111:8889 ;
server 192.168.1.111:8890 ;
}
1.3 失败重试机制
- server 192.168.1.22:8888 weight=1 max_fails=2 fail_timeout=30s;
- max_fails
- fail_timeout
- 当fail_timeout时间内失败了max_fails次请求,则认为该上游服务器不可用
- fail_timeout时间后会再次将该服务器加入到存活上游服务器列表进行重试
1.4 服务器心跳检查
- interval: 检测间隔时间,如下面配置了每隔3s检测一次。
- fall: 检测失败多少次后,上游服务器 标识为不存活。
- rise: 检测成功多少次后,上游服务器 标识为存活。
- timeout: 检测请求超时时间配置。
- check_http_send: 即检查时发的HTTP请求内容。
- check_http_expect_alive: 当上游服务器返回匹配的响应状态码时,则认为上游服务器存活。
upstream fdfs_group1 {
server 192.168.1.22:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.111:8888 weight=1 max_fails=2 fail_timeout=30s;
check interval=3000 fall=3 rise=1 timeout=2000 type=tcp;
check_http_send "HEAD /fastdfs/status HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
- 参考
- [亿级流量网站架构核心技术]
网友评论