文章目录
一、群集技术
- 在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 web 服务器流量的入口,挑选最合适的一台web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。
- LVS、Nginx、HAProxy 是目前使用最广泛的三种软件负载均衡软件。
1.1、适用场景
- 对负载均衡的使用一般是随着网站规模的提升根据不同的阶段来使用不同的技术。
- 如果是中小型的 Web 应用,比如日 PV 小于1000万,用 Nginx 就完全可以了。
- 如果机器不少,可以用 DNS 轮询,LVS 所耗费的机器还是比较多的。
- 大型网站或重要的服务,且服务器比较多时,可以考虑用 LVS。
目前关于网站架构一般比较合理流行的架构方案:Web 前端采用 Nginx/HAProxy+Keepalived 作负载均衡器;后端采用 MySQ L数据库一主多从和读写分离,采用 LVS+Keepalived 的架构。
1.2、群集的类型
- 根据群集所针对的目标差异,可分为三种类型
- 负载均衡群集
- 高可用群集
- 高性能运算群集
1.3、三种群集概述
-
1、负载均衡群集(Load Balance Cluster)
- 以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、负载(LB)的整体性能。
- LB的负载分配依赖于主节点的分流算法。
-
2、高可用群集(High Availability Cluster)
- 以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
- HA的工作方式包括双工和主从两种模式。
-
3、高性能运算群集(High Performance Computer Cluster)
- 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC) 能力。
- 高性能运算群集的高性能依赖于“分布式运算"、 “并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。
二、负载均衡群集
2.1、基于IP负载均衡的工作模式
- 负载均衡群集是目前企业用得最多的群集类型,群集的负载调度技术可以基于IP端口,内容等进行分发,其中 IP 负载均衡技术是效率最高的。
- 基于IP的群集负载调度技术有三种工作模式:
- 1、地址转换
- 2、IP隧道
- 3、直接路由
2.2、工作模式的概述
1、地址转换:简称NAT模式
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。
- 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
2、IP隧道:简称TUN模式。
- 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。
- 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
3、直接路由;简称DR模式
- 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
- 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。
以上三种工作模式中,
- 1、NAT方式只需要一个公网IP地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式;
- 2、DR模式和TUN模式的负载能力更加强大、适用范围更广,但节点的安全性要稍差一些。
2.3、分层结构
1、负载调度器
- 只负责响应客户端的请求,并将请求通过负载调度算法分发给服务器池中的服务器,是访问整个群集的唯一入口,对外使用公有的vip (Virtual IP,虚拟IP) 地址,也称为群集IP地址。
2、服务器池
- 用于为客户端提供实际的应用服务,每个真实服务器(服务器池中的服务器称为真实服务器或节点服务器)具有独立的RIP (真实IP) ,只处理调度器分发过来的客户请求
3、共享存储
- 为服务器池中的所有节点提供稳定、一致的文件存取服务,用于保证群集文件的一致性(就是使即使访问的不是同一个节点服务器但看到的内容是一样的)
2.4、LVS 负载均衡机制
- LVS 是四层负载均衡,即建立在 OSI 模型的第四层——传输层之上,传输层上有我们熟悉的 TCP/UDP,LVS 支持 TCP/UDP 的负载均衡。
- 因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。
2.5、LVS的负载调度算法
- 轮询(Round Robin)
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器)均等地对待每一台服务器, 而不管服务器实际的连接数和系统负载。 - 加权轮询(Weighted Round Robin)
- 根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
- 保证处理能力强的服务器承担更多的访问流量。
- 最少连接(Least Connections)
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。 - 加权最少连接(Weighted Least Connections)
- 在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重。
- 权重较高的节点将承担更大比例的活动连接负载
三、案例:LVS-NAT部署
- 案例环境
LVS调度器作为web服务器池的网关,有两块网卡,分别连接内外网,使用轮询( rr ) 调度算法
服务器 | IP地址 |
---|---|
LVS调度器 | ens33:192.168.100.1/ens37:12.0.0.1 |
web服务器1 | 192.168.100.110 |
web服务器2 | 192.168.100.111 |
NFS存储器 | 192.168.100.120 |
- 准备了五台虚拟机 centos7,一台服务器作为LVS(两张网卡),两台web服务器做Apache,一台作为服务器的 NFS 存储;一台测试机(window系统)。
- 所有主机设置成仅主机模式;
- 除了LVS服务器外所有的服务器防火墙关闭。
- 在 LVS服务器上设置两个网卡,一个作为私网地址,一个作为公网地址,并作NAT地址映射;
3.1、NFS共享服务
1、新建两个硬盘 /dev/sdb 和 /dev/sdc,分区和格式化。
fdisk /dev/sdb 分区
mkfs.xfs /dev/sdb1 格式化
fdisk /dev/sdc 分区
mkfs.xfs /dev/sdc1 格式化
创建文件夹作为挂载点,并挂载。
mkdir /opt/test /opt/demo
vim /etc/fstab 挂载
添加内容如下:
mount -a 使挂载文件生效
2、关闭防火墙,查看nfs共享需要的两个包
systemctl stop firewalld
setenforce 0
rpm -q nfs-utils
rpm -q rpcbind
vim /etc/exports #给192.168.100.0网段的服务器提供存储空间
3、开启服务,查看nfs共享配置文件
systemctl restart nfs
systemctl restart rpcbind
showmount -e
4、把网络改为主机模式,再修改配置文件
#进入配置文件修改
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#重启网络服务
service network restart
3.2、Apache的服务器
1、给 两台web服务器安装 apache,并关闭防火墙
yum -y install httpd
systemctl stop firewalld
setenforce 0
2、改为仅主机模式,修改ip地址
web1服务器:
web2 服务
3、查看NFS提供的存储空间,并挂载到本地空间。
showmount -e 192.168.100.120
将存储服务器文件挂载到本地
//将/opt/demo 空间挂载到 web1 服务器
mount.nfs 192.168.100.120:/opt/demo /var/www/html
//将/opt/test空间 挂载到 web2 服务器
mount.nfs 192.168.100.120:/opt/test /var/www/html
web1服务器:
web2服务器:
4、分别给两个web服务器,做一个测试网页。
//web1服务器:
cd /var/www/html/
vim index.html
//添加内容:<h1>this is demo web</h1>
systemctl start httpd
//web2 服务器:
cd /var/www/html/
vim index.html
//添加内容:<h1>this is test web</h1>
systemctl start httpd
3.3、配置 LVS 负载均衡
1、安装ipvsadm 服务
yum -y install ipvsadm
2、在虚拟机配置里添加第二个网卡,全部改为仅主机模式。
修改IP地址
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens37 //复制一份作为ens37的地址
vim ifcfg-ens33
vim ifcfg-ens37
3、开启路由转发功能,设置防火墙规则
vim /etc/sysctl.conf
添加:net.ipv4.ip_forward=1
sysctl -p #启动
用iptables命令设置地址映射
iptables -F #清空转发表
iptables -t nat -F #清空nat地址转换表
iptables -t nat -A POSTROUTING -o ens37 -s 192.168.100.0/24 -j SNAT --to-source 12.0.0.1 #添加地址转换规则
4、加载模块,并开启 ipvsadm 服务
#加载模块
modprobe ip_vs
#备份
ipvsadm --save > /etc/sysconfig/ipvsadm
#开启服务
systemctl start ipvsadm
5、写一个脚本设置LVS规则,加权限执行即可。
vim /opt/nat.sh
#!/bin/bash
ipvsadm -C
//清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 12.0.0.1:80 -s rr
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.110:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.111:80 -m
ipvsadm
添加执行权限,后执行脚本
chmod +x nat.sh
./nat.sh
3.4、客户端验证
在win10浏览器上,改为仅主机模式,并修改IP地址。
打开浏览器,输入12.0.0.1。
因为做了NAT模式和NFS存储共享,所以可以直接访问到两台Apache服务器上的网页的,这就说明群集起作用了。
清空一下浏览器的缓存记录,再次刷新。