目录
一、群集技术
- 在实际应用中,在 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 ) 调度算法
两个节点的首页文件保存在NFS远程共享目录中
3台Linux主机先使用NAT模式安装好各自所需软件,再切换成仅主机模式,构建出局域网。防火墙和核心防护都应先关闭掉
主机名 | 地址 | 角色 | 软件包 |
---|---|---|---|
LVS | ens33:192.168.127.10 ens37:192,168,1,49 | lvs负载调度器 | 加载lvs内核模块,ipvsadm软件包 |
WEB1 | ens33:192.168.127.20 | web节点1 | httpd软件包 |
WEB2 | ens33:192.168.127.30 | web节点2 | httpd软件包 |
NFS | ens33:192.168.127.40 | nfs远程共享目录 | nfs-utils , rpcbind软件包 |
如下为案例拓扑图,方便大家理解
实验步骤
NFS服务器安装
1.安装nfs-utils软件包,启动服务rpcbind和nfs
[root@nfs ~]# rpm -q rpcbind #查看rpcbind软件包是否已经安装(Centos7.6自带)
rpcbind-0.2.0-47.el7.x86_64
[root@nfs ~]# yum -y install nfs-utils
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
2.创建共享目录并编辑配置文件
[root@nfs ~]# mkdir /opt/data1
[root@nfs ~]# mkdir /opt/data2
[root@nfs opt]# chmod 777 data1
[root@nfs opt]# chmod 777 data2
[root@nfs ~]# vim /etc/exports #写入共享目录
/opt/data1 192.168.127.0/24(rw,sync)
/opt/data2 192.168.127.0/24(rw,sync)
3.发布共享目录
[root@nfs ~]# exportfs -rv
exporting 192.168.127.0/24:/opt/data2
exporting 192.168.127.0/24:/opt/data1
4.两个节点上查看共享目录,分别进行挂载
[root@nfs ~]# showmount -e 192.168.127.40
Export list for 192.168.127.40:
/opt/test02 192.168.127.0/24
/opt/test01 192.168.127.0/24
[root@web1 html]# vim /etc/fstab #在192.168.127.20节点
192.168.127.40:/opt/data1 /var/www/html nfs defaults 0 0
[root@web1 ~]# mount -a
[root@web2 html]# vim /etc/fstab #在192.168.127.30节点
192.168.127.40:/opt/data2 /var/www/html nfs defaults 0 0
[root@web2 ~]# mount -a
[root@lweb2 ~]# df -Th #可以验证挂载是否成功
5.在两个web节点中分别写入首页内容
vim /var/www/html/index.html
<h1>this is web1</h1> #192.168.127.20节点中写
<h1>this is web2</h1> #192.168.127.30节点中写
LVS-NAT服务部署
6.加载LVS内核模块
[root@lvs ~]# modprobe ip_vs
[root@lvs ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
7.安装ipvsadm管理工具
[root@lvs ~]# yum -y install ipvsadm
8.使用脚本设置NAT工作模式、只要在LVS服务器上配置,web服务器上不需要添加配置
[root@lvs ~]# vim nat.sh
#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
ipvsadm -C
ipvsadm -A -t 192.168.1.49:80 -s rr
ipvsadm -a -t 192.168.1.49:80 -r 192.168.127.20:80 -m
ipvsadm -a -t 192.168.1.49:80 -r 192.168.127.30:80 -m
ipvsadm
ipvsadm命令选项解析:
-C:清除内核虚拟服务器表中的所有记录
-A:增加一台新的虚拟服务器
-t:说明虚拟服务器提供的是tcp的服务
-s rr:启用轮询算法
-a:在一个虚拟服务器中增加一台新的真实服务器
-r:指定真实服务器
-m:指定LVS的工作模式为NAT模式
ipvsadm:启用LVS功能
[root@lvs ~]# sh nat.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http rr
-> 192.168.127.20:http Masq 1 0 0
-> 192.168.127.30:http Masq 1 0 0
注意:检查所有服务是否打开,防火墙,核心防护是否关闭。
9.在win10服务器中输入192.268.1.49地址验证是否为轮询调度。
第一次是访问节点1的网页内容,刷新浏览器,第二次是访问节点2的网页内容,实验成功。