赞
踩
集群技术类型概述
无论是那种集群,都至少包括两台节点服务器而对外表现为一个整体,只提供一个访问入口(域名或IP),相当于一个大型计算机。根据 集群所针对的目标差异,可分为一下三种类型。
负载均衡集群(LB):以提高系统响应力,尽可能处理更多的访问请求,减少延迟为目标、获得高并发、高负载的整体性能。LB 的负载均衡分配依赖于主节点的分流算法,将来自客户端的访问请求分担给多个节点服务器,从而缓解 整个系统的负载压力。
高可用集群(HA):以提高应用系统的可靠性、尽可能的减少服务、系统中断时间为目的,确保服务的连续性,达到高可用的容错效果。HA的工作方式包括双工和主从模式。双工即所有节点同时在线,主从则只有主节点在线,但出现故障时从节点能自动切换为主节点。
高性能运算集群(HPC):以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当大型、超级计算机的高性能运算(HPC)能力。高性能运算集群的高性能依赖于“分布式”并行计算,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的能力。
不同类型的集群在必要时可以合并,如高可用+负载均衡,(下一章)
负载均衡分层架构
在典型的负载均衡集群中,包括三个层次的组件。大致分为一下内容。
第一层,负载调度层:访问整个集群系统的唯一入口,对外使用所有服务器共有的VIP(虚拟IP),也称为集群地址。通常会配备两个或以上的调度器实现热备份,确保高可用性。
第二层,服务器池:集群所提供的应用服务有服务器承担,其中每个节点具有独立真实的IP地址,只处理调度器分发过来的客户端请求。当某个节点暂时失效时,负载均衡调度器的容错机制会将其隔离,等待错误排除后在重新纳入服务器池。
第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务。使其提供一致的资源,确保整个集群的一致性,在Linux环境中,共享存储可以使用NAS或NFS(网络文件系统)
负载均衡工作模式
集群的负载调度技术,可以基于IP、端口、内容进行分发,其中基于IP的负载调度效率是最高的。基于IP的负载均衡模式中,常见的有地址转换NAT、IP隧道TUN、直接路径DR三种工作模式。
**基于IP分发的工作模式:**地址转换NAT、IP隧道TUN、直接路由DR
1. 地址转换NAT:私有网络结构,需要一个公网IP供客户端访问,安全性较好降低成本,调度器与各节点服务器处在同一个物理网络,调度器作为入口和出口负载较大。
2. IP隧道TUN:开放式网络结构,调度器和每个节点服务器都需要一个公网IP地址,成本高,且可以不在同一个网络,调度器只作为访问入口接收和分发客户端访问请求,不作为出口响应客户端,各节点服务器都各自接入互联网,接收来自调度器分发的客户端访问请求后单独相应客户端。
3. 直接路由DR:半开放式网络结构,调度器和每个节点服务器都需要一个公网地址,调度器与各节点服务器位于同一个物理网络,调度器作为访问入口和分发客户端访问请求,但不作为出口响应客户端,各节点服务器各自接入互联网并绑定VIP,接收到来自调度器分发的访问请求后,由节点服务器以自身绑定的VIP地址直接响应客户端。(冒充调度器访问入口的IP回应客户端)。
地址转换:易用、安全性较好,节省资源。
IP隧道:成本高、能力更强大,适用范围广,节点安全性较差。
直接路由:成本高、能力更强大、适用范围广、节点安全性较好。
LVS虚拟服务器
负载均衡调度工具,健康检查能力较弱,实现集群调度、负载均衡的一种软件也是一种反向代理服务器,外网通过调度器访问内网的服务,LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址请求分发的负载均衡提出了一种高效的解决方法。
IP负载均衡是基于特定的TCP/IP技术实现的负载均衡。如NAT、DR、IP隧道、Turning等,是常用的方式。
IP负载均衡可以使用硬件设备,也可以使用软件实现。硬件产品有F5-BIG-IP-GTM(简称F5),软件主要产品有LVS、Haproxy、Nginx。Haproxy可以工作在4、7层,Nginx工作在7层。
LVS现在已经成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。在CentOS7系统中,以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息。(默认存在)
modprobe ip_vs //加载ip_vs模块
cat /proc/net/ip_vs //查看ip_vs版本信息
LVS负载均衡调度算法
以下为常用的负载均衡算法
1. 轮询rr:将收到的客户端访问请求,按顺序分发给集群中的各节点服务器均等对待每台服务器,不管服务器的系统负载和实际连接数。
2. 加权轮询wrr:根据服务器的处理能力分配接收到的访问请求,调度器可以自动查询每个节点的负载情况,并动态调整其权重。保证处理能力强的服务器承担更多的流量。
3.最少连接lc:根据服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有服务器的性能相近,这种算法可以更好的负载均衡。
4. 加权最少连接wlc:在服务器节点的性能差异较大情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例活动的连接负载。
ipvsadm管理工具、命令
LVS管理工具
ipvsadm是在负载均衡调度器上使用的LVS集群管理工具,通过调用ip_vs模块在添加、删除服务器节点,以及查看集群的运行状态。需要手动安装ipvsadm软件包。
[root@lvs ~]# yum -y install ipvsadm
[root@lvs ~]# ipvsadm -ln //-l查看LVS虚拟服务器,-n以数字形式显示地址、端口等信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]# systemctl enable ipvsadm
1. 创建虚拟服务器(VIP地址)
对于负载均衡调度器来说VIP必须是本机实际已启用的的地址。
[root@lvs ~]#
[root@lvs ~]# ipvsadm -A -t 202.0.0.1:80 -s rr
[root@lvs ~]# ipvsadm -D -t 202.0.0.1:80 //示例
-A:添加虚拟服务器 -D:删除虚拟服务器 -t:地址VIP地址及TCP端口
-s:指定负载调度算法 -p:保持时间(单位s) rr:轮询算法
wrr:加权轮询 lc:最少连接 wlc:加权最少连接
2.添加节点服务器
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.3:80 -m -w 1
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.4:80 -m -w 1
-a:添加节点服务器 -r:指定节点服务器地址及端口 -m:使用NAT集群模式
-w:设置权重1,调度器1:1,分发客户端访问请求,根据服务器性能设置,0表示暂停节点不接受调度器分发的请求。
3.保存负载分配策略
使用导出/导入工具ipvsadm-save / ipvsadm-restore可以保存、恢复LVS策略,也可以快速清除、重建负载分配策略。
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 202.0.0.1:80 -s rr
-a -t 202.0.0.1:80 -r 192.168.8.3:80 -m -w 1
-a -t 202.0.0.1:80 -r 192.168.8.4:80 -m -w 1
[root@lvs ~]# systemctl stop ipvsadm
[root@lvs ~]# systemctl start ipvsadm
[root@lvs ~]#
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 202.0.0.1:80 rr
-> 192.168.8.3:80 Masq 1 0 0
-> 192.168.8.4:80 Masq 1 0 0
4. 删除节点服务器和VIP
[root@lvs ~]# ipvsadm -d -t 202.0.0.1:80 -r 192.168.8.3:80
[root@lvs ~]# ipvsadm -d -t 202.0.0.1:80 -r 192.168.8.4:80
[root@lvs ~]# ipvsadm -D -t 202.0.0.1:80
案例:地址转换模式(LVS+NAT)
架构环境,在NAT模式的集群中,LVS负载调度器192.168.8.2作为整个集群的网关,其外网地址202.0.0.1作为整个集群的访问入口也是整个集群的VIP地址。LVS调度器为双网卡。
LVS调度器作为Web服务器池的网关。
使用轮询(rr)调度算法。
1. 环境规划
OS | IP地址 | 主机名 |
---|---|---|
CentOS7.5 | 192.168.8.2 | lvs |
CentOS7.5 | 192.168.8.3 | node-01 |
CentOS7.5 | 192.168.8.4 | node-02 |
CentOS7.5 | 192.168.8.5 | nfs |
2. 基本环境配置
systemctl stop firewalld
setenforce 0
[root@localhost ~]# hostname lvs
[root@localhost ~]# bash
[root@lvs ~]#
[root@localhost ~]# hostname node-01
[root@localhost ~]# bash
[root@node-01 ~]
[root@localhost ~]# hostname node-02
[root@localhost ~]# bash
[root@node-02 ~]#
[root@localhost ~]# hostname nfs
[root@localhost ~]# bash
[root@nfs ~]#
3. 配置NFS网络共享
创建共享资源
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# mkdir -p /var/www/html
[root@nfs ~]# echo "<h1>Welcome to LVS+NAT</h1>" > /var/www/html/index.html
发布共享
[root@nfs ~]# vim /etc/exports
/var/www/html 192.168.8.0/24(rw,sync,no_root_squash)
启动NFS服务
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl enable --now rpcbind nfs
验证共享发布,查看本机发布的NFS共享资源
[root@nfs ~]# showmount -e
Export list for nfs:
/var/www/html 192.168.8.0/24
格式:共享目录位置 客户端地址(权限选项)
客户端:地址可以是主机名、IP地址、网段地址、允许使用*、?通配符。
权限:rw:允许读写 ro:只读 sync:同步写入(自动同步远程服务器数据)
no_root_squash:表示当客户端以root身份访问时赋予本地root权限。默认是(root_squash,将作为nfsnobody用户降权对待)
4. 配置节点服务器
所有节点服务器8.3-8.4安装httpd服务并挂载NFS共享资源
[root@node-01 ~]# yum -y install httpd nfs-utils
[root@node-01 ~]# mount 192.168.8.5:/var/www/html/ /var/www/html/
[root@node-01 ~]# cat /var/www/html/index.html
<h1>Welcome to LVS+NAT</h1>
[root@node-01 ~]# systemctl start httpd
[root@node-02 ~]# yum -y install httpd nfs-utils
[root@node-02 ~]# mount 192.168.8.5:/var/www/html/ /var/www/html/
[root@node-02 ~]# cat /var/www/html/index.html
<h1>Welcome to LVS+NAT</h1>
[root@node-02 ~]# systemctl start httpd
配置节点服务器网关指向负载均衡调度器,8.2主机
```powershell
[root@node-01 ~]# sed -i 's/GATEWAY="192.168.8.1"/GATEWAY="192.168.8.2"/' /etc/sysconfig/network-scripts/ifcfg-ens33
[root@node-01 ~]# systemctl restart network
[root@node-01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.2 0.0.0.0 UG 100 0 0 ens33
192.168.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
[root@node-02 ~]# sed -i 's/GATEWAY="192.168.8.1"/GATEWAY="192.168.8.2"/' /etc/sysconfig/network-scripts/ifcfg-ens33
[root@node-02 html]# systemctl restart network
[root@node-02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.8.2 0.0.0.0 UG 100 0 0 ens33
192.168.8.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
5. 配置负载均衡服务器
配置双网卡
ens33(NAT):192.168.8.2
ens36(vmnet2):202.0.0.1
[root@lvs ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.2 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 fe80::5ed0:2434:21c1:dad6 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a3:3e:f3 txqueuelen 1000 (Ethernet)
RX packets 873 bytes 76195 (74.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 710 bytes 81016 (79.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 202.0.0.1 netmask 255.255.255.0 broadcast 202.0.0.255
inet6 fe80::20c:29ff:fea3:3efd prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a3:3e:fd txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 37 bytes 4962 (4.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
安装ipvsadm
[root@lvs ~]# yum -y install ipvsadm
开启路由转发规则
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
配置负载均衡策略
[root@lvs ~]# ipvsadm -A -t 202.0.0.1:80 -s rr
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.3:80 -m -w 1
[root@lvs ~]# ipvsadm -a -t 202.0.0.1:80 -r 192.168.8.4:80 -m -w 1
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 202.0.0.1:80 rr
-> 192.168.8.3:80 Masq 1 0 0
-> 192.168.8.4:80 Masq 1 0 0
测试LVS集群
[root@lvs ~]# curl --head http://202.0.0.1
HTTP/1.1 200 OK
Date: Tue, 22 Jun 2021 03:28:36 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Tue, 22 Jun 2021 02:23:56 GMT
ETag: "1c-5c5517b5c1026"
Accept-Ranges: bytes
Content-Length: 28
Content-Type: text/html; charset=UTF-8
6.查看节点服务器日志
这里202.0.0.2是我本地的windows机器
[root@node-01 ~]# tail -3 /etc/httpd/logs/access_log
202.0.0.2 - - [22/Jun/2021:11:28:21 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
202.0.0.2 - - [22/Jun/2021:11:28:55 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
202.0.0.2 - - [22/Jun/2021:11:29:56 +0800] "-" 408 - "-" "-"
[root@node-02 ~]# tail -3 /etc/httpd/logs/access_log
202.0.0.2 - - [21/Jun/2021:23:28:47 -0400] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
202.0.0.2 - - [21/Jun/2021:23:28:55 -0400] "GET /favicon.ico HTTP/1.1" 404 209 "http://202.0.0.1/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
202.0.0.2 - - [21/Jun/2021:23:29:05 -0400] "GET / HTTP/1.1" 200 28 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
7.查看负载均衡状态
[root@lvs ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 202.0.0.1:80 rr
-> 192.168.8.3:80 Masq 1 1 2
-> 192.168.8.4:80 Masq 1 2 0
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。