企业集群的应用 - LVS 负载均衡集群
一、什么是集群
Cluster,集群、群集、横向扩展
由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名与IP地址),相当于一台大型计算机。
使用价格昂贵的小型机、大型机
使用普通服务器构建服务群集
通过整合多台服务器,使用 LVS 来达到服务器的高可用和负载均衡,并以同一个IP地址对外提供相向的服务。
在企业中常用的一种群集技术 —— LVS (Linux Virtual Server,Linux虚拟服务器)
二、集群使用场景
互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用的要求
三、集群的分类
1. 负载均衡集群
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载的整体性能。
例如,”DNS 轮询“、”应用层交换”、“反向代理” 等都可用作负载均衡群集。LB 的负载分配依赖 于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解 整个系统的负载压力。
2. 高可用集群
以提高应用系统的可靠性、尽可能地 减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。
例如,“故障切换”、“双机热备”、“多机热备” 等都属于高可用群集技术。HA 的工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。
3. 高性能集群
以提高应用系统的 CPU 运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。
例如,“云计算”“网格计算”也可视为高性能运算的一种。 高性能运算群集的高性能依赖于 “分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的 CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备 的计算能力
四、均衡集群的架构
第一层 负载调度器
访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。
第二层 服务器池
群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的 RIP 地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层 共享存储
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。共享存储可以使用 NAS 设备,或者提供 NFS 共享服务的专用服务器。
① 负载调度器/代理
② 后端真实服务器(服务池)
(upstream tomcat_server{IP:端口})+ location进行匹配跳转到upstram地址池中也就是服务池所映射的后端节点tocmat
③ 共享存储
五、负载均衡集群的工作模式
1. 地址转换(NAT 模式)
Network Address Translation,简称 NAT 模式
类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
2. IP 隧道(TUN 模式)
lPTunnel,简称TUN模式
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的 lnternet 连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
3. 直接路由(DR 模式)
Direct Routing,简称DR模式
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
六、LVS 虚拟服务器
针对Linux内核的负载均衡解决方案
1998年5月,由我国的章文嵩博士创建
官方网站: http://www.linuxvirtualserver.org/
LvS 实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法
1. LVS 组成
(1)LVS
LVS 是基于内核态的 netfilter 框架实现的 IPVS 功能,工作在内核态用户配置 VIP 等相关详细信息并传递到IPVS,就需要用到 ipvsadmi 工具
(2)ipvsadm
ipvsadm 是 lvs 用户态的配套工具,可以实现VIP和RS的增删改查
ipvsadm 就是类似 iptables 工具的地位
2. LVS 作用
① 主要用于多服务器的负载均衡
② 工作在网络层,可实现高性能,高可用的服务集群技术
③ 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器
④ 易用,配置简单,有多重负载均衡的方法
⑤ 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果
⑥ 可扩展性好
3. LVS 和 Nginx 比较
① LVS 比 Nginx 具有更强的抗负载能力,性能高,对内存和 CPU 资源消耗低
② LVS 工作在网络层,网络依懒性大,稳定性高。nginx 安装配置较简单,网络性依赖小
③ LVS 不支持正则匹配处理,无法实现动静分离效果 nginx 可实现这方面的功能
④ LVS 适用的协议范围广。nginx仅支持HTTP、HTTPS EMail协议使用于范围小
七、LVS 负载调度算法
针对不同的网络服务和配置需要,LVS 调度器提供多种不同的负载调度算法,其中最常用的四种算法是轮询、加权轮询、最少连接和加权最少连接。
轮询(Round Robin):
将收到的访问请求按照顺序轮流分配给群集中的各节点,均等地对待每台服务器,而不管服务器实际的连接数和系统负载。
加权轮询(Weighted Round Robin):
根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更多请求。
最少连接(Least Connections):
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采 用这种方式可以更好地均衡负载。
加权最少连接(Weighted Least Connections):
在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更 大比例的活动连接负载
八、案例 LVS-NAT 部署实战
1. 实例环境
负载调度器:内网关 ens33:192.168.23.2,外网关 ens36:10.0.0.1
Web节点服务器1:192.168.23.10
Web节点服务器2:192.168.23.15
NFS服务器:192.168.23.20
客户端:10.0.0.12
2. 部署共享存储
NFS 服务器:192.168.23.20
(1)安装 NFS 服务
# 安装 NFS RPC
yum install -y nfs-utils rpcbind
# 启动 NFS RPC 服务
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service
(2)创建共享目录
# 创建共享目录
mkdir /opt/dir1 /opt/dir2
chmod 777 /opt/dir1 /opt/dir2
# 设置共享目录
vim /etc/exports
/usr/share *(ro,sync,no_root_squash)
/opt/dir1 *(rw,sync,no_root_squash)
/opt/dir2 *(rw,sync,no_root_squash)
# 发布共享
exportfs -rv
3. 配置节点服务器
web1-server 服务器:192.168.23.10
web2-server 服务器:192.168.23.15
配置 web1-server 服务器
(1)安装 Apache 服务
yum -y install httpd
# 开启服务
systemctl start httpd
systemctl enable httpd
(2)安装 NFS 服务
# 安装 NFS RPC
yum install -y nfs-utils rpcbind
# 启动 NFS RPC 服务
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service
# 查看可用的NFS服务器用的共享目录
showmount -e 192.168.23.20
(3)挂载共享目录
# 永久挂载
echo "192.168.23.20:/opt/dir1 /var/www/html nfs defaults 0 0" >> /etc/fstab
mount -a
(4)设置 web1-server 页面
echo "this is web1-server" > /var/www/html/index.html
配置 web2-server 服务器
(1)安装 Apache 服务
yum -y install httpd
# 开启服务
systemctl start httpd
systemctl enable httpd
(2)安装 NFS 服务
# 安装 NFS RPC
yum install -y nfs-utils rpcbind
# 启动 NFS RPC 服务
systemctl start nfs.service
systemctl start rpcbind.service
systemctl enable nfs.service
systemctl enable rpcbind.service
# 查看可用的NFS服务器用的共享目录
showmount -e 192.168.23.20
(3)挂载共享目录
# 永久挂载
echo "192.168.23.20:/opt/dir2 /var/www/html nfs defaults 0 0" >> /etc/fstab
mount -a
(4)设置 web1-server 页面
echo "this is web2-server" > /var/www/html/index.html
4. 配置负载调度器
负载调度器:内网关 ens33:192.168.23.5,外网关 ens36:10.0.0.1
(1)配置 SNAT 转发规则
# 设置具有路由转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# 启用路由转发功能
sysctl -p
# 清空 iptables的nat表中的规则
iptables -t nat -F
# 清空 iptables的所有默认规则
iptables -F
# 将从源地址过来的路由全部转换成公网地址转发出去
iptables -t nat -A POSTROUTING -s 192.168.23.0/24 -o ens36 -j SNAT --to-source 10.0.0.1
(2)加载 LVS 内核模块
modprobe ip_vs
查看 ip_vs 内核模块版本
(3)安装 ipvsadm 管理工具
yum -y install ipvsadm
(4)启动 ipvsadm 服务
# 启动 ipvsadm 服务前必须备份负载分配策略配置,否则会报错
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
(5)配置负载分配策略
# 清除原有策略
ipvsadm -C
# 添加虚拟服务器
ipvsadm -A -t 10.0.0.1:80 -s rr
# 添加真实服务器(后端节点服务器)
ipvsadm -a -t 10.0.0.1:80 -r 192.168.23.10:80 -m -w 1
ipvsadm -a -t 10.0.0.1:80 -r 192.168.23.15:80 -m -w 1
#启动策略
ipvsadm
# 查看节点状态,Masq代表 NAT模式
ipvsadm -ln
#保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
5. 测试
在客户端浏览器访问负载调度器(每隔一段时间刷新一次或清空浏览器缓存):http://10.0.0.1
第一次访问
第二次访问
LVS-NAT 部署成功
九、总结
LVS-NAT模式,就是负载调度器通过防火墙策略使用 iptables 来将内网地址转化成公网地址,再使用 LVS 的 ipvsadm 工具进行负载均衡处理,将数据平均给后端服务器进行处理、返回。
步骤:
① 负载调度器内网转公网
iptables -t nat -A POSTROUTING -s [数据源IP地址] -o [数据转出网卡] -j SNAT --to-server [转化为的公网地址]
② 定义虚拟主机
ipvsadm -A -t [外网网卡]
③ 创建指向后端的地址池
ipvsadm -a -t [外网网卡] -r [后端服务器1]
ipvsadm -a -t [外网网卡] -r [后端服务器2]