LB:负载均衡集群
负载均衡器:
硬件
F5,BIG IP
(Citrix)思捷 Netscaler
A10
软件
四层:LVS(Linux Virtual Server)
七层(反向代理):
nginx
http,smtp,pop3,imap
haproxy
http,tcp(mysql,smtp)
集群服务
LVS:director(前端),realserver(后端)
LVS结构和防火墙(netfilter)相似,LVS工作在INPUT链上
LVS
ipvpsadm:用户空间的管理工具(类似于iptables)
ipvs:工作在内核(类似于netfilter)
LVS只对定义了集群服务的服务进行转发
IP地址:CIP(Client ip)-->VIP(Virtual ip)-->DIP(director ip)-->RIP(realserver ip)
LVS类型
NAT最简单,DR最常用
NAT:地址转换(和DNAT一样)
遵循的基本法则
1、集群节点跟director必须在同一个网络中
2、RIP是私有IP,仅用于各集群节点间的通信
3、director位于client和realserver之间,并负责处理进出的所有通信
4、realserver必须将网关指向DIP
5、支持端口映射
6、realserver可以使用任何系统
7、较大规模应用场景中,director易成为系统瓶颈
DR:直接路由
遵循的基本法则
1、集群节点跟director必须在同一个物理网络中(中间没有其他设备)
2、RIP可以不是私有IP,实现便捷的运程管理和监控
3、director仅负责处理入站请求,响应报文直接发往客户端
4、realserver不能将网关指向DIP
5、不支持端口映射
6、realserver可使用大多数的操作系统
TUN:隧道
遵循的基本法则
1、集群节点可以不在一个网络中
2、RIP必须是公网IP
3、realserver网关不能指向dirertor
4、只有支持隧道功能的OS才能用于realserver
5、不支持端口映射
调度算法
静态
rr:轮调
wrr:加权论调(根据服务器的处理能力进行一定比例的论调)
sh:根据源地址进行哈希,一定时间里源地址访问的服务器,下一次还访问这个服务器(实现会话绑定)
dh:根据目的地址进行哈希
动态
lc:最少连接
active*256+inactive
wlc:加权最少连接
(active*256+inactive)/权重
sed:最短期望延迟
(active+1)/权重
nq:永不排队
第一次都分发一个连接,然后再基于sed
lblc:
lblcr:
默认方法:wlc
ipvsadm:
管理集群服务
添加:-A -t|u|f service-address(服务地址) [ -s scheduler(调度算法)]
-t:tcp协议的集群
service-address:PORT(地址加端口)
-u:udp协议的集群
-f:FWM:防火墙标记
service-address:Mark Number
修改:-E
删除:-D -t|u|f service-address
清空:-C 清空所有集群服务
# ipvsadm -A -t 172.16.100.1:80 -s wrr
管理集群realserver
添加:-a -t|u|f service-address -r service-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的集群服务
-r service-address:某RS地址,在NAT模型中可使用IP:PORT实现端口映射
[-g|i|m]:LVS类型
-g:DR
-i:TUN
-m:NAT
[-w weight]:定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r service-address
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
查看
-L|l
-n:数字格式的端口地址
--stats:统计数据(连接数,出入站报个数,出入站的字节数)
--rate:统计速率(单位是秒)
--timeout:显示tcp、tcpfin、udp会话超时时常
-c:显示当前ipvs连接状况
保存规则
-S
# ipvsadm -S > /path/to/somefile
导入规则
-R
# ipvsadm -R < /path/to/somefile
各节点之间的时间要同步
DR
VIP: MAC(DVIP)
arptables:
kernel parameter:(内核参数)
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;