二层负载均衡是经过改写报文的目标MAC地址为上游服务器MAC地址,源IP地址和目标IP地址是没有变的nginx
四层负载均衡是根据端口将报文转发到上游服务器算法
七层负载均衡是根据端口号和应用层协议,转发报文到上游服务器缓存
upstream配置服务器
经过nginx的http指令下的upstream配置上游服务器架构
1 IP地址和端口负载均衡
2 权重分布式
负载均衡算法代理
1 round-robin:轮询进程
2 ip_hash:相同ip负载均衡到同一个upstreamip
3 hash key:哈希算法和一致性哈希算法
4 least_conn:将请求负载均衡到最少活跃链接的上游服务器
5 least_time:最小平均响应时间进行负载均衡
失败重试
配置max_fails和fail_timeout,当fail_timeout时间内失败了max_fails次请求,则认为服务器不可用,而后fail_timeout时间后再次将该服务器加入
健康检查
1 TCP心跳检查
2 HTTP心跳检查
其余配置
1 域名上游服务器
在nginx解析配置文件的阶段将域名解析成IP地址并保存,可是域名对应IP变化时,该upstream不会更新
2 备份上游服务器
当主服务器不存活时,才会发给备服务器
3 不可用上游服务器
长链接
keepalive指令配置长链接数量,指每一个worker进程与上游服务器可缓存的空闲链接的最大数量,超过此数量,最近最少使用的链接将被关闭。
此指令不限制worker进程与上游服务器的总链接
HTTP反向代理示例
HTTP动态负载均衡
将upstream动态注册到nginx上,从而实现upstream服务的自动发现
Consul是一款开源的分布式服务注册与发现系统,
实现架构:
1 consul+cousul-template
(1)upstream启动,经过管理后台向consule注册服务
(2)在nginx上启动consul-template agent,监听服务变动
(3)动态修改upstream列表
(4)重启nginx
2 consul+openResty
(1)经过Consul管理后台注册服务
(2)nginx启动,拉取配置,更新到共享字典。经过定时器,按期去拉取配置
(3)使用共享字典的upstream列表进行动态负载均衡
nginx四层负载均衡
1 静态负载均衡
配置在stream指令下
2 动态负载均衡