集群的概念和目的
集群的定义
Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。
集群的作用
对于企业服务的的性能提升一般会有两种方式:
垂直扩展:向上扩展,增加单个机器的性能----->升级硬件
水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题。
集群的优点
- 提高性能:计算密集应用。如天气预报,核试验模拟。
- 降低成本:相对百万美元的超级计算机,价格便宜。
- 提高可扩展性:只要增加集群节点即可。
- 增强可靠性:多个节点完成相同功能,避免单点失败。
企业集群的类型
负载均衡(LB):提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最多的群集类型。
高可用(HA): 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC):将多台主机的硬件计算资源整合到一起实现分布式运用,比如 云计算
集群的可靠性指标
MTBF:mean time between failure 系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示。MTBF值越高,系统的可靠性越高,出现故障的概率也就越小。
MTTR:系统从发生故障到恢复正常运行的时间(解决问题花了多久),一般用小时或者天数表示。MTTR越小,说明系统恢复故障的能力越强。
A:系统的可靠性指标,越高越好
A=MTBF/(MTBF+MTTR)
设计集群时的考虑原则:
1.可扩展性:集群要有随时可以添加或者删除设备的能力。动态的扩缩容。
2.可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换。
3.负载均衡:合理的分配负载,避免单个节点过载,影响整体性能
4.可维护性:能够方便的进行配置,部署,维护,监控。降低成本。
5.安全性:防止恶意的攻击以及数据的泄密,还有数据丢失。
6.易用性:相关的工作人员可以方便的进入集群,能够快速的开发,部署,测试等等。
LVS集群
lvs集群中的相关术语
vs(virtual server) lvs服务的逻辑名字,外部访问lvs集群时提供的一个虚拟IP地址和端口
DS Director server :lvs集群当中的主服务器,也叫调度器,是整个lvs集群的核心。接受客户端的请求转发到后端RS
RS:real server ,lvs的后端的真实服务器的IP,接受到了DS的请求之后,返回响应结果。
CIP:client ip 客户端的IP地址
VIP virtual ip :对外访问的统一虚拟IP地址。
DIP:Director IP调度器在lvs内部使用的IP地址。用于和真实服务器(RS)进行通信。
RIP:后端真实服务器的IP地址。
lvs负载均衡的方式
集群的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式。
NAT(地址转换)
缺点:调度器作为所有节点服务器的网关,既作客户端的访问入口,也作节点服务器响应的访问出口,也就意味着调度器将成为整个集群系统的瓶颈。
优点:由于再转发过程中做了地址转发,对于节点服务器的安全性比其它模式较好。
调度器至少要有2个网卡,一个承载VIP用于接收客户端的请求,另一个用于使用私有IP在同一个局域网中与节点服务器相互通信。
NAT模式的工作原理:
1.调度器上配置双网卡,一个指内,一个指外
2.配置一个可以和公网进行通信的VIP
3.配置转发策略,如果访问vip就会把请求的数据转发到后台的RS。
12.0.0.1:80 ------ 192.168.233.30:80
4.RS处理完请求之后响应客户端。先到调度器,调度器进行地址转换,把内网地址转换成公网地址,调度器响应给用户
192.168.233.30:80------调度器-----nat转换-------12.0.0.1:80 -------客户端
数据请求进入调度器做的是请求报文中ip地址的修改
数据响应进入调度器,根据NAT配置进行地址转换。
DR模式:
直接路由模式。请求由调度器完成,但是响应给客户端客户端由真实服务器直接响应,不需要通过调度器。
好处:性能高,而且可以配置代理地址(VIP)的高可用,不存在单点故障。
LVS的负载调度算法
ipvsadm工具使用
用法 | 作用 |
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s(rr,wrr,dh.sh) | 指定负载调度的算法 |
固定调度算法:rr, wrr, dh,sh
rr:轮询算法(Round Robin)
- 将请求依次分配给不同的RS节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
- 将收到的访问请求安装顺序轮流分配给群集指定各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
wrr:加权轮询调度(Weighted Round Robin)
- 依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
- 保证性能强的服务器承担更多的访问流量。
dh:目的地址哈希调度(destination hashing)
- 以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)
- 以源地址为关键字查找--个静态hash表来获得需要的RS。
动态调度算法: wlc,lc,lblc
lc:最小连接数调度( Least Connections)
- ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
- 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
wlc:加权最小连接数调度(Weighted Least Connections)
- 假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。
- 在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。
- 性能较高的节点将承担更大比例的活动连接负载。
lblc:基于地址的最小连接数调度(locality-based least-connection)
将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
tomcat+NAT的部署
负载调度器:配置双网卡:20.0.0.10(内网)12.0.0.1(ens36)
两台后端web真实服务器:20.0.0.20 20.0.0.30
一台NFS共享服务器:20.0.0.40
客户端:40
关闭防火墙
systemctl stop firewalld
setenforce 0
test2,test3,test4 安装
yum -y install nfs-utils rpcbind
test4为nfs共享目录
mkdir kgc benet
echo "this is kgc" > /opt/kgc/index.html
benet同理
vim /etc/exports
/opt/kgc 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)
systemctl restart rpcbind
systemctl restart nfs
exportfs -rv
test2
systemctl restart rpcbind
systemctl trstart nfs
showmount -e 20.0.0.40
yum -y install httpd
mount 192.168.233.40:/opt/kgc /var/www/html
test3
systemctl restart rpcbind
systemctl trstart nfs
showmount -e 20.0.0.40
mount 20.0.0.40:/opt/benet /var/www/html
df -h
test2
curl 20.0.0.20
test3
curl 20.0.0.30
test2
配置网卡
vim ifcfg-ens33
gateway=20.0.0.10
test3
vim ifcfg-ens33
gateway=20.0.0.10
test1 调度器配置
vim ifcfg-ens33
#gateway
#dns1
给外网添加一个网卡
cp ifcfg-ens33 ifcfg-ens36
ipaddr=12.0.0.1
#gateway
#dns
systemctl restart network
yum -y install iptables-service iptables
iptables -F
iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 12.0.0.1
iptables -t nat -vnL
查看
yum -y install ipvsadm*
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.40:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.70:80 -m
ipvsadm-save>/etc/sysconfig/ipvsadm
systemctl restart ipvsadm.service
ipvsadm -d -r 20.0.0.20:80 -t 20.0.0.10:80
ipvsadm -D -t 20.0.0.10:80
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.40:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.70:80 -m
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl restart ipvsadm
ipvsadm -ln
vim /etc/sysctl.conf
最后一行添加
net.ipv4.ip_forward=1
sysctl -p
ipvsadm -ln 查看
curl 12.0.0.1
this is kgc
开另一台客户机
vim ifcfg-ens33
gateway=12.0.0.1
ipaddr=12.0.0.10
wq
systemctl restart network ifconfig
内部浏览器搜索12.0.0.1