前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LVS集群-DR模式

LVS集群-DR模式

作者头像
胡齐
发布2019-09-23 18:43:13
1.2K0
发布2019-09-23 18:43:13
举报
文章被收录于专栏:运维猫运维猫

2.1 LVS-DR和LVS-IP TUN集群概述

2.1.1 服务概述:

2.1.2 Direct Routing(直接路由)

director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing由于采用物理层(修改MAC地址)技术,因此所有服务器都必须在一个网段中。

2.1.3 IP Tunneling(IP隧道)

director分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的公网IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。

2.1.4 Direct Routing 和IP Tunneling 区别:

Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用数据链路层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

2.2 实战:配置LVS-DR集群

分发器IP配置

从拓扑图看出我们的eth0有2个IP地址,所以我们需要配置eht0和eth0:1两个IP

DIP===eth0===172.17.1.150 VIP===eth0:1===172.17.1.160

2.2.1 配置IP:

DIP: eth0 ip地址: 172.17.1.150

VIP: eth0:1 ip地址: 172.17.1.160

[root@localhost network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 #以配置以下信息

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=172.17.1.150

NETMASK=255.255.240.0

GATEWAY=172.17.0.1

网关:172.17.0.1

2.2.2 生成eth1配置文件

[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth1

[root@localhost network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 #写入以下内容

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=static

IPADDR=172.17.1.160

NETMASK=255.255.240.0

GATEWAY=172.17.0.1

HWADDR=00:0C:29:12:EC:1E #Mac地址必需要写成和eth0一样,否则出不来eth0:1这个网卡设备

[root@localhost network-scripts]# service network restart

[root@localhost network-scripts]# ip add #查看是否有eth0 和eth1

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 02:00:35:66:03:eb brd ff:ff:ff:ff:ff:ff

inet 172.17.1.150/20 brd 172.17.15.255 scope global eth0

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 02:00:7c:3f:00:34 brd ff:ff:ff:ff:ff:ff

inet 172.17.1.160/20 brd 172.17.15.255 scope global eth1

2.2.3 配置LVS-DR规则:

[root@localhost network-scripts]# yum install ipvsadm

[root@localhost network-scripts]# ipvsadm -A -t 172.17.1.160:80 -s rr

[root@localhost network-scripts]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.151 -g

[root@localhost network-scripts]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.152 -g

注:-g 表示DR模式,-m 表示IP tun 模式

[root@localhost network-scripts]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 172.17.1.160:80 rr

-> 172.17.1.151:80 Route 1 0 0

-> 172.17.1.152:80 Route 1 0 0

注:三个LVS 模式中,只有NAT模式需要开启路由转发功能。DR和TUN模式不需要开启。

2.2.4 两台RealServer的IP配置:

172.17.1.151、172.17.1.152:

配置IP:172.17.1.151

1、配置ip eth0,桥接模式

ifconfig eth0 172.17.1.152/20

2、回环接口

[root@localhost ~]# ifconfig lo 172.17.1.160 netmask 255.255.255.255

生成回环口配置文件:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo

DEVICE=lo

IPADDR=172.17.1.160

NETMASK=255.255.255.255

NETWORK=127.0.0.0

# If you're having problems with gated making 127.0.0.0/8 a martian,

# you can change this to something else (255.255.255.255, for example)

BROADCAST=127.255.255.255

ONBOOT=yes

NAME=loopback

3、网关指向公网出口路由器IP:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=172.17.0.1

4、启动80端口

echo yunweimao > /var/www/html/index.html

service httpd restart

2.2.3 关闭ARP转发(在两台RS上都需要同样的操作)。

同一个广播域: 配置了多个相同的VIP 是不允许的, 要想实现,就必须让外面的网络, 无法发现这个VIP的存在

因此在Linux里面, 可以修改内核参数, 实现接口IP的广播不响应、不广播

arp_ignore = 1 表示只回答目标IP是访问本地网络对应接口的arp请求

arp_announce = 2 只宣告本机网卡直连网络所在的ip的arp广播

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce

永久生效:(注意realserver的实际link ok的网卡是不是ens33)

[root@localhost ~]# vim /etc/sysctl.conf #最后添加

net.ipv4.conf.ens33.arp_ignore = 1

net.ipv4.conf.ens33.arp_announce = 2

或:

net.ipv4.conf.ens33.arp_ignore = 1

net.ipv4.conf.ens33.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

[root@localhost ~]# sysctl -p

参数说明:

arp_ignore 为:1 # - 只回答目标IP地址是访问本网络接口(eth0)的ARP查询请求。

自己的理解:

在设置参数的时候将arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的网卡设备上面没有这个ip,就不做出响应,默认是0,只要这台机器上面任何一个网卡设备上面有这个ip,就响应arp请求,并发送mac地址。

arp_announce (宣告)为2

2 - 对查询目标使用最适当的本地地址。例如,如果在eth0接口上接受到了一个VIP的arp请求包。内核判断这个VIP地址是不是eth0接口上的IP一样。如果一样,则回复这个包。如果不一样,就丢弃不回应。

2.2.4 配置real server 172.17.1.152

配置IP:172.17.1.152

1、配置ip eth0,桥接模式

ifconfig eth0 172.17.1.152/20

2、回环接口

[root@localhost ~]# ifconfig lo 172.17.1.160 netmask 255.255.255.255

生成回环口配置文件:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo

DEVICE=lo

IPADDR=172.17.1.160

NETMASK=255.255.255.255

NETWORK=127.0.0.0

# If you're having problems with gated making 127.0.0.0/8 a martian,

# you can change this to something else (255.255.255.255, for example)

BROADCAST=127.255.255.255

ONBOOT=yes

NAME=loopback

3、关闭ARP转发。

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce

永久生效:(注意realserver的实际link ok的网卡是不是eth0)

[root@localhost ~]# vim /etc/sysctl.conf #最后添加

net.ipv4.conf.ens33.arp_ignore = 1

net.ipv4.conf.ens33.arp_announce = 2

或:

net.ipv4.conf.ens33.arp_ignore = 1

net.ipv4.conf.ens33.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

[root@xuegod64 ~]# sysctl -p

4、网关指向公网出口路由器IP:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=172.17.0.1

5、启动80端口

echo maoxiaopu > /var/www/html/index.html

service httpd restart

客户端测试访问vip:

先测试real server :

http://172.17.1.151

http://172.17.1.152

或物理机上测试:

http://172.17.1.160

[root@localhost ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 172.17.1.160:80 59 314 0 26446 0

-> 172.17.1.151:80 29 164 0 13881 0

-> 172.17.1.152:80 30 150 0 12565 0

注:测试时,不要在分发器上测试。那样测试是不行的

2.3 LVS的多种调度模式:

[root@localhost ~]# ipvsadm -h

--scheduler -s scheduler(ˈskejələr调度) one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc.

-s rr

轮循法

-s wrr

带权重的循环法

-s lc

最少连接法

-s wlc

带权重的最少连接法

-s lblc

基于本地的最少连接法

-s dh

目标散列法

-s sh

源散列法

-s sed

最短预期延迟法

-s nq

永不排队法

注:调度算法配置后立即生效,就像iptables配置规则一样。

2.3.1 每个调度算法详细说明:

------------------------------------------------------------------------------------------------

1、rr - round robin

--- 在服务器池中无穷的循环中遍历

2、wrr - Weighted Round Robin

--- 基于集群节点可以处理多少来分配给每个节点一个权重值。权重值为2的服务器将收到权重值为1的服务器的两倍的连接数量。如果服务器的权重为0 ,则不会收到新的连接请求(但当前活动的已经建立的连接将不会丢失)。

3、lc - Least-Connection

--- 当新的请求到达director时,director查看活动和非活动的连接数量,以确定把请求分发给哪个服务器。

director将集群节点目前的活动连接数量x256 再加上不活动的连接数量,得到节点的开 销值。最低开销值的节点胜出,被分发给新的入站请求。(如果开销一样,则第一个节点被选中)

4、wlc - Weighted Least-Connection

--- 先如上算出集群节点的开销值,然后除以分配给其的权重值,最小值节点胜出,将入站请求分发给它。

5、lblc - Locality-Based Least-Connection

--- 基于局部的最小连接,当real server是缓存服务器时用得比较多

6、lblcr - Locality-Based Least-Connection with Replication

--- 带复制的基于局部的最小连接,当real server是缓存服务器时用得比较多

7、dh - Destination Hashing

8、sh - Source Hashing

--- 同一个ip的客户端总是分发给同一个real server。

让客户端总是能访问到自己的会话信息,这种机制叫会话保持。

基于ip地址标识客户端的缺点:很多内网用户会伪装成公网ip,来访问服务器,不能人为的控制负载均衡。

比较高级的方法是基于客户端提供我们的session id来实现会话保持。

haproxy(做负载均衡的软件)可以实现基于会话信息来判断保持会话。

扩展:

如何保持会话一致:

1、如果总是保持和一个RS会话,这台RS如果故障了,要确定另一个RS也有会话信息,所有的RS保持数据同步。

会话同步的方法:

1、所有的RS把自己的会话信息保存到数据库当中(memcached软件)。

9、sed - Shortest Expected Delay最短延时预测 (Ci+1)/Ui Ci连接数 Ui权重值

--- 在wlc方法上做了轻微改进,这些服务使用tcp,而且当群节点在处理每个请求时保持

在活动状态。

计算方法:每个休群节点的开销值是通过将活动的连接数加1计算的。然后开销值除以

分配给每个节点的权重,以取得SED值,具有最低SED值的集群节点胜出。

10、nq - Never Queue没有队列,分配请求给空闲的服务器,没有空闲的就找响应最快的,

--- 如果集群节点中没有活动的连接,不管每个集群节点SED计算值的结果,它始终被

分配置服务的新入站请求。

HTTP的会话(session)信息:

cookies客户端(client)自己保存缓存

会话(session)服务器(server)端保存

2.3.2 实例:

例1:测试LVS 其它调度算法,如LVS-DR wrr diào dù

[root@localhost ~]# ipvsadm -C

[root@localhost ~]# ipvsadm -A -t 172.17.1.160:80 -s wrr

[root@localhost ~]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.151 -g -w 10

[root@localhost ~]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.152 -g -w 20

[root@localhost ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 172.17.1.160:80 0 0 0 0 0

-> 172.17.1.151:80 0 0 0 0 0

-> 172.17.1.152:80 0 0 0 0 0

测试:

在物理机上,刷新9次这个链接:http://172.17.1.160/

查看:

[root@localhost ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 172.17.1.160:80 9 67 0 6484 0

-> 172.17.1.151:80 3 20 0 1934 0

-> 172.17.1.152:80 6 47 0 4550 0

# 一共9次连接, 172.17.1.151:172.17.1.152 是1:2 关系。 说明权重越大,获得的连接说越多。

例2:如果一个real server 的权重是0,将不再分配给他客户端的请求

[root@localhost ~]# ipvsadm -C

[root@localhost ~]# ipvsadm -A -t 172.17.1.160:80 -s wrr

[root@localhost ~]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.151 -g -w 0

[root@localhost ~]# ipvsadm -a -t 172.17.1.160:80 -r 172.17.1.152 -g -w 20

在物理机上,刷新9次这个链接:http://172.17.1.160/

查看:

[root@localhost ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 172.17.1.160:80 8 54 0 5244 0

-> 172.17.1.151:80 0 0 0 0 0 #请求为0

-> 172.17.1.152:80 8 54 0 5244 0

另外:

ipvsadm -L -n --stats

发现进来的包是有的,但是出去的包为0

InPkts OutPkts

0

因为数据包出去时,直接交给了real server,而没有交给Director

扩展:

ipvsadm 更多参数说明

-L -n ==> 查看规则,显示内核虚拟服务器表

-L -n -c ==> 查看客户端连接分发器和real server 的情况

[root@localhost ~]# ipvsadm -L -n -c

IPVS connection entries

pro expire state source virtual destination

TCP 00:08 FIN_WAIT 192.168.255.23:49518 172.17.1.160:80 172.17.1.152:80

TCP 00:11 FIN_WAIT 192.168.255.23:49524 172.17.1.160:80 172.17.1.152:80

TCP 00:12 FIN_WAIT 192.168.255.23:49525 172.17.1.160:80 172.17.1.152:80

TCP 01:08 FIN_WAIT 192.168.255.23:49537 172.17.1.160:80 172.17.1.152:80

TCP 00:09 FIN_WAIT 192.168.255.23:49522 172.17.1.160:80 172.17.1.152:80

-L -n --stats ==> 查看分发情况

-L -n --rate ==> 查看速率

• -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

[root@localhost ~]# ipvsadm -Z

[root@localhost ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 172.17.1.160:80 0 0 0 0 0

-> 172.17.1.151:80 0 0 0 0 0

-> 172.17.1.152:80 0 0 0 0 0

实例2:删除一条记录

[root@localhost ~]# ipvsadm -d -t 172.17.1.160:80 -r 172.17.1.151

[root@localhost ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 172.17.1.160:80 wrr

-> 172.17.1.152:80 Route 20 0 0

-C --clear 清除内核虚拟服务器表中的所有记录。

例3:清空所有记录

[root@localhost ~]# ipvsadm -C

其他查看方式:

--stats 显示统计信息

[root@localhost ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 172.17.1.160:80 0 0 0 0 0

-> 172.17.1.152:80 0 0 0 0 0

--rate 显示速率信息

[root@localhost ~]# ipvsadm -L -n --rate

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS

-> RemoteAddress:Port

TCP 172.17.1.160:80 0 0 0 0 0

-> 172.17.1.152:80 0 0 0 0 0

-c --connection 显示LVS 目前的连接

[root@localhost ~]# ipvsadm -L -n -c

IPVS connection entries

pro expire state source virtual destination

LVS的规则配置文件:/etc/sysconfig/ipvsadm

配置文件方法:

[root@localhost ~]# ipvsadm-save>/etc/sysconfig/ipvsadm 可以保存。

LVS的规则存储配置文件:/etc/sysconfig/ipvsadm

[root@localhost ~]# cat /etc/sysconfig/ipvsadm

-A -t 172.17.1.160:http -s wrr

-a -t 172.17.1.160:http -r 172.17.1.152:http -g -w 20

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档