天天看点

LVS负载均衡群集

LVS负载均衡群集

群集的类型

1、负载均衡群集:以提高应用系统的相应能力,尽可能处理更多的相应请求,较少延迟为目标,获得搞并发高负载的整体性能。例如:反向代理、LB的负载分配依赖于朱姐点的分流算法,将客户及的请求分担给多个服务器节点,从而缓解整个系统的负载压力。

2、高可用群集:以提高系统的可靠性,尽可能的减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。例如:故障切断、双机热备、多级热备,等都属于高可用群集技术。

3、高性能运算群集:以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为布标,获得相当于大型,超级计算机的高性能运算(HPC)能力。例如:云计算,网格计算,也可视为高性能运算的一种,高性能运算集群的高性能依赖于、分布式运算、并行运算,通过专用的硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。

负载均衡的分层结构

LVS负载均衡群集

1、 第一层,负载调度器:这是访问整个集群系统的唯一入口,对外使用所有服务器共有的V-IP(Virtual IP,虚拟IP)地址,已成为集群IP地址。通常会配置主、被两台调度器来实现热备份,当朱调度器失效后将平滑替换至备用调度器,确保高可用性

2、 第二层,服务器池:集群所提供的应用服务(如 ftp http)由服务器池承担,其中每个节点都具有独立的R-IP (Real IP,真实IP)地址,只处理调度器分配过来的客户端请求,当某个节点暂时失效时,负责调度器的容错机制会将其隔离,等待错误排除以后重新纳入服务器池。

3、 第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务、确保整个集群的统一性,在Linux/Unix环境中,共享存储可以使用NAS设备,或者提供NFS(network file system网络文件系统)共享服务的专用服务器。

负载均衡的工作模式

关于集群的负载调度技术,可以基于IP、端口、内容等进行分发,其中基于IP的负载调度是效率最高的。基于IP的负载均衡模式最常见的有以下三种

LVS负载均衡群集

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

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

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

LVS虚拟服务器

LVS现在已经成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。怎centos7中,一下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息。

[root@localhost ~]# modprobe ip_vs

[root@localhost ~]# 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

1、LVS的负载调度算法,常见的有一下四种。

1)、轮询:将收到的服务器访问请求按照顺序轮流分配给集群中的各节点,均等的对待每一台服务器,而不管服务器实际的连接数和系统负载。

2)、加权轮询:根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重,这样可以保证处理能力强的服务器承担更多的访问量。

3)、最少连接:根据真实服务器已建立的连接数进行分配,将收到的访问请求有限分配给连接数最少的节点,如果所有的服务器节点性能相近,采用这种方式可以更好的均衡负载

4)、加权最少连接:在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例的活动链接负载。

2、使用ipvsadm管理工具

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

[root@localhost ~]# mount /dev/cdrom /mnt/

mount: /dev/sr0 写保护,将以只读方式挂载

[root@localhost ~]# rm -rf /etc/yum.repos.d/*

[root@localhost ~]# vi /etc/yum.repos.d/centos.repo

[local]

name=local

baseurl=file:///mnt/

enabled=1

gpgcheck=0

:wq

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

LVS集群的管理工作主要包括创建虚拟服务器、添加服务器节点、查看群集节点状态、删除服务器节点和保存负载分配策略。下面我们分别展示一下ipvsadm命令的操作方法

1)、创建虚拟服务器

若群集的IP地址为192.168.10.20,针对TCP的80端口提供负载分流服务,使用的调度算法为轮询,则对应的ipvsadm命令操作如下所示,对于负载均衡调度器来说, Virtual IP必须是本机实际已启用的IP地址。

[root@localhost ~]# ipvsadm -A -t 192.168.10.20:80 -s rr

上述命令中,选项:-A表示添加虚拟服务器。

选项:-t用来指定Virtual IP地址及端口。

选项:-s用来指定负载调度算法,rr:轮询、wrr:加权轮询、lc:最少连接、wlc:加权最少连接

2)、添加服务器节点

为虚拟服务器192.168.10.20添加四个服务器节点,IP地址分别为192.168.10.30、40、50、60对应的命令如下。

