LVS负载均衡集群中DR类型的架构图示如下:
图中,客户端发送的请求会由路由器和交换机转发后直接达到director。再由director调度给指定的real server ,最后由real server直接响应给客户端而不经过director,在此架构中director和real server的网络架构是此类型的重点。所以,配置DR类型一定要注意以下两点: (1) 各RS要直接响应Client,因此,各RS均得配置VIP;但仅能够让Director上的VIP能够与本地路由直接通信; (2) Director不会拆除或修改请求报文的IP首部,而是通过封闭新的帧首部(源MAC为Director的MAC,目标MAC为挑选出的RS的MAC)完成调度。 要完成上述的要求,着实很难,因为RS和DR都有VIP,而请求进入时必须最先发送给DR,所以,在DR类型中,首先通过ARP广播确认DR主机,其他RS主机不响应,这就确定了哪一个是DR主机。 但是在linux主机中,IP地址不属于网卡而是属于内核,就是说无论一个linux主机有多少个IP地址,它在接入的各个网络中都会公布它拥有的所有地址,这就给ARP广播的响应制造了困难,所以就需要修改内核参数来保证router发出ARP广播时,DR会响应RS不予响应,这里所说的内核参数分别为: #arp_announce:定义arp通知级别; 0:默认级别,在各个网络中通告本机所含有的所有地址 1:尽量不在各个网络中通告本机中含有的不属于该网络的地址 2:不在各个网络中通告本机中含有的不属于该网络的地址 #arp_ignore:定义arp忽略arp请求或arp通告的级别; 0:(默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 1:只回答目标IP地址是来访网络接口本地地址的ARP查询请求 2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 3:不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 4-7:保留未使用 8:不回应所有(本地地址)的arp查询
举例1:VIP、DIP、RIP在同一网段时的DR类型负载均衡 首先设计网络拓扑,我在这里准备三个虚拟机,V1作为director,V2、V3作为real server。
设计完拓扑,现在开始配置: 在V1上更改IP地址 Ifconfigeth0 172.16.50.11 up Ifconfig eth0:0 172.16.50.12 netmask255.255.255.255 broadcast 172.16.50.12 up Routeadd –host 172.16.50.12 dev eth0:0
在V2、V3上更改地址: Ifconfigeth0 172.16.50.21 up Ifconfiglo:0 172.16.50.12 netmask 255.255.255.255 broadcast 172.16.50.12 up Route add –host 172.16.50.12 dev lo:0 Ifconfigeth0 172.16.50.31 up Ifconfiglo:0 172.16.50.12 netmask 255.255.255.255 broadcast 172.16.50.12 up Routeadd –host 172.16.50.12 dev lo:0 不留图了 更改V2、V3的内核参数(不更改的话会ping不通) echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo2 > /proc/sys/net/ipv4/conf/all/arp_announce 如果觉得不放心的话,还可以再执行两个命令 echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce 现在就可以添加规则了 在V1上执行如下命令: Ipvsadm–A –t 172.16.50.12:80 –s rr Ipvsadm–a –t 172.16.50.12:80 –r 172.16.50.21 –g –w 1 这里加权重是为了以后改算法省事 Ipvsadm–a –t 172.16.50.12:80 –r 172.16.50.31 –g –w 2 这样就完成了同网段内DR类型的负载均衡配置。
举例2:VIP、DIP、RIP在不在同一网段时的DR类型负载均衡 首先设计网络拓扑,我在这里准备三个虚拟机,V1作为director,V2、V3作为real server。环境中应有两个网段172.16.0.1和192.168.0.254且打开了路由间转发功能。
设计完拓扑,现在开始配置: 在V1上更改IP地址 Ifconfigeth0 192.18.0.11 up Routeadd default gw 192.168.0.254 Ifconfigeth0:0 172.16.50.12 netmask 255.255.255.255 broadcast 172.16.50.12 up Routeadd –host 172.16.50.12 dev eth0:0 在V2、V3上更改地址: Ifconfigeth0 192.168.0.21 up Routeadd default gw 192.168.0.254 Ifconfiglo:0 172.16.50.12 netmask 255.255.255.255 broadcast 172.16.50.12 up Routeadd –host 172.16.50.12 dev lo:0 Ifconfigeth0 192.168.0.31 up Routeadd default gw 192.168.0.254 Ifconfiglo:0 172.16.50.12 netmask 255.255.255.255 broadcast 172.16.50.12 up Routeadd –host 172.16.50.12 dev lo:0 不留图了 更改V2、V3的内核参数(不更改的话会ping不通) echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo2 > /proc/sys/net/ipv4/conf/all/arp_announce 如果觉得不放心的话,还可以再执行两个命令 echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce 现在就可以添加规则了 在V1上执行如下命令: Ipvsadm–A –t 172.16.50.12:80 –s rr Ipvsadm–a –t 172.16.50.12:80 –r 192.168.0.21:80 –g –w 1 这里加权重是为了以后改算法省事 Ipvsadm–a –t 172.16.50.12:80 –r 192.168.0.31:80 –g –w 2 这样就完成了不通网段内DR类型的负载均衡配置。
注意:在普通电脑上实现这个负载均衡,访问页面时会反应比较慢,不要以为没成功,是慢!慢!慢!
|