集群之LVS的详细介绍

LVS是Linux Virtual Server的简写,意思是Linux虚拟服务器,它工作在input链上,当客户端发送的请求到达input链上以后,通过LVS的验证若是关于lvs的请求就会在此链上直接修改目标地址,而后通过postrouting链传送给其定义的服务器,LVS和iptables不能同时使用。

一、LVS的原理

1、NET的基本原理

把从客户端发来的IP包的IP头目的地址在DR上换成其中一台RS(real server)的IP地址并发至此RS,而RS则在处理完成后把数据经过DR主机发回给客户端,DR在这个时候再把数据包的源IP地址转换为DR接口上的IP地址即可,期间,无论是进来的数据还是出去的数据都必须经过DR。如下图所示:

clip_p_w_picpath002

LVS/NET 模型

2、DR的基本原理:

1)LVS调度器收到目标地址为VIP的请求包后,将MAC地址改成RS的MAC地址,并通过交换机(链路层)发给RS

2)RS的链路层收到请求后,往上传给IP层。IP层需要验证请求的目标IP地址。所以RS需要配置一个VIP的loopback(以下简称为lo,意为环回接口)device。这样RS的IP层收到报文后,会往上递交给传输层,之所以配置成lo,是因为lo对外不可见,不会跟LVS的VIP起冲突。

3)RS处理完成后,将应答包直接返回给客户端。若是公网服务器,则RS需要连接在互联网(公网IP或网关)才能将应答包返回。如下图所示:

clip_p_w_picpath004

LVS/DR 模型

3、TUN的基本原理

TUN模式使用网络分层的原理,把从客户端发来的数据包基础上,封装一个新的IP头标记(不完整的IP头,只有目的IP部)发给RS,RS收到后先把DR发过来的数据包头给解开,还原其数据包原样,处理后,直接返回给客户端,而不需要再经过DR。需要注意的是由于RS需要对DR发过来的数据包进行还原,也就是说必须支持IP TUNNEL协议,所以在RS的内核中,必须编译支持IP TUNNEL这个选项。

二、LVS的类型有哪些?它们各有什么特点?

1)NAT:地址转换(类似DNAT)

集群节点跟director必须在同一个网络IP

RIP通常是私有地址,仅用于各集群节点间的通信

director位于client和realserver之间,并负责处理进出的所有通信

realserver必须将网关指向DIP

支持端口映射

realserver可以使用任意OS

较大规模应用场景中,director易成为系统瓶颈

2)DR:直接路由(只处理请求报文)

集群节点跟director必须在同一个物理网络中

RIP可以使用公网地址,实现便捷的远程管理和监控

director仅负责处理入站请求,响应报文则由realserver直接发往客户端;

realserver不能将网关指向DIR

不支持端口映射;

3)TUN:(隧道)

集群节点可以跨越互联网(Internet);

RIP必须是公网地址;

director仅负责入站请求,响应报文则由realserver直接发往客户端;

只有支持隧道功能的OS才能用于realserver;

不支持端口映射;

三、LVS调度算法

1、固定调度

四种静态的调度方法

rr:Round Robin,轮叫,轮询

wrr:Weight Round Robin,加权,考虑服务器本身权重的意义

sh:source hash,源地址hash,只要是来自于同一个客户

dh(Destination Hashing):目标地址散列,将相同的的请求发送给同一个IP

2、动态调度

六种动态调度方法:

1)lc:Least Connections,最少连接

active*256+inactive (谁的小,挑谁)

2)wlc:Weighted Least Connections,加权最少连接

(active*256+inactive)/weight

3)sed:最短期望延迟

(active+1)*256/weight

4)nq:never queue 永不排队

5)lblc:Locality-Based Least Connections,基于本地的最少连接

6(lblcr:Locality-Based Least Connections with Replication,基于本地的带复制功能的最少连接

默认方法(最理想的方法):wlc

四、管理集群服务的命令行工具ipvsadm

1、ipvsadm的几个重要功能:

1)管理集群服务

添加:-A -t|u|f service-address [-s scheduler] 

-t:TCP协议的集群

-u:UDP协议的集群

service-address: IP:PORT

-f:FWM,防火墙标记

service-address: Mark Number

修改:-E

删除:-D -t|u|f service-address

eg:#ipvsadm -A -t 172.16.66.1:80 -s rr

2)管理集群服务中的RS

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

-t|u|f service-address:事先定义好的某集群服务

-r server-address:某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射

[-g|i|m]:LVS类型(若不指定则默认为DR)

-g:DR 表示DR模型

-i:TUN 能够跨越互联网的

-m:NAT 地址伪装

[-w weight]:定义服务器权重

修改:-e

删除:-d -t|u|f service-address -r server-address 指定从哪个集群服务中删除那个用户

eg:# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m 

eg:# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

3)查看

-L|l

-n: 数字格式显示主机地址和端口

--stats: 统计数据

--rate: 速率

--timeout: 显示tcp、tcpfin和udp的会话超时时长

--sort: 对查看的内容进行排序,默认是升序

--daemon:

-c: 显示当前的ipvs连接状况

4)删除所有集群服务

-C:清空ipvs规则

5)保存规则