[root@localhost ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.10.30:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.10.40:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.10.50:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 192.168.10.20:80 -r 192.168.10.60:80 -m -w 1

上述命令中,选项:-a表示添加真实服务器

选项:-t表示表示指定virtual IP地址及TCP端口

选项:-r用来指定RIP地址及TCP端口,

选项:-m用来指定NAT集群模式(-g DR模式,-I TUN模式)

选项:-w用来设置权重(权重为0 时表示暂停节点)

3)、查看群集节点状态

[root@localhost ~]# ipvsadm -ln ##查看服务器节点状态

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.10.20:80 rr

-> 192.168.10.30:80 Masq 1 0 0

-> 192.168.10.40:80 Masq 1 0 0

-> 192.168.10.50:80 Masq 1 0 0

-> 192.168.10.60:80 Masq 1 0 0

上述结果中Forward列下的Masq为(伪装地址),表示采用的是群集模式为NAT模式,如果Route,则表示采用的群集模式为DR

删除服务器节点

4)、删除服务器节点

要从池中删除某个节点时,使用选项:-d。执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址

例如:以下命令将会删除LVS群集192.168.10.20中的节点192.168.10.30

[root@localhost ~]# ipvsadm -d -r 192.168.10.30:80 -t 192.168.10.20:80

[root@localhost ~]# ipvsadm -ln

需要删除真个虚拟服务器时,使用选项:-D并制定虚拟IP地址即可,无需指定节点,

例如:以下操作

[root@localhost ~]# ipvsadm -D -t 192.168.10.20:80

5)、保存负载分配策略

使用导入/导出工具:ipvsadm-save:保存。Ipvsadm-restore:恢复LVS策略。也可以使用快速清除、重建负载分配策略

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm ##保存策略

[root@localhost ~]# cat /etc/sysconfig/ipvsadm ##查看保存的结果

-A -t localhost.localdomain:http -s rr

-a -t localhost.localdomain:http -r 192.168.10.30:http -m -w 1

-a -t localhost.localdomain:http -r 192.168.10.40:http -m -w 1

-a -t localhost.localdomain:http -r 192.168.10.50:http -m -w 1

-a -t localhost.localdomain:http -r 192.168.10.60:http -m -w 1

[root@localhost ~]# systemctl stop ipvsadm ##停止服务(清除策略)

[root@localhost ~]# systemctl start ipvsadm ##启动服务(重建规则)

共享存储服务器:NFS

NFS是一种基于tcp/ip传输的网络文件系统协议,通过使用NFS协议,客户机可以向访问本地目录一样访问远程服务器中的共享资源。

1、 使用NFS发布共享资源

NFS服务的实现依赖于RPC(远端过程调用)机制,可完成远程到本地的映射过程,我们需要以下两个安装包

nfs-utils:用于NFS共享发布和访问

rpcbind:用于RPC支持

操作服务器为:192.168.10.70

1)、安装nfs-utils、rpcbind软件包:并设置开机启动。

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

[root@localhost ~]# systemctl enable nfs

[root@localhost ~]# systemctl enable rpcbind

2)、设置共享目录

NFS的配置文件为/etc/exports,文件内容默认为空(无任何共享)。

exports文件的设置格式为“目录位置 客户机地址(权限选项)”

[root@localhost ~]# mkdir -p /opt/wwwroot/ ##创建共享路径

[root@localhost ~]# vi /etc/exports ##修改配置文件

/opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)

其中客户机地址可以是主机名、IP地址、IP网段、允许使用、?通配符;权限选项中rw表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限,(默认是root_squash,将作为nfsnobody用户降权对待)。

如果需要将同一个共享目录共享给不同的客户机时,且权限分配不同时,只要使用空格分割多个“客户机(权限选项)”例如以下操作:

[root@localhost ~]# vi /etc/exports

/opt/wwwroot 192.168.10.30(ro) 192.168.10.40(rw)

3)、启动nfs服务程序

[root@localhost ~]# systemctl start rpcbind

[root@localhost ~]# systemctl start nfs

[root@localhost ~]# netstat -anpt | grep rpc

tcp 0 0 0.0.0.0:20048 0.0.0.0: LISTEN 1592/rpc.mountd

tcp 0 0 0.0.0.0:52291 0.0.0.0: LISTEN 1590/rpc.statd

tcp6 0 0 :::20048 ::: LISTEN 1592/rpc.mountd

