Linux上LVS-DR模式部署点滴 lvskeepaliveddiprscip
程序员文章站
2022-07-13 09:37:40
...
************************************
环境:
vip=192.168.15.111
director_ip=192.168.15.100,192.168.15.101
real_server_ip=192.168.15.102,192.168.15.103
术语:
1> vip => virtual server ip-address
2> cip=> client ip
3> dip=> director ip
4> rs => Real Server
注意:
1> 发送到Loopback逻辑网卡上的数据将路由不出去;
2> 两个Director主机中,同时只能有一个上面的vip是生效的;
3> Director所在主机的路由表中,无需存在vip的路由信息;
4> RealSever上同时会挂VIP,但是注意其子网掩码必须是4个255,即255.255.255.255;
5> 如果是公网IP NAT到VIP上,建议采用全端口号映射方式,而不是仅映射指定端口号,避免由RS出去的数据包,不能总是到达客户端ip;
6> 参数arp_ignore和arp_announce分别有all,default,lo,eth0等对应不同网卡。当all和具体网卡的参数值不一致时,配置为较大值的生效。一般只需修改all和某个具体网卡的参数即可。
********************************
【DIP】
路由上无需存在vip的信息:
[devuser@your_hn_15_100 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
***************************
[devuser@your_hn_15_101 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
*************************************
[devuser@your_hn_15_100 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:c4:09 brd ff:ff:ff:ff:ff:ff
inet 192.168.15.100/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
inet 192.168.15.111/32 scope global ens192
valid_lft forever preferred_lft forever
**************************************************
[devuser@your_hn_15_101 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:d3:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.15.101/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
***********************************************
【RS】
[devuser@your_hn_15_102 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.15.111/32 brd 192.168.15.111 scope global lo:0
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:99:7c brd ff:ff:ff:ff:ff:ff
inet 192.168.15.102/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
************************************************
[devuser@your_hn_15_103 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.15.111/32 brd 192.168.15.111 scope global lo:0
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:12:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.15.103/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
************************************************
[devuser@your_hn_15_103 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
192.168.15.111 0.0.0.0 255.255.255.255 UH 0 0 0 lo
*******************************************************
[devuser@your_hn_15_102 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
192.168.15.111 0.0.0.0 255.255.255.255 UH 0 0 0 lo
********************************************************
【ARP抑制】
echo 1 > /proc/sys/net/ipv4/conf/ens192/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens192/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_ignore:
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
arp_announce:
2:只向该网卡回应与该网段匹配的ARP报文。
具体操作如下:
********************************************************
【写在最后】=>LVS-DR解读
>>>DR模式只是针对源和目标MAC地址做出修改,源和目标IP还是不变;当请求报文由LVS服务器处理后发送到后端服务器RS上,
RS拆封报文时会发现目标MAC是自己的MAC地址,但是目标IP是VIP,与本地IP地址不符合,那么RS就会认为不是发给自己的报文,
所以此时需要在RS上配置VIP,这样RS就可以接受目标地址为VIP的请求报文了。
注意:此条讲的是RS上为什么要配置VIP?
>>>如果将VIP设置在RS的网卡上,假设有多台RS并且每台RS上都配置了VIP,在这个网络中发出VIP的ARP请求,
就有多个RS响应,这样肯定是不可以;因此就把VIP配置到回环地址lo网卡上,然后让lo网卡忽略所有ARP请求,eth0网卡正常响应ARP请求,
这样网络中就不会收到RS关于VIP的响应;还有一个问题就是当本地网卡响应ARP请求时,也有可能通过lo网卡回应,
然后把VIP作为ARP请求的源IP通告出去,那么就必须禁止VIP作为ARP请求的源IP,这个问题可以通过修改arp_announce参数解决。
注意:此条讲的是RS上VIP配置在哪个设备上(lo)?
>>>由于客户端发起的请求报文源IP为CIP,目标IP为VIP;所以客户端收到的响应报文源IP必须为VIP,目标IP必须为CIP,
因此在RS发送的响应报文必须由VIP的lo网卡发出,这就需要在RS上指定一条路由,目标IP为VIP的数据包使用lo网卡发出,
然后经由eth0转发到网关再到公网客户端。
注意:此条讲的是VIP的使用规则?
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力:
环境:
vip=192.168.15.111
director_ip=192.168.15.100,192.168.15.101
real_server_ip=192.168.15.102,192.168.15.103
术语:
1> vip => virtual server ip-address
2> cip=> client ip
3> dip=> director ip
4> rs => Real Server
注意:
1> 发送到Loopback逻辑网卡上的数据将路由不出去;
2> 两个Director主机中,同时只能有一个上面的vip是生效的;
3> Director所在主机的路由表中,无需存在vip的路由信息;
4> RealSever上同时会挂VIP,但是注意其子网掩码必须是4个255,即255.255.255.255;
5> 如果是公网IP NAT到VIP上,建议采用全端口号映射方式,而不是仅映射指定端口号,避免由RS出去的数据包,不能总是到达客户端ip;
6> 参数arp_ignore和arp_announce分别有all,default,lo,eth0等对应不同网卡。当all和具体网卡的参数值不一致时,配置为较大值的生效。一般只需修改all和某个具体网卡的参数即可。
********************************
【DIP】
路由上无需存在vip的信息:
[devuser@your_hn_15_100 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
***************************
[devuser@your_hn_15_101 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
*************************************
[devuser@your_hn_15_100 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:c4:09 brd ff:ff:ff:ff:ff:ff
inet 192.168.15.100/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
inet 192.168.15.111/32 scope global ens192
valid_lft forever preferred_lft forever
**************************************************
[devuser@your_hn_15_101 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:d3:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.15.101/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
***********************************************
【RS】
[devuser@your_hn_15_102 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.15.111/32 brd 192.168.15.111 scope global lo:0
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:99:7c brd ff:ff:ff:ff:ff:ff
inet 192.168.15.102/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
************************************************
[devuser@your_hn_15_103 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet 192.168.15.111/32 brd 192.168.15.111 scope global lo:0
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:9e:12:3f brd ff:ff:ff:ff:ff:ff
inet 192.168.15.103/21 brd 192.168.15.255 scope global ens192
valid_lft forever preferred_lft forever
************************************************
[devuser@your_hn_15_103 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
192.168.15.111 0.0.0.0 255.255.255.255 UH 0 0 0 lo
*******************************************************
[devuser@your_hn_15_102 ~]$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.1 0.0.0.0 UG 0 0 0 ens192
192.168.8.0 0.0.0.0 255.255.248.0 U 0 0 0 ens192
192.168.15.111 0.0.0.0 255.255.255.255 UH 0 0 0 lo
********************************************************
【ARP抑制】
echo 1 > /proc/sys/net/ipv4/conf/ens192/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens192/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
arp_ignore:
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
arp_announce:
2:只向该网卡回应与该网段匹配的ARP报文。
具体操作如下:
==>RS上配置路由时,是配置到lo上还是lo:0上?==>操作时针对lo:0 ## 添加IP地址为VIP的虚拟网卡lo:0 ==>ifconfig lo:0 192.168.15.111 broadcast 192.168.15.111 netmask 255.255.255.255 ## 添加一条路由,目标IP为VIP的数据包使用lo接口发送,这样响应报文的源IP就会为VIP ==>route add -host 192.168.15.111 dev lo:0 ==>操作时针对lo:0,只是route展示时,显示的是lo ==>inet 192.168.15.111/32 brd 192.168.15.111 scope global lo:0
********************************************************
[devuser@your_hn_15_100 ~]$ cat /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface ens192 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass your_password } virtual_ipaddress { 192.168.15.111 } } virtual_server 192.168.15.111 443 { delay_loop 6 lb_algo sh lb_kind DR persistence_timeout 3600 protocol TCP real_server 192.168.15.109 443 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 443 } } real_server 192.168.15.110 443 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 443 } } } virtual_server 192.168.15.111 7885 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 3600 protocol TCP real_server 192.168.15.102 7885 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 7885 } } real_server 192.168.15.103 7885 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 7885 } } }
【写在最后】=>LVS-DR解读
>>>DR模式只是针对源和目标MAC地址做出修改,源和目标IP还是不变;当请求报文由LVS服务器处理后发送到后端服务器RS上,
RS拆封报文时会发现目标MAC是自己的MAC地址,但是目标IP是VIP,与本地IP地址不符合,那么RS就会认为不是发给自己的报文,
所以此时需要在RS上配置VIP,这样RS就可以接受目标地址为VIP的请求报文了。
注意:此条讲的是RS上为什么要配置VIP?
>>>如果将VIP设置在RS的网卡上,假设有多台RS并且每台RS上都配置了VIP,在这个网络中发出VIP的ARP请求,
就有多个RS响应,这样肯定是不可以;因此就把VIP配置到回环地址lo网卡上,然后让lo网卡忽略所有ARP请求,eth0网卡正常响应ARP请求,
这样网络中就不会收到RS关于VIP的响应;还有一个问题就是当本地网卡响应ARP请求时,也有可能通过lo网卡回应,
然后把VIP作为ARP请求的源IP通告出去,那么就必须禁止VIP作为ARP请求的源IP,这个问题可以通过修改arp_announce参数解决。
注意:此条讲的是RS上VIP配置在哪个设备上(lo)?
>>>由于客户端发起的请求报文源IP为CIP,目标IP为VIP;所以客户端收到的响应报文源IP必须为VIP,目标IP必须为CIP,
因此在RS发送的响应报文必须由VIP的lo网卡发出,这就需要在RS上指定一条路由,目标IP为VIP的数据包使用lo网卡发出,
然后经由eth0转发到网关再到公网客户端。
注意:此条讲的是VIP的使用规则?
【温馨提示】
如果您觉得满意,可以选择支持下,您的支持是我最大的动力: