Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)
负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。
负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。
实验环境
- 在linux环境中,通过母盘是redhat7.6的操作系统,克隆搭建四台域名分别为node1,node2, node3,node4; 主机名分别为server1,server2,server3, server4的四台虚拟机。
- 给四台主机分别配置好各自的ip地址和dns地址解析,实现四台虚拟机可以互相ping通。(可以在母盘中配置好,创建的镜子中就有)
- 配置好四台主机的yum源仓库。(可以通过宿主机的httpd服务,搭建网络仓库)
- 关闭掉所有虚拟机的防火墙,并将所有主机的selinux设置为disabled状态
选择lvm
7.6中关闭NetworkManager
在母盘中把selinux设置为disable
母盘配置好后执行
lvs在四层结构上实现负载均衡(http)
client --> vs --> rs --> client
lvs 有四种工作模式
NAT模式
VS/NAT(Virtual Server via Network Address Translation,网络地址翻转技术实现虚拟服务器),当请求到来时,Director Server上处理的程序将数据报文中的目标地址(VIP)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Director Server,然后Director Server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Director Server,如果数据过多,则Director Server 将不堪负重。优点:
集群的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internte的保留私有地址,只有Director Server需要一个合法的IP地址。缺点:
扩展性不足。当服Real Server增长到>=20台时间,Director Server将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过Director Server。
DR模式
VS/DR(Virtual Server via Direct Routing,直接路由技术实现虚拟服务器),它通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server 将相应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种是以上三种模式中性能最高最好的,但必须要求Director Server与Real Server都有一块网卡连接在同一物理网段上。优点:
和VS/TUN一样,Director Server只负责分发请求, 应答包通过单独的路由方法返回给客户端。与VS/TUN相比,VS/DR不要隧道支持,因为可以使用大多数的操作系统作为物理服务器。缺点:
要求Director Server网卡必须与物理网卡在一个物理段上。
TUN 模式(隧道模式)
VS/TUN(Virtual Server via IP Tunneling,IP隧道技术实现虚拟服务器) ,它跟VS/NAT基本一样,但Real Server是直接返回数据给客户端,不需要经过Director Server,这样大大降低了Director Server的压力。优点:
Director Server只负责将请求包分发给物理服务器,而物理服务器将应该报直接发给用户,所以Director Server处理巨大的请求包,这种模式一台Director Server能为超过100台的服务器服务器服务,Director Server基本不成为系统的瓶颈。 非常适合Internet(如Web,Webservice等)负载,因为一般它们的请求包很小,但应答包比较大。缺点:
这种方式需要所有服务器支持IP Tunneling(IP Encapsulation)协议。
FULLNAT 模式(不是系统自带)
主要思想:
引入local address(内网ip地址),cip-vip转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通讯。
利用DR工作模式和轮询调度算法实现httpd的负载均衡
- yum install ipvsadm -y 安装lvs管理器
- 添加虚拟IP,‘rr’ 轮询调度算法
ipvsadm -A -t 172.25.5.100:80 -s rr - 添加虚拟IP的rs服务器
ipvsadm -a -t 172.25.5.100:80 -r 172.25.5.2:80 -g
ipvsadm -a -t 172.25.5.100:80 -r 172.25.5.3:80 -g
ipvsadm -ln 查看lvs 调度器
在server2和server3上开启httpd服务 - 分别在server2, server3上添加虚拟ip ,在宿主机上curl 172.25.5.100测试,用arp -an | grep 100查看收到arp报文对应的mac地址,arp -d 172.25.5.100 删除指定ip的arp缓存。
- 在server2和server3 yum install arptables -y 安装arp防火墙
添加arptables访问规则
server2:
1). arptables -A INPUT -d 172.25.5.100 -j DROP
2). arptables -A OUTPUT -s 172.25.5.100 -j mangle --mangle-ip-s 172.25.5.2
3). systemctl start arptables
server3:
1). arptables -A INPUT -d 172.25.5.100 -j DROP
2). arptables -A OUTPUT -s 172.25.5.100 -j mangle --mangle-ip-s 172.25.5.3
3). systemctl start arptables - 测试
server1
server2
server3
测试:可以看到收到arp报文对应的mac地址是server3主机的地址
keepalive + lvs
健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
实验原理:
利用keepalive中的vrrp协议实现高可用,TCP_CHECK实现对后端rs进行健康检测
- 在server1和server4上yum install keepalive -y
- 修改server1配置文件,让server1做主用机
修改server4配置文件,让server4做背用机,MASTER改成BACKUP,100改为50 - 访问测试,当server1的keepalived停止之后,vip会自动漂移到server4上,不会影响客户端对后端服务器的访问,但是设置成主备机时,当server1的keepalived重新启动时,会抢占资源。
- 可以通过修改server4的keepalived配置文件,当重启服务时,vip 就不会从server1自动漂移到server4上。(将两个都改成backup,并且在priority高的后面上添加nopreempt参数,重启时就不会抢占资源)
问题:当server2断掉后(stop http),会出现一会能访问,一会又不能访问
解决方案:keepalive提供健康检查,并作出相应的自动更改(根据配置文件的中写入的更改)
将更改后的配置文件发送给备用机server4
当server1停止keepalived后,server4直接启动接管
在客户端上没有任何影响,不会因为server1断开而访问不了