tcp6 0 0 :::46238 ::: LISTEN 1590/rpc.statd

4)、查看本机发布的NFS共享目录

[root@localhost ~]# showmount -e

Export list for localhost.localdomain:

/opt/wwwroot 192.168.10.0/24

2、 在客户机中访问NFS共享资源

NFS协议的目标是提供一种网络文件系统,因此对NFS共享的访问也是用mount命令进行挂载,对应的文件系统类型为nfs,既可以手动挂载,也可以使用fstab配置文件实现开机自动挂载。考录到集群系统的稳定性,建议使用专用的网络进行连接。

操作服务器为:192.168.10.30\40\50\60节点服务器

1)、安装rpcbind、nfs-utils软件包,并设置为开机启动。

在四台节点服务器上分别安装软件包

[root@localhost ~]# rm -rf /etc/yum.repos.d/

如果安装了nfs-utils软件包,也可以在客户机中查看指定NFS共享服务器共享了那些目录

例如:以下命令

[root@localhost ~]# showmount -e 192.168.10.70

Export list for 192.168.10.70:

2)、手动挂载NFS共享目录

以root身份执行mount操作,将NFS服务器共享的/opt/wwwroot目录挂载到本地目录的/var/www/html

[root@localhost ~]# mkdir -p /var/www/html

[root@localhost ~]# mount 192.168.10.70:/opt/wwwroot /var/www/html

[root@localhost ~]# tail -1 /etc/mtab ##确认挂载结果

192.168.10.70:/opt/wwwroot /var/www/html nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.30,local_lock=none,addr=192.168.10.70 0 0

[root@localhost ~]# vi /var/www/html/index.html

<h1>my web server<h1>

查看192.168.10.70 NFS共享服务器的共享路径

[root@localhost ~]# ls /opt/wwwroot/

index.html ##看到我们刚刚创建的网页文档,表示共享成功

3)、fstab自动挂载

修改fstab配置文件,注意文件系统类型为nfs,挂载参数建议添加”_netdev”(网络设备)

[root@localhost ~]# vi /etc/fstab

192.168.10.70:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0

构建LVS负载均衡群集

地址转换模式(LVS-NAT)

1、 准备案例环境

在NAT模式的群集中,LVS负载调度器使所有节点的Internet网关服务器,其外网地址10.10.10.10同事也是整个群集的V IP地址,LVS有两块网卡,分别连接内网,外网。

LVS负载均衡群集

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

2、 配置负载调度器-在192.168.10.20服务器上操作

重启服务器并添加一块新网卡,编辑网络配置文件。

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-ens34

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens34

TYPE=Ethernet

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

NAME=ens34

DEVICE=ens34

ONBOOT=yes

IPADDR=10.10.10.10

PREFIX=24

GATEWAY=10.10.10.1

[root@localhost ~]# systemctl restart network

1)、开启路由转发规则

[root@localhost ~]# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@localhost ~]# sysctl -p

2)配置负载分配策略

[root@localhost ~]# ipvsadm -C ##清除原有策略

[root@localhost ~]# ipvsadm -A -t 10.10.10.10:80 -s rr

[root@localhost ~]# ipvsadm -a -t 10.10.10.10:80 -r 192.168.10.30:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 10.10.10.10:80 -r 192.168.10.40:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 10.10.10.10:80 -r 192.168.10.50:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 10.10.10.10:80 -r 192.168.10.60:80 -m -w 1

[root@localhost ~]# ipvsadm-save ##保存策略

[root@localhost ~]# systemctl enable ipvsadm

3、置节点服务器-在192.168.10.30-40-50-60上操作

所有的节点服务器均使用相同的配置,包括httpd服务端口,网站文档内容。在实际上各节点的网站文档可存放在共享存储设备中,从而免去同步的过程,但在案例调试阶段可以为各节点采用不同的网页,以便测试负载均衡效果

1)、安装httpd,创建测试网页

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

[root@localhost ~]# mount 192.168.10.70:/opt/wwwroot /var/www/html ##测试群集权重效果可以跳过

<h1>LVS负载均衡群集--测试网页<h1>

2)、启用httpd服务

[root@localhost ~]# systemctl start httpd

[root@localhost ~]# systemctl enable httpd

