LVS | LVS-DR 模式安装

一、准备工作——LVS Server

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

DIP:192.168.1.57
VIP:192.168.1.100

1、设置VIP信息
[root@bogon ~]# ifconfig ens33:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up
[root@bogon ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.57  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::2a8d:be6:a4a8:ea0  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:24:26:9c  txqueuelen 1000  (Ethernet)
        RX packets 98059  bytes 7746619 (7.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 942  bytes 114751 (112.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.255  broadcast 192.168.1.100
        ether 00:0c:29:24:26:9c  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 273  bytes 25704 (25.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 273  bytes 25704 (25.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
2、设置路由信息
[root@bogon ~]# route add -host 192.168.1.100 dev ens33:0
[root@bogon ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    101    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.1.100   0.0.0.0         255.255.255.255 UH    0      0        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.100Ping 统计信息:
    数据包: 已发送 = 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

# 指定广播地址为自己本机,不对外做任何广播,说明不需要与任何主机通信,只将在响应客户端的请求的时候将自己做为源地址。
[root@bogon www.test1.com]# ifconfig lo:0 192.168.1.100 broadcast 192.168.1.100 netmask 255.255.255.255 up
[root@bogon www.test1.com]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.51  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::853a:c1a1:7172:a45d  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::2a8d:be6:a4a8:ea0  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1a:76:7e  txqueuelen 1000  (Ethernet)
        RX packets 100117  bytes 7785003 (7.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1568  bytes 218186 (213.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 72  bytes 6248 (6.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 6248 (6.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.1.100  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
2、设置路由信息

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

[root@bogon www.test1.com]# route add -host 192.168.1.100 dev lo:0
[root@bogon www.test1.com]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.1.100   0.0.0.0         255.255.255.255 UH    0      0        0 lo
3、关闭这台机器进行ARP查询的功能

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

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

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

[root@bogon 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 上。

[root@localhost ~]# curl 192.168.1.100
192.168.3.11

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

Nginx虚拟机的配置请参考

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

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

三、开始安装和配置LVS-DR模式
[root@bogon www.test1.com]# ipvsadm -C
[root@bogon www.test1.com]# ipvsadm -At 192.168.1.100:80 -s rr
[root@bogon 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服务了:

这里写图片描述

这里写图片描述

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


附、配置过程中问题
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配置路由

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值