LVS-DR 模式安装

2018-01-12 11:13:23来源:网络收集作者:咖啡不加糖人点击

分享

阿里云爆款
一、准备工作——LVS Server

为了让您了解LVS的另外设置方式,本次我们使用VIP的方式,而不是两张网卡的方式(当然您也可以用两张网卡的方式)。VIP的方式是后面我们将讲到的LVS + Keepalived组合工作模式的常用方式。所谓VIP就是虚拟IP,是指这个IP不会固定捆绑到某一个网卡设备,而是通过ifconfig命令绑定,并在“适当时候”这种绑定关系会随之变化。


DIP:192.168.1.57
VIP:192.168.1.100


1、设置VIP信息
[[email protected] ~]# ifconfig ens33:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up
[[email protected] ~]# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.1.57netmask 255.255.255.0broadcast 192.168.1.255
inet6 fe80::2a8d:be6:a4a8:ea0prefixlen 64scopeid 0x20
ether 00:0c:29:24:26:9ctxqueuelen 1000(Ethernet)
RX packets 98059bytes 7746619 (7.3 MiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 942bytes 114751 (112.0 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
ens33:0: flags=4163mtu 1500
inet 192.168.1.100netmask 255.255.255.255broadcast 192.168.1.100
ether 00:0c:29:24:26:9ctxqueuelen 1000(Ethernet)
lo: flags=73mtu 65536
inet 127.0.0.1netmask 255.0.0.0
inet6 ::1prefixlen 128scopeid 0x10
looptxqueuelen 1(Local Loopback)
RX packets 273bytes 25704 (25.1 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 273bytes 25704 (25.1 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
2、设置路由信息
[[email protected] ~]# route add -host 192.168.1.100 dev ens33:0
[[email protected] ~]# route
Kernel IP routing table
Destination GatewayGenmaskFlags Metric RefUse Iface
default192.168.1.1 0.0.0.0UG1010 0 ens33
192.168.1.0 0.0.0.0255.255.255.0 U 1000 0 ens33
192.168.1.100 0.0.0.0255.255.255.255 UH00 0 ens33
3、通过一个外网IP,可以ping通这个VIP(下面这个DOS系统是VM的母机)
C:/Users/1234>ping 192.168.1.100
正在 Ping 192.168.1.100 具有 32 字节的数据:
来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.100 的回复: 字节=32 时间<1ms TTL=64
192.168.1.100 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms

以上,我们完成了LVS主机设置LVS-DR工作模式的准备工作。注意:


在您设置过程中,防火前最好关闭,但在正式生产环境中,LVS的防火强最好打开。
VIP信息在LVS主机重启后,会消失。所以您最好将设置VIP的命令做成一个脚本。
二、准备工作——Real Server

RIP:192.168.1.51


真实服务器的准备工作,需要保证真实服务器能够访问外网网关,并且保证由LVS改写的报文能够被Real Server处理,这就需要做一个回环IP。


1、设置回环IP

将报文的帧重新交给交换机的时候,交换机会根据目标MAC重新发往realserver,当realserver收到请求之后目标地址由于是VIP,因此为了让realserver接收目标地址为vip的报文,在每个realserver必须配置vip的地址,不然不匹配报文无法接收,也就意味着每个realserver都必须配置vip


# 指定广播地址为自己本机,不对外做任何广播,说明不需要与任何主机通信,只将在响应客户端的请求的时候将自己做为源地址。
[[email protected] www.test1.com]# ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up
[[email protected] www.test1.com]# ifconfig
ens33: flags=4163mtu 1500
inet 192.168.1.51netmask 255.255.255.0broadcast 192.168.1.255
inet6 fe80::853a:c1a1:7172:a45dprefixlen 64scopeid 0x20
inet6 fe80::2a8d:be6:a4a8:ea0prefixlen 64scopeid 0x20
ether 00:0c:29:1a:76:7etxqueuelen 1000(Ethernet)
RX packets 100117bytes 7785003 (7.4 MiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 1568bytes 218186 (213.0 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
lo: flags=73mtu 65536
inet 127.0.0.1netmask 255.0.0.0
inet6 ::1prefixlen 128scopeid 0x10
looptxqueuelen 1(Local Loopback)
RX packets 72bytes 6248 (6.1 KiB)
RX errors 0dropped 0overruns 0frame 0
TX packets 72bytes 6248 (6.1 KiB)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
lo:0: flags=73mtu 65536
inet 192.168.1.100netmask 255.255.255.255
looptxqueuelen 1(Local Loopback)
2、设置路由信息

响应报文从哪个接口出去,则将哪个接口的地址当做源地址。所以,为了使得源地址是VIP还必须加一条路由,如果主机目标地址是vip的,那么一定要通过lo接口出去。


[[email protected] www.test1.com]# route add -host 192.168.1.100 dev lo:0
[[email protected] www.test1.com]# route
Kernel IP routing table
Destination GatewayGenmaskFlags Metric RefUse Iface
default192.168.1.1 0.0.0.0UG1000 0 ens33
192.168.1.0 0.0.0.0255.255.255.0 U 1000 0 ens33
192.168.1.100 0.0.0.0255.255.255.255 UH00 0 lo
3、关闭这台机器进行ARP查询的功能

事实上路由器将报文转发至directory之前要先进行arp广播请求,arp广播的意义是将vip转换为mac地址,那么按理来讲我们的realserver都配置了vip,也就意味着所有配置vip的主机都能响应其报文,很显然这么就乱套了,所以我们就期望进来的请求只到达directory,不然负载均衡就没有意义了。


[[email protected] www.test1.com]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] www.test1.com]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[[email protected] www.test1.com]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[[email protected] www.test1.com]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

以上设置完成。完成后,您需要通过ping命令,检查一下网关是否可用(最好可以瓶ping一下外网的某个地址,例如163.com)。LVS-DR模式下,Real Server是直接向请求方返回结果,所以一定要保证网关时可用的。


[[email protected] www.test1.com]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=55 time=18.0 ms
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=2 ttl=55 time=17.6 ms
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=3 ttl=55 time=19.6 ms
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=4 ttl=55 time=17.1 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3010ms
rtt min/avg/max/mdev = 17.130/18.112/19.602/0.932 ms
4、看看Nginx是不是工作正常的

很重要的一点:Nginx服务器要监听在VIP上,即 lo:0 上。


[[email protected] ~]# curl 192.168.1.100
192.168.3.11

Nginx的安装配置请参考:Nginx 服务器安装与配置


Nginx虚拟机的配置请参考


Nginx 虚拟主机配置的三种方式(一)(基于IP)
Nginx 虚拟主机配置的三种方式(二)(基于端口)
Nginx 虚拟主机配置的三种方式(三)(基于域名)

按照同样的步骤多陪几台服务器,便于测试。


完成准备工作后,我们可以开始安装和配置LVS了。


三、开始安装和配置LVS-DR模式
[[email protected] www.test1.com]# ipvsadm -C
[[email protected] www.test1.com]# ipvsadm -At 192.168.1.100:80 -s rr
[[email protected] www.test1.com]# ipvsadm -at 192.168.1.100:80 -r 192.168.1.51 -g

介绍一下新出现的参数:


-g –gatewaying 指定LVS 的工作模式为直接路由模式DR模式(也是LVS默认的模式)。
四、配置完成,进行测试

接下来,我们就可以在外网,通过192.168.1.100这个IP访问配置的这几台Real Server上的Nginx服务了:


LVS-DR 模式安装


LVS-DR 模式安装


测试时,每次请求之前要清空浏览器缓存,这样才可以看到轮询的结果。


附、配置过程中问题
1、测试时,出现“192.168.1.10 连接被拒绝的”情况

使用命令 ipvsadm -lcn ,出现如下问题:


CP 00:54 SYN_RECV h100:12949 192.168.1.100:80 h104:80

原因如下:


realserver的服务监听IP我选择了监听指定的IP,即eth0的IP,而未监听lo,即本地地址,那么即使收到了由directoryserver转发的请求,通过本地广播给本机的lo:0,因为服务没有监听lo,所以也不会有响应。


2、arp_ignore 和 arp_announce

arp_ignore响应级别:当接收到ARP请求时是否选择响应的级别。


默认0将本机任何接口上的任何地址向外通告;
1:请求的目标IP配置在对外通信接口(一般是eth0)上,才响应;
2:..
3:..

arp_announce向外通知级别:定义将自己地址主动向外通知的级别;


默认0;
1:本地接口地址不止一个,如果某个本地接口地址不在ARP请求的目标地址所在的子网络,就避免通告;
2:响应最佳本地地址。即只有目标地址在网络接口的通信接口上,才予以回应。即通信接口(eth0)上的地址就是目标地址,才予以响应,当然如果没匹配,还是可以有其他响应的,先理解到这就可以了。

例如:假设一台主机,两个网卡,MAC1和MAC2


MAC1上边的网络接口有 eth0 和 lo。
IP地址配置为:


eth0配置192.168.10.3/24;
lo:0配置172.168.19.2/16;
lo:1配置192.168.10.111/24。

这里eth0和lo:1在同一子网。


MAC2 上边就一个接口eth0,配置IP 192.168.122.7/24。


若arp_announce=1:我们知道如果要通信,则一定是经过eth0接口,所以


当目标请求lo:1时,则在目标子网络中的接口有eth0,所以就会响应ARP请求;
当目标请求lo:0,则目标网络中没有eth0,所以不响应。

注意到LVS-DR模型,VIP、DIP和RIP都在同一网段哦,所以设置arp_announce=1是不行的,因为RS主机上eth0上的RIP和lo:0上的VIP在同一网段,所以收到ARP广播是会响应的。


若arp_announce=2:通告最佳本地地址,即只有目标地址在网络接口的通信接口上,才予以回应。即通信接口(eth0)上的地址就是目标地址,才予以响应。


再了解一个概念:


一个RS主机有两个网络接口(不是两个网卡哦,说白了就是eth0和lo是两个接口,但是是同一个网卡,所以只有一个MAC,但是所有向外通信都是通过eth0这个接口),一个eth0一个lo,对吧,我们将VIP配置到lo接口的别名lo:0上,如果VIP要通信,则一定是通过eth0,对吧,也就是说当收到ARP广播请求VIP地址时,请求是通过eth0进来的,而VIP将以eth0的MAC并通过eth0予以响应,所以我们只要设置了忽略响应级别和响应级别,即设置只要请求的IP不是配置在eth0接口上,一律不予响应(arp_ignore的意义)


3、关于LVS-DR中的一个普遍误区:lo:0配置路由

关于LVS-DR中的一个普遍误区:lo:0配置路由


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台