Linux虚拟服务器-LVS-集群技术

一、LVS(Linux virtual server)虚拟服务器概述

LVS是Linux上一种负载均衡的软件

集群定义

集群是一组互联的计算机。集群像一个大型独立的服务器,集群配置用于提高可用性和可伸缩性

1.1 集群功能分类

LB(Load Balancing)

利用负载均衡算法处理计算能力(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点

HA(High Availability)

高可用集群(增加服务可用性)
高可用集群,是以提升服务的始终在线能力为着眼点,不会因为宕机而导致服务不能用。
衡量可用性:在线时间/(在线时间+故障处理时间)

99%:一年有三天不在线 
99.9%:一年有0.3天不在线 
99.99%:一年有0.03天不在线 
99.999%:一年有0.003天不在线 

HPC

HPC:High performance,高性能计算集群,计算海量数据,解决复杂问题
平时所说的超级计算机就是高性能计算集群,查看每秒钟浮点运算的能力
运用到的名词:
向量机:尽可能向上进行扩展,如果CPU过多,在架构上纵然会有问题的
并行处理集群:包括两部分
1、分布式文件系统;
2、将大任务切割为小任务,分别进行处理的机制
例如hadoop就是并行处理集群

二、LVS系统结构

负载均衡器(Load Balancer)、服务器群组(Server Aarry)、共享存储(Shared Storage)

负载均衡层:

整个集群服务最前端设备,它有一个或多个调度器(Director Server)组成,LVS软件运行在调度服务器上。

调度服务器的功能:

将用户的请求,根据调度算法进行IP分流,将数据包发送到后端应用服务器上(Real Server),如果调度服务器安装了监控模块Ldirectord,那么调度服务器会将出现故障的应用服务器标记为不可用,知道此应用服务器恢复正常。

服务器群组层:

这是由一个或者多个应用程序服务器(Real Server)组成,并且每个应用服务器提供相同的服务,调度服务器会将用户的请求定向到具体的应用服务器上,然后由后端的应用服务器响应客户端。

共享存储层:

功能只要是保证服务器群组中的应用服务器提供数据的一致性。

共享存储的实现方式:

磁盘阵列、集群文件系统(OCFS2)

LVS是linux系统上的一种机制,类似于iptables,其相关属性也是通过(ipvsadm)与iptables命令类似的方式定义的,

LVS是工作于linux系统内核空间,通过内核来提供工作,其工作空间在iptables的INPUT链上,当客户端请求到达INPUT链上以后,通过LVS规则的验证,如果是内��请求,发送至用户空间,如果发现是集群,将此请求发送至POSTROUTING链,并交给后端应用程序服务器来响应用户的请求。

注意:上面所提到LVS其实是工作在iptables的INPUT和postrouting链上的,所以在此系统上iptables和LVS不能同时存在。

三、LVS的组成

ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间

ipvs:为lvs提供服务的内核模块,工作于内核空间 (相对于是框架,通过ipvsadm添加规则,来实现ipvs功能)

注:在linux内核2.4.23之前的内核中模块默认是不存在的,需要自己手动打补丁,然后把此模块编译进内核才可以使用此功能

3.1 LVS类型

3.1.1 LVS-NAT(Network address translation)模式

Linux虚拟服务器-LVS-集群技术_第1张图片
工作原理

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标IP地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

注意在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
Linux虚拟服务器-LVS-集群技术_第2张图片

3.1.2 DR直接路由模式

Linux虚拟服务器-LVS-集群技术_第3张图片
工作原理
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

特点

1,集群节点和director必须在一个物理网络内
2,RIP可以使用公网地址或私有地址
3,director仅处理入站请求,director服务器的压力比较小
4,集群节点网关不指向director,故出站不经过director
5,不支持端口映射
6,大多数操作系统可以作为realserver,要支持隔离arp广播

ARP问题

通常,DR模式需要在Real-server上配置VIP,配置的方式为:
/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255

i) 原因在于,当LVS把client的包转发给Real-server时,因为包的目的IP地址是VIP,那么如果Real-server收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所以需要将这个IP地址绑到网卡上;当发送应答包给client时,Real-server就会把包的源和目的地址调换,直接回复给client。

ii) 关于ARP广播:

  • 上面绑定VIP的掩码是”255.255.255.255″,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止 与LVS上VIP冲突,而导致IP冲突。

  • 另外在Linux的Real-server上,需要设置ARP的sysctl选项:

3.1.3 TUN-IP隧道模式