-S

#ipvsadm -s > /path/to/somefile

6)载入此前的规则

-R

#ipvsadm -R < /path/form/somefile

五、LVS-NET的实现过程

1、首先规划好IP

Director Server(以下简称DR)DIP:192.168.66.1 VIP:172.16.66.2

Real Server 1 (以下简称RS1) DIP:192.168.66.2 

Real Server 2 (以下简称RS2) DIP:192.168.66.3

2、配置RS1、RS2服务器

1)RS1服务器的配置过程:

RS1的IP配置为:192.168.66.2 网关是:192.168.66.1

wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

yum install httpd –y 安装web服务

提供相应的网页页面并启动web服务:

clip_p_w_picpath006 2)RS2服务器的配置过程

RS1的IP配置为:192.168.66.3 网关是:192.168.66.1

wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

yum install httpd –y 安装web服务

提供相应的网页页面并启动web服务:

clip_p_w_picpath008

3、配置Director服务器

1)在Director服务器上再要添加一块网卡eth1,其IP为DIP:192.168.66.1 则eth0为VIP,其IP为172.16.66.2(提醒:eth1网卡的连接方式是Host-only,RS1、RS2的网卡连接方式也是Host-only)

wget ftp://172.16.0.1/pub/gls/server.repo -O /etc/yum.repos.d/server.repo

2)同步时间

clip_p_w_picpath010

clip_p_w_picpath012

3)安装、启动ipvsadm并测试web服务是否能访问

yum install ipvsadm –y 安装ipvsadm

service ipvsadm start 启动ipvsadm

clip_p_w_picpath014

4)添加集群服务

clip_p_w_picpath016

(-m以nat模式运作)

5)ipvsadm –L –n ipvsadm规则查看

在物理主机上 访问172.16.66.2 刷新几次再执行ipvsadm –L –n命令就会发现InActConn比例接近1:1

六、LVS-DR的实现过程

1、首先划分好IP

Director:eth0,DIP:172.16.66.2 eth0:0,VIP:172.16.66.1

RS1: Eth0,RIP:172.16.66.7 lo:0,VIP:172.16.66.1

RS2: Eth0,RIP:172.16.66.8 lo:0,VIP:172.16.66.1

2、Director的IP、网卡配置过程

ifdown eth1 down Director的eth1断开连接

vim /etc/sysconfig/network-scrips/ifcfg-eth1 编辑文件内容修改如下:

clip_p_w_picpath018

service network restart 重启网络服务器

ifconfig eth0:0 172.16.66.1/16 为eth0配置一个别名

ifconfig 查看别名是否设置成功

clip_p_w_picpath020

把网卡的连接方式改为桥接,以下RS1、RS2的网卡也改成桥接,因为服务器间要在同一台交换机上

3、RS1、RS2的配置过程

1)RS1服务器的IP配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置IP和网关

clip_p_w_picpath022

service network restart 重启网络服务器

2)RS2服务器的IP配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置IP和网关

clip_p_w_picpath024

service network restart 重启网络服务器

测试能否ping通RS1和Director服务器

clip_p_w_picpath026

3)RS1服务的配置

cd /proc/sys/net/ipv4/conf/

clip_p_w_picpath028

(小知识补充:还可以用另外一种命令实现上述命令的执行过程

sysctl -w net.ipv4.conf.eth0.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_announce=2 )

ifconfig lo:0 172.16.66.1/16 配置VIP

在物理主机上ping 172.16.66.1看看是否能ping通

clip_p_w_picpath030

Ping通后 可执行 arp -a 命令查看哪一个IP响应了

ifconfig lo:0 down 关闭VIP

ifconfig lo:0 172.16.66.1 broadcast 172.16.66.1 netmask 255.255.255.255 up (broadcast为广播地址,255.255.255.255意味着只跟自己在同一个网段内,全是网络地址)

route add -host 172.16.66.1 dev lo:0 添加路由

4)RS2服务的配置

配置RS2的VIP并启用

clip_p_w_picpath032

在物理主机上ping172.16.66.1 查看是否能ping通, 然后执行arp –a查看响应状态

ifconfig lo:0 down 关闭VIP

ifconfig lo:0 172.16.66.1 netmask 255.255.255.255 broadcast 172.16.66.1 up

(broadcast为广播地址,255.255.255.255意味着只跟自己在同一个网段内,全是网络地址)

ifconfig

route add -host 172.16.66.1 dev lo:0 添加路由

4、Directory服务的配置过程

1)添加路由并访问web服务

clip_p_w_picpath034

2)设置ipvsadm

clip_p_w_picpath036

3)打开浏览器访问一下 172.16.66.1 刷新出现两次RS1,一次RS2

ipvsadm -L -n (刷新查看一下权重比例为1:2)

这就是DR模型的LVS

小知识点:

arp_ignore:定义接收到ARP请求时的响应级别;

0:只要本地配置有相应的地址,就给予响应

1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应

arp_announce:定义将自己地址向外通告时的通告级别

0:将本地任何接口上的任何地址向外通告

1:试图仅向目标网络通告与其网络匹配的地址;

2:仅向与本地接口上的地址匹配的网络进行通告

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章