LVS配置命令理解2
使用ipvsadm安装LVS服务
#ipvsadm -A -t 192.168.31.173:http -s rr
其中ipvsadm的安装过程就略过。ipvsadm是LVS服务的配置接口工具。
-A:添加虚拟服务器
-t:表示TCP协议
192.168.31.108:http: 与-t一起组成虚拟服务器,IP地址、端口号、协议组成的三元组。
-s:表示调试器算法选项
rr:表示使用的调度器算法是Round Robin
这个命令执行完成后,就在当前的计算机上添加了LVS的虚拟服务器。
使用ipvsadm添加真实服务器
ipvsadm -a -t 192.168.31.173:http -r 192.168.31.172 -g -w 1
-a: 表示要向虚拟服务器添加一个真实服务器器。
-t 192.168.31.173:http 与前面提到的一样,是表示一个虚拟服务器。分别是协议,IP地址,端口。因为http默认的端口是80。所以也用http来表示了。
-r 192.168.31.172: 表示要添加一个真实物理地址为192.168.31.172的真实服务器,这个服务器上运行着http服务。即有服务器进程在监听着80端口。
-g: 表示要使用直接直接路由方式来转发请求。
-w 1: 表示分配给此真实服务器的权重。这个值默认就是1,而且前面设置的调度算法是round robin,是平等地把请求分发给后端服务器,所以这里的设置没有什么意义。
真实服务器上的设置
配置本地回环接口lo
#ifconfig lo:0 192.168.31.107 netmask255.255.255.255
同负载均衡器上配置类似,此处也为后端服务器上的本地回还口配置了一个相同的虚拟IP地址。至于为什么也要这样配置,后面细说。
原因:DR模式下只修改了链路层包的MAC地址,替换为real server的。但目的IP还是负载均衡IP地址,所以real server收到包之后,发现匹配不上自己的IP,会把包丢弃。所以需要在lo口上配置负载均衡IP,让包能正常收到。
为lo添加路由
#route add -host 192.168.31.107 dev lo:0
为192.168.31.107的虚拟服务器地址添加一条路由,发往这个IP地址的数据都要传送到本地的回环接口上去。
add:表示要添加一个跌幅条目。
-host:表明针对一个主机添加一个路由。
dev: 表明要发送往的接口。
开启IP数据包转发
这个同之前在负载均衡器上做的一样。
ARP隐藏
#echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
#echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
#echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
#echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
此处是进行ARP隐藏。有针对lo的接口设置,也有针对所有接口的设置。关于这里的设置,我还是不太明白,研究清楚之后,再写一篇。
LVS/DR工作过程的梳理
1、客户端向服务器发起请求,目标地址是前述的配置的集群对外的公网IP
到达负载均衡器之前会经过子网网关,是一个路由器。
路由器根据请求的公网IP地址和端口,进行映射,得到本地子网下的IP地址。这个本地的IP地址其实就是真正的虚拟IP地址。
路由器发出ARP请求广播,询问虚拟IP地址的MAC地址,由于真实服务器都进行了ARP隐藏,所以只有负载均衡器会响应这个ARP广播。
客户端的请求,被发往负载均衡器。
2、负载均衡器处理
收到请求后,根据真实服务器的配置信息,及统计信息,选择一个真实服务器,修改以太网数据包中的MAC地址为目标真实服务器的MAC地址。前提是也进行了一次ARP广播请求得到了此真实服务器的MAC地址。
将以太网数据帧发出。
3、真实服务器处理
真实服务器看到以太网数据帧中的MAC地址是自己的,就接收。
IP层解析过程中,会根据前述配置的路由信息,把目的地址为虚拟IP地址的数据包,发到回环上。
到此回环口接到信息,至此IP地址匹配,认为是发送给自己的数据包,真实服务器接收数据包。
完成处理后,服务器会把目的地址与源地址填写好,发出去。
此时数据包直接到达子网网关路由器,不经过负载均衡器。