Linux虚拟服务器-LVS-集群技术_第4张图片
工作原理

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

Linux虚拟服务器-LVS-集群技术_第5张图片
Linux虚拟服务器-LVS-集群技术_第6张图片
Linux虚拟服务器-LVS-集群技术_第7张图片

四、LVS负载均衡的八种调度算法

Fixed Scheduling Method 静态调服方法
(1) .RR 轮询

Round-Robin:调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

(2) .WRR 加权轮询

调度器通过"加权轮叫"调度算法,根据真实服务器的不同处理能力.来调度访问请求。这样可以保证处理能力强的服务器,处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

(3).DH 目标地址hash

"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

(4).LC 最少连接

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

Dynamic Scheduling Method 动态调服方法

(5).WLC 加权最少连接

在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

(6). LBLC 基于本地的最少连接

“基于局部性的最少链接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

(7). LBLCR 带复制的基于本地的最少连接

"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

五、IPVSADM 命令详细介绍

pvsadm: 管理集群服务的命令行工具,而ipvs系统内核中的一个模块

ipvsadm命令的基本使用:

1  -A:在内核的虚拟服务器列表中添加一条VIP记录
2  -E:修改内核虚拟服务器列表中的一条VIP记录
3  -D:删除内核虚拟服务器列表中的一条VIP记录
4  -C:清空内核虚拟服务器列表中的所有VIP记录
5  -S:保存虚拟服务器规则
6  -R:恢复虚拟服务器策略规则
7  -a:在内核虚拟服务器列表中添加一个应用服务器的地址。
8  -e:修改一个虚拟服务器列表中的一条应用服务器地址记录
9  -d:删除一个虚拟服务器列表中的一条应用服务器地址记录
10 -L/-l: 查看内核虚拟服务器列表
11 -Z:将内核中的虚拟服务器计数清为0
12 -t service-address:指定虚拟服务器使用TCP服务
13 -u service-address:指定虚拟服务器使用UDP服务
14 -s scheduler:指定调度算法:
15 -p timeout:在应用服务器上的持续服务时间,单位为秒
16 -r service-address:指定应用服务器的地址
17 -g:指定LVS工作模式为直接路由(DR-defalut)
18 -I:指定LVS工作模式为隧道模式(Ip Tunnel)
19 -m:指定LVS工作模式为地址转换模式(NAT)
20 -w:设定应用服务器的权值

常用的负载均衡软件
Linux虚拟服务器-LVS-集群技术_第8张图片
Linux虚拟服务器-LVS-集群技术_第9张图片
Linux虚拟服务器-LVS-集群技术_第10张图片

六、LVS-NET与LVS-DR负载均衡实战

6.1 lvs-net实战操作步骤:部署环境

4台干净主机,分别作为客户端 LVS WEB1 WEB2;
关闭防火墙 selinux
需要给第3 4 台主机提前安装好httpd 并启动
Linux虚拟服务器-LVS-集群技术_第11张图片

Linux虚拟服务器-LVS-集群技术_第12张图片
Linux虚拟服务器-LVS-集群技术_第13张图片

6.2 工作原理

Linux虚拟服务器-LVS-集群技术_第14张图片

6.3 操作步骤

client: VMENT 0 192.168.8.120
LVS : 	VMENT 0 192.168.8.121
		VMENT 2 192.168.98.128
WEB1:  	VMENT 2 192.168.98.129		提前安装httpd
WEB2:   VMENT 2 192.168.98.130

第3 4台主机

WEB1:

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

route add -net 192.168.8.0/24 gw 192.168.98.128			
 
#VM 0 网段所有主机唯一出口VM 2网卡
#24  子网掩码的255.255.255.255的十进制
#配置真实服务器网络出口
#-net 外部网络
#gw 网关,网络唯一出口

WEB2:

echo web2 > /var/www/html/index.html
route add -net 192.168.8.0/24 gw 192.168.98.128			

第二台主机

LVS-NET配置路由功能和负载策略

echo  1  > /proc/sys/net/ipv4/ip_forward    启用路由功能
yum -y install ipvsadm 安装LVS软件

ipvsadm   -A -t 192.168.8.121  -s   rr
#-A 添加一个VIP 
#-t TCP协议
#-s schedule 调度
#rr 轮训策略类型

ipvsadm  -a  -t  192.168.8.121:80 -r 192.168.98.129:80   -m
ipvsadm  -a  -t  192.168.8.121:80 -r 192.168.98.130:80   -m

