Nginx/LVS/Haproxy 企业级负载集群介绍
Nginx
反向代理 + 四层或七层负载均衡 + 虚拟主机。
LVS
四层负载均衡。
- LVS集群采用三层架构:负载调度器、服务器池和共享存储
- LVS包含ipvs内核模块和ipvsadm管理工具两个部分
- 负载均衡模式包括:NAT、TUN 和 DR
NAT模式(网络地址转换)
- 很好配置,原理简单易懂
- 由于调度器的工作量太大,很容易成为整个集群系统的瓶颈
- RS应该使用私有地址;RS的网关的必须指向DIP
- RIP和DIP必须在同一网段内
- 请求和响应的报文都得经过Director,在高负载场景中,Director很可能成为系统性能瓶颈
- 支持端口映射
- RS可以使用任意支持集群服务的OS
TUN模式(IP隧道)
- RIP、VIP、DIP全是公网地址
- RS的网关不会也不可能指向DIP
- 不支持端口映射
- RS的系统必须支持隧道
DR模式(直接路由)
- 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
- arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在网卡接口的别名上,并限制其不能响应对VIP地址解析请求。
- RS可以使用私有地址,但也可以使用公网地址,此时可以直接通过互联网连入RS以实现配置、监控等
- RS的网关一定不能指向DIP
- RS跟Dirctor要在同一物理网络内(不能由路由器分隔)
- 请求报文经过Director,但响应报文一定不经过Director
- 不支持端口映射
- RS可以使用大多数的操作系统
调度算法
- 静态调度算法:rr(常用),wrr(常用),dh,sh
- 动态调度算法:wlc(常用),lc(常用),lblc,lblcr, sed, nq
- 生产环境选型:
- 一般的网络服务,如http,nginx,mysql等常用的LVS调度算法为:基本轮询调度rr、加权最小连接调度wlc、加权轮询调度wrr
- 基于局部性的最小连接lblc和带复制的给予局部性最小连接lblcr主要适用于web cache和DB cache
- 源地址散列调度SH和目标地址散列调度DH可以结合使用在防火墙集群中,可以保证整个系统的出入口唯一
Session持久机制
- session绑定:始终将同一个请求者的连接定向至同一个rs(第一次请求时仍由调度方法选择)。没有容错能力,有损均衡效果
- session复制:在rs之间同步session,因此,每个RS持集群中所有的session。对于大规模集群环境不适用
- session共享或服务器机制:利用单独部署的服务器来统一管理session
健康检查
- ldirectord
LVS高可用
- keepalived:无状态服务的高可用、LVS的高可用,使用的vrrp协议方式,虚拟路由冗余协议
- heartbeat:有状态服务的高可用、业务的高可用、大型集群管理,基于主机或网络的服务的高可用方式
- 使用建议:
- 优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat
- LVS的高可用建议用Keepavlived
- 业务的高可用用Heartbeat
Haproxy
四层或七层负载均衡。