您的位置:首页 > 其它

LVS负载均衡群集及相关服务详解

楚门的世界 2019-09-11 17:08 35 查看 https://blog.51cto.com/1415762

在各种互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器将难以承担所有的访问。除了使用价格昂贵的大型机、专用负载分流设备以外,企业中还有另外一种选择来解决难题,就是构建群集服务器——通过整个多台相对廉价的普通服务器,以同一个地址提供相同的服务。

在Linux系统中,有一种非常常用的群集技术——LVS(Linux Virtual Server,Linux虚拟服务器)。

博文大纲:
一、群集技术概述;
二、LVS虚拟服务器详解;
三、NFS共享存储服务详解;

LVS群集应用基础

群集:表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。

一、群集技术概述

根据实际企业环境的不同,群集所提供的功能也各不相同,采用的技术细节也可能各有千秋。然而从整体上来看,需要先了解一些关于群集的共性特征,这样才能在构建和维护群集的工作中做到心中有数,避免操作上的盲目性。

1.群集的类型

无论是哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。

根据群集所针对的目标差异,可分为以下三种类型:

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

不同类型的群集在必要的时候可以合并,如高可用的负载均衡群集。

2.负载均衡的分层结构

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

图中各层的详细介绍:

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

3.负载均衡的工作模式

关于群集的负载调度技术,可以基于IP、端口、内容等进行分发,其中基于IP的负载调度是效率最高的。

基于IP的负载均衡模式中,常见的有:

地址转换:简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,及作为客户机的访问入口。服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。如图:

IP隧道:简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。如图:

直接路由:简称DR模式,采用半开放式的网络结构,与TUN模式的结构相似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负责调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。如图:

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

二、LVS虚拟服务器详解

Linux Virtual Server是针对Linux内核开发的一个负载均衡的项目,其官方网站是http://www.linuxvirtualserver.org/ 。LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法。

LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。在Centos 7系统中,手动加载ip_vs模块,可以执行以下命令:

[root@localhost ~]# modprobe ip_vs                                    //加载IP_vs模块
[root@localhost ~]# cat /proc/net/ip_vs                                 //查看IP_vs版本信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

1.LVS的负载调度算法

针对不同的网络服务和配置需要,LVS调度器提供了多种不同的负载调度算法,其中最常用的几种算法:

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

2.使用ipvsadm管理工具

ipvsadm是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs模块来添加、删除服务器节点,以及查看群集的运行状态。

在CentOS 7系统默认没有安装,需要自行安装!

[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)

ipvsadm命令的操作方法:

[root@localhost ~]# ipvsadm -A -t 192.168.1.254:80 -s rr
//群集的VIP地址是192.168.1.254,针对TCP的80端口提供负载分流服务,使用的调度算法是轮询。

命令中各选项的含义:

  • “-A”表示添加虚拟服务器;
  • “-t”用来制定VIP地址及TCP端口;
  • “-s”用来制定负载调度算法;
    轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)。
[root@localhost ~]# ipvsadm -a -t 192.168.1.254:80 -r 192.168.1.100 -m -w 1
//为虚拟服务器添加一个IP为192.168.1.254的真实服务器

命令中各选项(及相关选项)的含义:

  • -a:添加真实服务器;
  • -t:指定VIP地址及TCP端口;
  • -r:指定RIP地址及TCP端口(端口可以省略);
  • -m:使用NAT群集模式;
  • -g:使用DR群集模式;
  • -i:使用TUN群集模式;
  • -w:设置权重(权重为0时表示暂停节点,默认是1);
[root@localhost ~]# ipvsadm -ln
//查看群集节点状态
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.254:80 rr
-> 192.168.1.100:80             Masq    1      0          0
//Forward列对应的是Masq(地址伪装),表示采用的群集模式为NAT;
ActiveConn列:当前连接数;
InActConn列:正在活动的连接数;
[root@localhost ~]# ipvsadm -d -r 192.168.1.100:80 -t 192.168.1.254:80
//从群集中删除192.168.1.100的节点(-d表示删除)
[root@localhost ~]# ipvsadm -D -t 192.168.1.254:80
//删除192.168.1.254这个VIP(也就意味这个群集就没了)
[root@localhost ~]# ipvsadm-save
//查看设置的策略
[root@localhost ~]# ipvsadm-save > 123.txt
//保存策略到指定文件
[root@localhost ~]# cat 123.txt
-A -t 192.168.1.254:http -s rr
-a -t 192.168.1.254:http -r 192.168.1.100:http -m -w 1
//确认保存文件内容
[root@localhost ~]# ipvsadm -C
//清空所有策略
[root@localhost ~]# ipvsadm-restore < 123.txt
//从指定文件导入策略

三、NFS共享存储服务详解

NFS是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源,对于绝大多数的负载均衡群集来说,使用NFS协议来共享数据存储是非常常见的做法。

1.使用NFS发布共享资源

NFS服务的实现依赖与RPC机制,已完成远程到本地的映射过程。需要安装一下两个软件包才能提供NFS共享服务。

[root@localhost ~]# yum -y install nfs-utils
//用于NFS共享发布和访问
[root@localhost ~]# yum -y install rpcbind
//用于RPC支持

2.设置共享目录

[root@localhost ~]# mkdir /a
[root@localhost ~]# touch /a/123.txt
//创建目录、文件用于测试
[root@localhost ~]# vim /etc/exports
//填写以下内容(NFS服务的配置文件为/etc/exports)
/a      192.168.1.0(rw,sync,no_root_squash)
或者
[root@localhost ~]# vim /etc/exports
//填写以下内容(NFS服务的配置文件为/etc/exports)
/a      192.168.1.1(rw,sync,no_root_squash) 192.168.1.10(ro,sync)

配置文件中

  • (/a)是本地用于共享的目录;
  • IP地址、网段地址,允许使用*、?通配符;
  • rw(读写)、ro(只读)、sync(同步)、no_root_squash(表示当客户机以root身份访问时赋予本地root权限,默认是root_squash,将作为nfsnobody用户降权对待)
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
//启动nfs服务、rpcbind服务
[root@localhost ~]# showmount -e
//查看本机发布的共享目录
Export list for localhost.localdomain:
/a 192.168.1.10,192.168.1.1

3.客户机访问测试

[root@localhost ~]# showmount -e 192.168.1.2
//查询NFS服务的发布情况
Export list for 192.168.1.2:
/a 192.168.1.10,192.168.1.1
[root@localhost ~]# mount 192.168.1.2:/a /b
[root@localhost ~]# ls /b
123.txt
//挂载到本地,并查看内容
//如果开启同步权限,有任何变化,NFS服务器和客户端会立马更新内容

4.客户机实现自动挂载

[root@localhost ~]# vim /etc/fstab
………………                     //省略部分内容,填写以下内容
192.168.1.2:/a          /b                      nfs     defaults,_netdev        0 0
//_netdev  建议添加次参数,表示需要网络支持;如果想在网络终端的情况下放弃挂载,添加一下参数(soft、intr)实现软挂载

客户机重新启动后,也会自动挂载!!!

———————— 本文至此结束,感谢阅读 ————————

标签: