集群顾名思义就是有多个服务器组成的,用于完成同一个服务而设计的服务器群;根据其不同的功能可以将集群大致分为负载均衡集群(LB)、高可用集群(HA)、高性能集群(HP)

负载均衡(又称为负载分担),英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

负载均衡集群(LB):就是将用于实现同一个服务的多个服务器组合起来,用于解决单个服务器所承受的压力,使服务能够畅通响应。

负载均衡集群如何实现将不同客户端的请求平均分发给其他服务器,让其他服务器来响应客户端的请求呢?

因此为了能让其他服务器也能够分配到用户请求,LB在服务器前端引用了一个特殊设备,用于解决请求资源的分配,这种设备称之为调度器;当用户请求服务时,都去请求调度器的同一地址,然后调度器根据不同服务器的处理性能来将请求分配给不同的服务器,调度器可以同时为不同服务进行调度。

调度器是如何来判断不同服务器的处理性能呢?这就引入了调度器的调度算法,在为调度器写规则时,要指明服务器使用哪种算法!

如果在LB中有一个服务器挂了,调度器不知道此服务器已经挂了,还在给这个服务器分配用户请求,而被分的用户是不能访问到此服务器的,这就给该企业造成了一定的损失。为了避免这种事情发生,调度器还要能时刻检查每个服务器的健康状况,并对有故障的服务器进行处理,称这种行为为服务器的健康状态检查!

调度器设备有硬件和软件之分,这里使用的是第四层软件设备LVS进行的演示;

LVS不同类别:

为了能够很好的说明调度器和服务器之间的通信方式,通常将调度器和服务器及其IP,表示为directorrealserver、用户请求地址CIP、用户访问directorIPVIPdirectorrealserver通信的IPDIPrealserverIPRIP

LVS-NAT:地址转换型

负载均衡集群NAT实现_ipvsadm用法

用户通过CIP请求VIP时,director发现请求的是一个集群服务器,director将挑选一个服务器通过DIP将请求发送给服务器,服务器接收以后进行处理,将结果通过DIP发送到directordirectorRIP的地址映射为VIP,发给CIP

LVS-DR:直接路由型

负载均衡集群NAT实现_ipvsadm用法_02

DRNAT不同的地方在与RIP在响应用户请求,不在进过director,而是直接连接路由转发出去,因为在realserver中有两个地址一个是RIP、一个是隐藏的VIPrealserver可以直接通过自身的VIP来响应,要记住通信是使用RIP来实现的!

LVS-TUN:隧道型

调度算法分为静态和动态两种:

静态算法:

rr:轮调,平均分配一个接一个进行分发请求

wrr:加权轮调

sh(源地址hash):在一定的时间内只要来自同一个客户端的请求都转发到同一个realserver,主要用于实现会话绑定session affinity

dh:功能跟sh近似,只不过适应场景不同。主要实现把同一个地址的请求发送给同一个server,其以目标地址进行挑选

动态算法:

lc:最少连接

比较算法:Active*256+inactive

wlc:加权最少连接

比较算法:(active*256+inactive)/weight

sed:最短期望延迟

比较算法:(active+1)*256/weight

LBLC:基于本地的最少连接

LVSNAT配置:

   目的:通过NAT模型实现多个web服务器平均分配用户请求

   前提:三台主机,两台作为realserver,分别为RS1RS2,一台作为director,通过软件ipvsadm来实现;

   RS1RIP=172.16.15.1    gateway=172.16.15.3

   RS2RIP=172.16.15.2   gateway=172.16.15.3

   DirectorDIP=172.16.15.3 VIP=192.168.22.12

配置过程:

   RS1:修改IP与网关

  

 # vim /etc/sysconfig/network-scripts/ifcfg-eth0
   IPADDR=172.16.15.1
   GATEWAY=172.16.15.3
 # service network restart

   安装httpd,为了能看出效果,将两台httpd服务器用了不同的页面

   

# yum install httpd
# echo “<h1>RS1.jun.com</h1>” >> /var/www/html/index.html
# service httpd start

   RS2:修改IP与网关

   

# vim /etc/sysconfig/network-scripts/ifcfg-eth0
   IPADDR=172.16.15.2
   GATEWAY=172.16.15.3
   # service network restart
   # yum install httpd
   # echo “<h1>RS2.jun.com</h1>” >> /var/www/html/index.html
   # service httpd start

   director:安装ipvsadm、并通过写规则实现地址转换

   

# rpm -ivh ipvsadm-1.24.-13.el5.i386.rpm
# ifconfig eth1 192.168.22.12 up
# ipvsadm -A -t 192.168.22.12:80 -s rr
# ipvsadm -a -t 192.168.22.12:80 -r 172.16.15.1 -m
# ipvsadm -a -t 192.168.22.12:80 -r 172.16.15.2 -m
# echo 1 >> /proc/sys/net/ipv4/ip_forwark

注意:

集群节点DIPdirectory必须在同一个IP网络中

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

directory位于clientreal server之间,并负责处理进出的所有通信

Realserver必须将网关指向DIP

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

ipvsadm: 

service-address=VIP

server-address=RIP

管理集群服务

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

 -t: tcp协议集群

 -uudp协议集群

 -fFWM防火墙标记

 -sscheduler:表示调度方法

 -ptimeout:持久连接时长,默认300秒,单位为秒

修改:-E -t|u|f service-address [-s scheduler]

删除:-D -t|u|f service-address [-s scheduler]

eg: # ipvsadm -A -t 172.16.100.1:80 -s wrr

管理集群服务中的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实现端口映射

 -gLVSDR类型

 -iLVSTUN类型

 -mLVSNAT类型

 -w weight: 定义服务器权重

修改:-e 

删除:-d -t|u|f service-address -r server-address

  eg# ipvsadm -a -t 172.16.15.2:80 -r 192.168.0.1 -g 

# ipvsadm -a -t 172.16.15.2:80 -r 192.168.0.2 -g

查看:-l|-L

-n:数字格式显示IP地址和端口号

--stats:显示统计信息

--rate:输出速率信息

--timeout:显示tcptcpfinudp的会话超时时长

--daemon:显示进程个数

--sort:对列出的集群服务以升序进行排序

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

# ipvsadm -L -n --stats

InPkrs: 进站的报文数

OutPkts:出站的报文数

InBytes:入站的字节数

OutBytes:出站的字节数

# ipvsadm -L -n --rate

CPS:每秒的连接数

InPPS:每秒入站的报文数

OutPPS:每秒出战的报文数

InBytes:每秒入站的字节数

OutBytes:每秒出站的字节数

删除所有集群服务

-C:清空ipvs规则

# ipvsad -C

保存规则:

ipvsadm -S > /path/to/somefile

载入此前的规则:

ipvsadm -R < /path/form/somefile

iptables -Z [t|u|f service-address]: 清空统计信息的