当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集群系统提高整体的处理性能。不过我们要使用统一的入口方式对外提供服务,所以需要一个流量调度器 通过均衡的算法,将用户大量的请求均衡地分发到后端集群不同的服务器上。这就是我们后边要说的负载均衡。
广义上的负载均衡器大概可以分为 3 类,包括:DNS 方式实现负载均衡、硬件负载均衡、软件负载均衡。
LVS的三种工作模式对比
模式 | 优点 | 缺点 |
---|---|---|
DR模式 | 响应数据不经过lvs,性能高; 对数据包修改小,信息保存完整(携带客户端源 IP) |
lvs与rs必须在同一个物理网络(不支持跨机房) rs上必须配置lo和其它内核参数 不支持端口映射 |
NAT模式 | 能够支持windows操作系统;支持端口映射。如果rs端口与 vport不一致,lvs除了修改目的IP,也会修改 dport 以支持端口映射。 | 后端RS需要配置网关;双向流量对lvs负载压力比较大 |
Tunnel模式 | 单臂模式,对lvs负载压力小;对数据包修改较小,信息保存完整;可跨机房(不过在国内实现有难度) | 需要在后端服务器安装配置ipip模块;需要在后端服务器tunl0配置vip;隧道头部的加入可能导致分片,影响服务器性能;隧道头部IP地址固定,后端服务器网卡hash可能不均;不支持端口映射 |
缩写
CIP:Client IP,表示的是客户端 IP 地址。
VIP:Virtual IP,表示负载均衡对外提供访问的 IP 地址,一般负载均衡 IP 都会通过 Virtual IP 实现高可用。
RIP:RealServer IP,表示负载均衡后端的真实服务器 IP 地址。
DIP:Director IP,表示负载均衡与后端服务器通信的 IP 地址。
CMAC:客户端的 MAC 地址,准确的应该是 LVS 连接的路由器的 MAC 地址。
VMAC:负载均衡 LVS 的 VIP 对应的 MAC 地址。
DMAC:负载均衡 LVS 的 DIP 对应的 MAC 地址。
RMAC:后端真实服务器的 RIP 地址对应的 MAC 地址。
DR模式原理
NAT模式原理
Tunnel模式原理
iptables使用示例
iptables -L // 列出filter表下的规则
iptables -L -t nat // 列出nat表下的规则
// 允许本机开放从TCP端口20-1024提供的应用服务
iptables -A INPUT -p tcp -m state --state NEW --dport 20:1024 -j ACCEPT
// 屏蔽来自外部的ping(禁止外部机器ping本机)
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
// 允许本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
// 防止DDos攻击
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
// 把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip,然后发出去
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.5.3
// 启用DNAT转发,把本机192.168.1.17来自422端口的流量转发到22端口(来自422端口的SSH连接请求与来自22端口的请求等效)
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.17 --dport 422 -j DNAT --to-destination 192.168.1.17:22
// 允许连接到422端口的请求
iptables -t filter -A INPUT -p tcp -m state --state NEW --dport 422 -j ACCEPT
// 保存规则
service iptables save
service iptables restart