NAT基础:
在外部请求到达调度器(director)上VIP之后,LVS使工作在input链上,定义了所谓的集群规则,强行改变了报文的流转规则,变成了prerouting-->input-->postrouting。
ipvsadm:用户空间的命令行工具,用于管理集群服务规则,这并不是必须的;
ipvs是工作在内核空间中net fileter的input链上;
说明:
CIP:客户端的IP地址;
VIP:lvs负载均衡调度器上的面向客户端的IP地址;
DIP:lvs负载均衡调度器上的面向服务器的IP地址;
RIP:后端服务器的IP地址。
RS:后端服务器
director:负载均衡调度器
NAT类型的相关内容:
多目标的DNAT(iptables):它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出的某RS的RIP地址实现转发;
(1)RS和DIP应该使用私网地址,且RS得网关应该指向DIP;
(2)请求和响应报文都要经过director转发,在极高负载的场景中,director可能会成为整个系统的瓶颈;
(3)支持端口映射;
(4)RS可以使用任意操作系统;
(5)RS的RIP和director的DIP必须在同一IP网络;
模型图:
lvs nat模型实现负载均衡的详细过程:
黑色的代表请求报文:请求报文从客户端到达director上网卡1时,其源地址:cip,目标地址:vip。经过director上的在input链上规则的强行转发,将请求报文经过postrouting送到网卡2上。通过调度算法,找出一台RS,同时将请求报文的目标IP修改为RIP(调度算法找出的RS的IP),将请求报文发送到RS上。
红色的代表应答报文:应答报文从服务器上到达director上的网卡2时,其源IP:RIP,目标IP:CIP。通过iptables上的prerouting-->forward-->postrouting,将应答报文的源地址改为VIP,应答报文送回到客户端,调度结束。
详细实现:
拓扑结构图:
1代表VIP所在网卡,其IP地址为172.16.125.5,采用桥接模式;
2代表DIP所在网卡,其IP地址为192.168.100.1,采用vmnet2模式;
3代表客户端,IP地址为172.16.125.127,外网,采用桥接模式;
4代表主机RS1,提供web等服务的后端服务器,其IP地址为192.168.100.2,网关为DIP(192.168.100.1),采用vmnet2模式;
5代表主机RS2,提供web等服务的后端服务器,其IP地址为192.168.100.3,网关为DIP(192.168.100.1),采用vmnet2模式。
配置步骤:
(1)在director上配置两块网卡,一块作为vip所在网卡,其IP地址为172.16.125.5(桥接模式)。一块作为地dip所在网卡,其IP地址为192.168.100.1,netmask=255.255.255.0(vmnet2)。
(2)在director上安装ipvsadm该程序包。
(3)配置两台RS,RS1的ip地址为192.168.100.2,gateway=192.168.100.1(使用vmnet2)。RS2的ip地址为192.168.100.3,gateway=192.168.100.1(使用vmnet2)。配置完IP地址后,使用ping命令测试RS1和RS2能否和网关以及互相之间进行通信。
(4)在两台RS上安装httpd,然后为了实现lvs的调度方法,在此处故意使得两个RS上提供的网页文件内容不一样,方便体现出效果。当然在实际的应用当中应该使两个RS上提供的网页内容一样。同时启动两个RS上的httpd服务。
注意:为了保证后续步骤可以正常进行,在director上首先对两台RS上的http服务进行测试。
(5)确保director上的iptables所有的规则都要清空,由于ipvs和iptables很多规则是不能共存的。打开内核中的核心转发功能。
查看是否打开了核心转发功能:
[root@7-1 ~]# sysctl -p net.ipv4.ip_forward = 1 [root@7-1 ~]# cat /proc/sys/net/ipv4/ip_forward
第一种方法:编辑/etc/sysctl.conf,在该配置文件中加入net.ipv4.ip_forward = 1即可。
(6)定义ipvs规则,将后端两台RS加入集群服务中。
[root@7-1 ~]# ipvsadm -A -t 172.16.125.5:80 -s rr [root@7-1 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.125.5:80 rr [root@7-1 ~]# ipvsadm -a -t 172.16.125.5:80 -r 192.168.100.2 -m [root@7-1 ~]# ipvsadm -a -t 172.16.125.5:80 -r 192.168.100.3 -m [root@7-1 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.16.125.5:80 rr -> 192.168.100.2:80 Masq 1 0 0 -> 192.168.100.3:80 Masq 1 0 0
(7)在此处使用的调度算法为rr,也就是轮询算法,进行测试显示调度效果。