集群采用三层结构
1:负载调度层:他是整个集群对外面的前端机。负责将客户的请求发送到一组服务器上执行。
2:服务器池:是一组真正执行客户请求的服务器
3:共享存储:他为服务器池提供一个共享的存储区,这样使服务器吃拥有相同的内容
组成
lPVS和ipvsadm
IPVS工作在内核空间,真正的调度由它完成。
我们借助工作在用户空间管理工具ipvsadm来管理IPVS。负责为ipvs内核框架编写规则,定义虚拟服务器,定义后端真实服务器。定义工作模式和调度算法。
ipvsadm
-C 清除表中所有的记录
-A --add-service在服务器列表中新添加一条新的虚拟服务器记录
-t 表示为tcp服务
-u 表示为udp服务ipvsadm基本命令参数如下:
-t 指定虚拟服务器的IP地址和端口
-s 指定调度算法,ss为轮询,wrr为加权轮询,dh为目标地址散列,sh为源地址散列,lc为最少链接等
-a 在对应的VIP下添加RS节点
-g 指定LVS的工作模式为DR模式
-l 指定LVS的工作模式为tunnel模式
-m 指定LVS的工作模式为NAT模式
术语
DS:Director Server。前端负载均衡器节点
RS:Real Server。 后端真实工作服务器
LB:Load Balancer 前端的负载均衡器
DIP: Director IP
VIP: Director Virtual IP
CIP: Client IP
RIP: Realserver IP
工作模式:
NAT 网络地址转换
通过修改请求报文的目标IP地址(同时可能修改目标端口)至挑选出某RS的RIP实现地址转发。
请求报文:
- 用户对director发起请求, 这时在三层的首部中, 源地址是CIP, 目标地址是VIP;
- 报文从director的配置了VIP这种网卡进入被PREROUTING链捕获, 本应该交由FORWARD链, 但此时IPVS强行修改路径将数据包从PREROUTING链转发至INPUT链上; 并且将目标地址改为RIP, 将报文交由POSTROUTING链;
- 然后从配置了DIP这张网卡出去, 交给后端的RealServer(通过挑选算法.)
- RealServer收到请求后, 将响应报文封装, 此时数据包的目标地址是CIP, 源地址是RIP;
- 数据包被发送至Director, 从配置了DIP的网卡进入, 交由PREROUTING链, 然后转发至INPUT链, 这时数据包的目标地址不变, 仍然是CIP, 而源地址被修改为VIP;
- 然后交由POSTROUTING链, 从配置了VIP的网卡出去, 通过路由器发送给互联网的Client.
配置lvs-nat的注意事项
- RS和DIP应该使用私网地址, 且RS的网关要指向DIP.
- 请求和响应报文都要经由director转发; 极高负载的场景中, director可能会成为系统瓶颈.
- 支持端口映射.
- RS可以使用任意OS.
- RS的RIP和director的DIP必须在同一IP的网络
DR 直接路由
它通过修改报文的目标MAC地址进行转发.
原理:
请求报文流程图:
- Clint对director发起请求, 这时在三层的首部中, 源地址是CIP, 目标地址是VIP; 在二层的首部中源mac是CIP-MAC, 目标mac是VIP-MAC;
- VIP配置在网卡ens33的别名上(ens33:0); 数据包从ens33:0进入, 在到达INPUT链后;
- 此时源IP和目标IP均未修改, IPVS只是修改了源MAC为DIP-MAC, 目标MAC为RIP-MAC;
- 由于DIP和RIP处于同一个网络中, 所以是通过二层传输; POSTROUTING链检查目标MAC为RIP-MAC, 便将数据包交由配置了DIP的网卡ens33发送至后端的RealServer上(通过挑选算法).
- 数据包从RIP进入RealServer, 然后被交给绑定了VIP的lo:0(lo的别名), lo:0将数据包解包后将请求报文交给用户空间的应用获取Client请求的资源.
响应报文流程图:
- lo:0获取请求报文后, 此时目标地址为CIP, 源地址为VIP; 目标MAC被修改CIP-MAC, 源MAC被修改为VIP-MAC;
- lo:0将数据包发送给配置了RIP的网卡(ens33), 此时数据包将被通过互联网路由发回给Client.
配置lvs-dr的注意事项
- 保证前端路由器将目标IP为VIP的请求报文发送给director:
- 静态绑定
- arptables
- 修改RS主机内核参数
- RS的RIP可以使用私有地址, 也可以使用公网地址;
- RS跟Director必须在同一物理网络中;
- 请求报文经由Director调度, 但响应报文一定不能经由Director;
- 不支持端口映射;
- RS可以是大多数OS;
- RS的网关不能指向DIP.
TUN 隧道模式
不修改请求报文的IP首部, 而是通过在原有IP首部(cip <–> vip)之外, 在封装一个首部(dip <–> rip).
请求报文流程图:
- 回环接口获取响应报文后, 将报文封装通过本机的物理网卡发送出去, 此时数据包首部的源IP为VIP, 目标IP为CIP;
- 数据包经过重重路由后发送至Client.
lvs-tun模型的注意事项:
- RIP, DIP, VIP全得是公网地址;
- RS的网关不能指向DIP
- 请求报文必须经由director调度, 但响应报文必须不能经由director;
- 不支持端口映射;
- RS的OS必须支持隧道功能.