第一台主机

client测试
elinks --dump http://192.168.8.121 每ping一次 web1 与 web2 之间循环;这里访问的是LVS  vment 0网段

6.4 LVS-DR实战操作步骤

LVS-DR 服务器上
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.238.142  netmask 255.255.255.0  broadcast 192.168.238.255
   
[root@localhost ~]# ifconfig ens33:0 192.168.238.141 broadcast 192.168.238.255 netmask 255.255.255.0 up
# 192.168.238.141 虚拟子网络,随便配但是必须处于同一网段

[root@localhost ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  
    inet 192.168.238.142/24 brd 192.168.238.255 scope global noprefixroute dynamic ens33
     
    inet 192.168.238.141/24 brd 192.168.238.255 scope global secondary ens33:0
   
       
[root@localhost ~]# route add -host 192.168.238.141 dev ens33:0  VIP与CIP配置在同一网卡上

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 开启路由功能
net.ipv4.conf.all.send_redirects = 0 	禁止转发重定向
net.ipv4.conf.ens33.send_redirects = 0		禁止ens33转发重定向
net.ipv4.conf.default.send_redirects = 0		禁止默认转发重定向

[root@localhost ~]# yum install ipvsadm -y

[root@localhost ~]# ipvsadm -A -t 192.168.238.141:80 -s rr
[root@localhost ~]# ipvsadm -A -t 192.168.2^C.141:80 -s r
[root@localhost ~]# ipvsadm -a -t 192.168.238.141:80 -r 192.168.238.138:80 -g
[root@localhost ~]# ipvsadm -a -t 192.168.238.141:80 -r 192.168.238.140:80 -g
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm		LVS保存配置让永久生效
[root@localhost ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service

=======================================================================================================================
两个WEB上部署服务
WEB1/Web2: 192.168.238.138
yum -y install nginx

修改主页
vim /usr/share/nginx/html/index.html

systemctl start nginx
systemctl enable nginx

给两个web服务器的lo网卡设置子网掩码为32位vip
rs1: ifconfig	lo:0 192.168.238.141/32
rs2: ifconfig	lo:0 192.168.238.141/32

echo >1 /proc/sys/net/ipv4/conf/all/arp_ignore
echo >2 /proc/sys/net/ipv4/conf/all/arp_announce


arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 

0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 

1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 

2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 

3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 

4-7 - 保留未使用 

8 -不回应所有(本地地址)的arp查询


arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 

0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 

1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 

2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

关于对arp_announce 理解的一点补充

=======================================================================================================================Client:
elinks --dump http://192.168.238.141  一直回车

=======================================================================================================================

LVS-DR服务器查看
[root@localhost ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:54  FIN_WAIT    192.168.238.129:56914 192.168.238.141:80 192.168.238.143:80
TCP 01:53  FIN_WAIT    192.168.238.129:56906 192.168.238.141:80 192.168.238.143:80
TCP 01:52  FIN_WAIT    192.168.238.129:56900 192.168.238.141:80 192.168.238.140:80
TCP 01:54  FIN_WAIT    192.168.238.129:56918 192.168.238.141:80 192.168.238.143:80
TCP 01:56  FIN_WAIT    192.168.238.129:56932 192.168.238.141:80 192.168.238.140:80

LVS命令管理

====管理虚拟服务器=====
添加一个虚拟服务器192.168.1.100:80,使用轮询算法
ipvsadm -A -t 192.168.1.10:80 -s rr
修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
删除虚拟服务
ipvsadm -D -t 192.168.1.100:80
=========管理真实服务================
添加一个真实服务器192.168.238.128 使用DR模式,权重2
ipvsadm -a -t 192.168.1.100:80 -r  192.168.238.128 -g -w 2
增加真实服务器的权重
ipvsadm -a -t 192.168.1.100:80 -r 192.168.238.128 -g -w 5
修改真实服务器的权重
ipvsadm -e -t 192.168.1.100:80 -r 192.168.238.128 -g -w 2
删除真实服务器
ipvsadm -d -t 192.168.1.100:80 -r 192.168.238.128

===================查看统计===================================
查看当前配置的虚拟服务器和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.238.139:80                 54      391        0    32019        0  虚拟IP
  -> 192.168.238.140:80                 27      188        0    13807        0	web1
  -> 192.168.238.143:80                 27      203        0    18212        0	web2

你可能感兴趣的:(LVS,服务器,linux,lvs)