3)、将4台节点服务器的网关均设置为192.168.10.20

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens32

……… ##省略部分

IPADDR=192.168.10.30

GATEWAY=192.168.10.20

4、测试LVS群集

可以安排多台测试机,网关指向LVS外网地址(10.10.10.10),使用浏览器访问http://10.10.10.10直接可以看到真实服务器提供的网页文档,如:4台服务器的网页文档不一样,一可以试着多刷新几次,验证权重效果。

在LVS负载调度器中,通过查看节点状态可以观察当前负载分配的情况。

TCP 10.10.10.10:80 rr

-> 192.168.10.30:80 Masq 1 1 0

-> 192.168.10.40:80 Masq 1 0 1

-> 192.168.10.50:80 Masq 1 0 1

-> 192.168.10.60:80 Masq 1 0 1

直接路由模式(LVS-DR)

1、准备案例环境

在DR模式的群集中,LVS负载调度器作为群集的访问入口,但不作为网关使用,服务器池中的所有节点都各自介入Internet,发给客户机的响应数据包不需要经过LVS负载调度器。

这种方式入站,出站访问数据被分别处理,因此LVS负载调度器和虽有节点都需要配置VIP地址,以便响应对整个群集的访问,考录到数据存储的安全性,共享存储设备会放在内部的专用网络中

LVS负载均衡群集

2、配置负载调度器

操作192.168.10.20负载调度服务器

1)、配置虚拟IP地址

采用虚接口的方式(ens32:0),为王珂ens32绑定VIP地址,以便响应群集访问

配置结果为ens32 192.168.10.20、ens33:0 192.168.10.21

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens32 /etc/sysconfig/network-scripts/ifcfg-ens32:0

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens32:0

NAME=ens32:0

DEVICE=ens32:0

IPADDR=192.168.10.21

GATEWAY=192.168.10.1

DNS1=202.106.0.20

[root@localhost ~]# ifup ens32:0

[root@localhost ~]# ifconfig ens32:0

ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.10.21 netmask 255.255.255.0 broadcast 192.168.10.255

ether 00:0c:29:2a:25:be txqueuelen 1000 (Ethernet)

2)、调整/proc相应参数

对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应关闭Linux内核的重定向参数响应。

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens32.send_redirects = 0

3)、配置负载分配策略

[root@localhost ~]# ipvsadm -A -t 192.168.10.21:80 -s rr

[root@localhost ~]# ipvsadm -a -t 192.168.10.21:80 -r 192.168.10.30:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 192.168.10.21:80 -r 192.168.10.40:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 192.168.10.21:80 -r 192.168.10.50:80 -m -w 1

[root@localhost ~]# ipvsadm -a -t 192.168.10.21:80 -r 192.168.10.60:80 -m -w 1

3、配置节点服务器

使用DR模式时,节点服务器也需要配置VIP地址,并调整内个的ARP响应参数以阻止更新VIP的mac地址,避免发生冲突。除此之外,web服务的配置与NAT方式类似。

在把每个节点服务器,同样需要具有VIP地址:192..168.10.21,但此地址仅用于发送web响应数据包的原地址,并不需要监听客户机的访问请求(改由调度器监听并分发),因此使用虚接lo:0来承载VIP地址,并未本机添加一条路由路径,将访问VIP的数据限制在本地,以避免通信紊乱。

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0

NETMASK=255.255.255.255 ##注意子网掩码全为1

NAME=loopback

[root@localhost ~]# ifup ifcfg-lo:0

[root@localhost ~]# ifconfig lo:0

lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

inet 192.168.10.21 netmask 255.255.255.255

loop txqueuelen 1 (Local Loopback)

[root@localhost ~]# vi /etc/rc.local

/sbinroute add -host 192.168.10.21 dev lo:0 ##添加进去即可

[root@localhost ~]# route add -host 192.168.10.21 dev lo:0

2)、调整/proc响应

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

3)、安装httpd,创建测试网页

4)、启用httpd服务

重复以上配置在其他节点服务器

可以安排多台测试机,使用浏览器从外网直接访问http://192.168.10.21直接可以看到真实服务器提供的网页文档,如:4台服务器的网页文档不一样,一可以试着多刷新几次,验证权重效果。

继续阅读