Centos 7.6 群集架构之LVS负载均衡原理及部署

一、概述

在各种互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要 求越来越高,单台服务器已经无法满足负载均衡及高可用的要求。除了使用价格昂贵的大型 机、专用负载分流设备以外,企业还有另外一种选择来解决难题,那就是构建群集服务器— —通过整合多台服务器,使用 LVS 来达到服务器的高可用和负载均衡,并以同一个 IP 地址对外提供相同的服务。群集技术——LVS(Linux Virtual Server,Linux 虚拟服务器)

二、群集

群集的称呼来自于英文单词“Cluster”,表示一群、一串的意思,用在服务器领域则表 示大量服务器的集合体,以区分于单个服务器

1、群集的类型

无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访 问入口。根据群集所针对的目标差异,可分为以下三种类型:

  • 负载均衡群集(Load Balance
    Cluster):以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载的整体性能。例如,“DNS
    轮询”“应用层交换”“反向代理”等都可用作负载均衡群集。LB
    的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解 整个系统的负载压力。
  • 高可用群集(High Availability Cluster):以提高应用系统的可靠性、尽可能地
    减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。例如,
    “故障切换”“双机热备”“多机热备”等都属于高可用群集技术。HA 的工作方式包
    括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当 出现故障时从节点能自动切换为主节点。
  • 高性能运算群集(High Performance Computer Cluster):以提高应用系统的 CPU
    运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。例如,“云计算”“网格计算”也可视为高性能运算的一种。
    高性能运算群集的高性能依赖于“分布式运算”“并行计算”,通过专用硬件和软件 将多个服务器的
    CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备 的计算能力。 不同类型的群集在必要时可以合并,如高可用的负载均衡群集

2、分层结构

在典型的负载均衡群集中,包括三个层次的组件,如图 1.1 所示。前端至少有一个负载 调度器(Load Balancer,或称为 Director)负责响应并分发来自客户机的访问请求;后端 由大量真实服务器(Real Server)构成服务器池(Server Pool),提供实际的应用服务, 整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的;为了 保持服务的一致性,所有节点使用共享存储设备
在这里插入图片描述

  • 第一层,负载调度器:这是访问整个群集系统的唯一入口,对外使用所有服务器共有的 VIP(Virtual IP,虚拟 IP)地址,也称为群集IP 地址。通常会配置主、备 两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。
  • 第二层,服务器池:群集所提供的应用服务(如 HTTP、FTP)由服务器池承担,其中每个节点具有独立的 RIP(Real IP,真实IP)地址,只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错 误排除以后再重新纳入服务器池。
  • 第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。在 Linux/UNIX环境中,共享存储可以使用 NAS 设备,或者提供NFS(Network File System,网络文件系统)共享服务的专用服务器。

3、工作模式

关于群集的负载调度技术,可以基于 IP、端口、内容等进行分发,其中基于 IP 的负载调度是效率最高的。基于 IP 的负载均衡模式中,常见的有地址转换、IP 隧道和直接路由三种工作模式
在这里插入图片描述

  • 地址转换(Network Address Translation):简称 NAT
    模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。服务器节点使用私有
    IP 地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。
  • IP 隧道(IP Tunnel):简称 TUN 模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的
    Internet 连接直接回应客户机,而不再 经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网 IP 地 址,通过专用
    IP 隧道与负载调度器相互通信。
  • 直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN
    模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的
    IP 隧道。

以上三种工作模式中,NAT 方式只需要一个公网 IP 地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就采用这种方式。相比较而言,DR 模 式和 TUN 模式的负载能力更加强大,适用范围更广,但节点的安全性要稍差一些。

三、LVS 虚拟服务器

Linux Virtual Server 是针对 Linux 内核开发的一个负载均衡项目,由我国的章文嵩博士在 1998 年 5 月创建,官方站点位于 http://www.linuxvirtualserver.org/。LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了一种 高效的解决方法。 LVS 现在已成为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调用

1、负载调度算法

