集群顾名思义就是有多个服务器组成的,用于完成同一个服务而设计的服务器群;根据其不同的功能可以将集群大致分为负载均衡集群(LB)、高可用集群(HA)、高性能集群(HP)。
负载均衡(又称为负载分担),英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
负载均衡集群(LB):就是将用于实现同一个服务的多个服务器组合起来,用于解决单个服务器所承受的压力,使服务能够畅通响应。
负载均衡集群如何实现将不同客户端的请求平均分发给其他服务器,让其他服务器来响应客户端的请求呢?
因此为了能让其他服务器也能够分配到用户请求,LB在服务器前端引用了一个特殊设备,用于解决请求资源的分配,这种设备称之为调度器;当用户请求服务时,都去请求调度器的同一地址,然后调度器根据不同服务器的处理性能来将请求分配给不同的服务器,调度器可以同时为不同服务进行调度。
调度器是如何来判断不同服务器的处理性能呢?这就引入了调度器的调度算法,在为调度器写规则时,要指明服务器使用哪种算法!
如果在LB中有一个服务器挂了,调度器不知道此服务器已经挂了,还在给这个服务器分配用户请求,而被分的用户是不能访问到此服务器的,这就给该企业造成了一定的损失。为了避免这种事情发生,调度器还要能时刻检查每个服务器的健康状况,并对有故障的服务器进行处理,称这种行为为服务器的健康状态检查!
调度器设备有硬件和软件之分,这里使用的是第四层软件设备LVS进行的演示;
LVS不同类别:
为了能够很好的说明调度器和服务器之间的通信方式,通常将调度器和服务器及其IP,表示为director、realserver、用户请求地址CIP、用户访问director的IP为VIP、director与realserver通信的IP为DIP、realserver的IP为RIP;
LVS-NAT:地址转换型
用户通过CIP请求VIP时,director发现请求的是一个集群服务器,director将挑选一个服务器通过DIP将请求发送给服务器,服务器接收以后进行处理,将结果通过DIP发送到director,director将RIP的地址映射为VIP,发给CIP。
LVS-DR:直接路由型
DR与NAT不同的地方在与RIP在响应用户请求,不在进过director,而是直接连接路由转发出去,因为在realserver中有两个地址一个是RIP、一个是隐藏的VIP,realserver可以直接通过自身的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:基于本地的最少连接
LVS的NAT配置:
目的:通过NAT模型实现多个web服务器平均分配用户请求
前提:三台主机,两台作为realserver,分别为RS1、RS2,一台作为director,通过软件ipvsadm来实现;
RS1:RIP=172.16.15.1 gateway=172.16.15.3
RS2:RIP=172.16.15.2 gateway=172.16.15.3
Director:DIP=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
注意:
集群节点DIP跟directory必须在同一个IP网络中
RIP地址通常为私有地址,仅用于各集群节点间的通信
directory位于client和real server之间,并负责处理进出的所有通信
Realserver必须将网关指向DIP
较大规模应用场景中,directory易成为系统瓶颈;
ipvsadm:
service-address=VIP
server-address=RIP
管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: tcp协议集群
-u:udp协议集群
-f:FWM防火墙标记
-s:scheduler:表示调度方法
-p:timeout:持久连接时长,默认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实现端口映射
-g:LVS的DR类型
-i:LVS的TUN类型
-m:LVS的NAT类型
-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:显示tcp、tcpfin和udp的会话超时时长
--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]: 清空统计信息的