针对不同的网络服务和配置需要,LVS 调度器提供多种不同的负载调度算法,其中最常 用的四种算法是轮询、加权轮询、最少连接和加权最少连接。

  • 轮询(Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各节点,均等地对待每台服务器,而不管服务器实际的连接数和系统负载。
  • 加权轮询(Weighted Round Robin):根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更多请求。
  • 最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
  • 加权最少连接(Weighted Least Connections):在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更大比例的活动连接负载。

2、ipvsadm 管理工具

ipvsadm 是在负载调度器上使用的 LVS 群集管理工具,通过调用 ip_vs 模块来添加、删 除服务器节点 ,以 及 查 看 群集 的 运 行状 态 。 在 CentOS 7 系 统 中 , 需要手动安装 ipvsadm.x86_64 0:1.27-7.el7 软件包

四、负载均衡实例部署

1、准备工作

角色 系统 ip地址 环境准备
客户机 win7 12.0.0.128 绑定vm2网卡
nfs服务器 centos 7.6 192.168.192.207 绑定wm1网卡,安装启动nfs服务
web服务器 centos 7.6 192.168.192.205 绑定wm1网卡,安装启动apache
web服务器 centos 7.6 192.168.192.206 绑定wm1网卡,安装启动apache
lvs服务器 centos 7.6 ens33:192.168.192.2 ens36:12.0.0.2 安装启动ipvsadm

2、具体步骤

2.1 配置nfs共享存储服务器

NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡 群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支持的一种协议。
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程 到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持

新建2块硬盘,重启机器,分区格式化磁盘

[root@nfs ~]#fdisk /dev/sdb
[root@nfs ~]#fdisk /dev/sdc
[root@nfs ~]# mkfs.xfs /dev/sdb1
[root@nfs ~]# mkfs.xfs /dev/sdc1

新建2个挂载目录,挂载磁盘

[root@nfs ~]# mkdir /opt/yjs /opt/cloud

[root@nfs ~]# vim /etc/fstab
/dev/sdb1 /opt/yjs xfs defaults 0 0
/dev/sdc1 /opt/cloud xfs defaults 0 0

[root@nfs ~]# mount -a

[root@nfs ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
……
/dev/sdb1               xfs        20G   33M   20G    1% /opt/yjs
/dev/sdc1               xfs        20G   33M   20G    1% /opt/cloud

安装nfs-util、rpcbind软件包

[root@nfs ~]# yum -y install nfs-utils rpcbind

NFS的配置文件为/etc/exports,文件内容默认为空(无任何共享)。在 exports 文件中设置共享资源时,记录格式为“目录位置 客户机地址(权限选项)”,其中客户机地址可以是主机名、IP 地址、网段地址,允许使用*、?通配符;权限选项 中的 rw 表示允许读写(ro 为只读),sync 表示同步写入,no_root_squash 表示当客户机以 root 身份访问时赋予本地 root 权限,以下是将两个存储目录共享给两台web服务器使用

[root@nfs ~]# vim /etc/exports
/opt/yjs 192.168.192.0/24(rw,sync,no_root_squash)
/opt/cloud 192.168.192.0/24(rw,sync,no_root_squash)

开启nfs、rpcbind服务并查看本机发布的 NFS 共享目录

[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs

[root@nfs ~]# showmount -e
Export list for nfs:
/opt/cloud 192.168.192.0/24
/opt/yjs   192.168.192.0/24

2.2 配置第一台web服务器

安装apache

[root@web1 ~]# yum -y install httpd

查看 NFS 服务器端共享了哪些目录

[root@web1 ~]# showmount -e 192.168.192.207
Export list for 192.168.192.207:
/opt/cloud 192.168.192.0/24
/opt/yjs   192.168.192.0/24

挂载nfs共享目录到/var/www/html下,因为这是站点目录,访问的主页要写在里面
注意将文件系统类型设为 nfs,挂载参数建议添加_netdev(设备需要网络)

[root@web1 ~]# vim /etc/fstab
192.168.192.207:/opt/yjs /var/www/html nfs defaults,_netdev 0 0

[root@web1 ~]# mount -a

[root@web1 ~]# df -Th
文件系统                 类型      容量  已用  可用 已用% 挂载点
……
192.168.192.207:/opt/yjs nfs4       20G   32M   20G    1% /var/www/html

因为是轮询模式,为了能够验证,要为2台服务器创建不同的主页,为第一台web服务器创建主页,显示为this is yjs web

[root@web1 ~]# vim /var/www/html/index.html

<h1>this is yjs web</h1>

启动apache

[root@web1 ~]# systemctl start httpd

2.3 配置第二台web服务器

安装apache

[root@web2 ~]# yum -y install httpd

查看 NFS 服务器端共享了哪些目录

[root@web2 ~]# showmount -e 192.168.192.207
Export list for 192.168.192.207:
/opt/cloud 192.168.192.0/24
/opt/yjs   192.168.192.0/24

挂载nfs共享目录到/var/www/html下

[root@web2 ~]# vim /etc/fstab
192.168.192.207:/opt/cloud /var/www/html nfs defaults,_netdev 0 0

[root@web2 ~]# mount -a

[root@web2 ~]# df -Th
文件系统                   类型      容量  已用  可用 已用% 挂载点
……
192.168.192.207:/opt/cloud nfs4       20G   32M   20G    1% /var/www/html

为第二台web服务器新建自己的主页,显示为this is cloud web

[root@web2 ~]# vim /var/www/html/index.html

<h1>this is cloud web</h1>

启动apache

[root@web2 ~]# systemctl start httpd

2.4 配置lvs负载均衡服务器

安装ipvsadm

[root@lvs ~]# yum -y install ipvsadm

新建一块网卡作为外网卡,绑定vm2
配置网卡,网卡名称ens36,重启网卡

对于 LVS 负载调度器来说,需开启路由转发规则,以便节点服务器能够访问 Internet。 所有的节点服务器、共享存储均位于私有网络内,其默认网关设为 LVS 负载调度器的内网地址

开启路由转发功能

[root@lvs ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1

[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

配置防火墙,进行地址转换

[root@lvs ~]#iptables -F
[root@lvs ~]#iptables -t nat -F
[root@lvs ~]#iptables -t nat -A POSTROUTING -o ens36 -s 192.168.192.0/24 -j SNAT --to-source 12.0.0.2

加载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

配置负载分配策略,群集的 VIP 地址为 12.0.0.2,针对 TCP 80 端口提供负载分流服务,使用的调度算法为轮询

[root@lvs ~]#vim /opt/nat.sh
#!/bin/bash
ipvsadm -C     <----清除原有配置
ipvsadm -A -t 12.0.0.2:80 -s rr
ipvsadm -a -t 12.0.0.2:80 -r 192.168.192.205 -m
ipvsadm -a -t 12.0.0.2:80 -r 192.168.192.206 -m
ipvsadm

上述操作中

  • -A 表示添加虚拟服务器
  • -t 用来指定 VIP 地址及 TCP 端口
  • -s 用来指定负载调度算法——轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)。
  • -a 表示添加真实服务器;
  • -r 用来指定 RIP 地址及 TCP 端口;
  • -m 表示使用 NAT 群集模式(-g DR 模式和-i TUN 模式);
  • -w 用来设置权重(权重为 0 时表示暂停节点)。
[root@lvs ~]# chmod +x /opt/nat.sh

[root@lvs ~]# cd /opt
[root@lvs opt]# ./nat.sh 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  lvs:http rr
  -> 192.168.192.205:http         Masq    1      0          0         
  -> 192.168.192.206:http         Masq    1      0          0  
  
[root@lvs ~]# ipvsadm --save > /etc/sysconfig/ipvsadm   <------使用导出/导入工具 ipvsadm-save/ipvsadm-restore 保存策略

启动ipvsadm

[root@lvs ~]# systemctl start ipvsadm

2.5 客户机验证

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/shengjie87/article/details/108337723