Linux云计算 |【第二阶段】CLUSTER-DAY1

主要内容:

集群概念、LVS概述、LVS-NAT集群、LVS-DR集群

一、集群概念

集群(Cluster)是指将多台计算机(节点)通过网络连接在一起,形成一个统一的计算资源池,共同完成一项或多项任务的系统。集群系统通过分布式计算和并行处理技术,提高了计算能力、可用性、可靠性和可扩展性。

1)集群的主要类型

  1. 计算集群(Compute Cluster)

    计算集群主要用于高性能计算(HPC),通过将大量计算任务分配到多个节点上并行处理,以加速复杂计算任务的完成。计算集群通常用于科学计算、工程模拟、数据分析等领域。

  2. 负载均衡集群(Load Balancing Cluster)

    负载均衡集群通过将客户端请求分发到多个节点上,以平衡各个节点的负载,提高系统的整体性能和可用性。负载均衡集群常用于Web服务器、应用服务器等场景。

  3. 高可用性集群(High Availability Cluster)

    高可用性集群通过在多个节点上运行相同的应用或服务,并实时监控节点的健康状态,一旦某个节点发生故障,立即切换到其他正常节点,以确保服务的持续可用性。高可用性集群常用于数据库、文件系统、关键业务应用等场景。

  4. 存储集群(Storage Cluster)

    存储集群通过将多个存储设备(如硬盘、SSD)组合在一起,形成一个统一的存储资源池,提供高性能、高可用性的存储服务。存储集群常用于分布式文件系统、对象存储、数据备份等场景。

2)集群的关键技术

  • 分布式计算:将一个大的计算任务分解成多个小的子任务,分配到多个节点上并行处理。
  • 并行处理:多个节点同时处理不同的任务或同一任务的不同部分,以提高计算效率。
  • 负载均衡:将工作负载均匀分配到各个节点上,避免某些节点过载,提高系统整体性能。
  • 故障切换:实时监控节点的健康状态,一旦发现故障,立即切换到其他正常节点,确保服务的持续可用性。
  • 数据一致性:在多个节点之间保持数据的一致性,确保数据在各个节点上的副本是一致的。

3)集群的优势

  • 提高计算能力:通过并行处理和分布式计算,集群可以显著提高计算能力,处理大规模的计算任务。
  • 提高可用性:通过故障切换和冗余设计,集群可以提高系统的可用性,确保服务的持续运行。
  • 提高可靠性:通过数据备份和冗余设计,集群可以提高数据的可靠性,避免数据丢失。
  • 提高可扩展性:集群可以根据需求灵活扩展节点,以满足不断增长的计算和存储需求。
  • **较低成本:**相对百万美元级别的超级计算机,价格便宜;

4)集群的应用场景

  • 科学计算:如天气预报、基因测序、物理模拟等。
  • 大数据分析:如数据挖掘、机器学习、人工智能等。
  • 云计算:如虚拟化、容器化、分布式存储等。
  • 企业应用:如数据库、文件系统、关键业务应用等。

二、LVS概述

LVS(Linux Virtual Server)是一个用于构建高性能、高可用性网络服务的负载均衡软件项目。它最初由章文嵩博士在1998年创建,该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案并在Linux内核中得到了广泛应用。LVS主要用于将客户端的请求分发到多个服务器上,可以实现高可用的、可伸缩的Web、Mail、Cache和Media等网络服务器;最终目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群。

LVS集群组成:

  • 前段:负载均衡层,由一台或多台负载调度器构成;
  • 中间:服务器群组层,由一组实际运行应用服务的服务器组成;
  • 底端:数据共享存储层,提供共享存储空间的存储区域;

LVS术语:

  • Directory Server:调度服务器(将负载分发到Real Server的服务器)

  • Real Server:真实服务器(真正提供应用服务的服务器)

  • VIP:虚拟IP地址(公布给用户访问的虚拟IP地址)

  • DIP:调度器连接后端节点服务器的IP地址

  • RIP:真实IP地址(集群节点上使用的IP地址)

  • CIP:客户端地址

LVS有三种主要的工作模式:

  1. NAT(Network Address Translation)

    NAT模式(m),通过修改数据包的IP地址和端口号,将客户端的请求分发到后端服务器上。后端服务器处理完请求后,将响应数据包发送回LVS,LVS再将数据包的IP地址和端口号修改回客户端的地址和端口号,最后发送给客户端。缺点:大并发访问时,调度器的性能成为瓶颈;

  2. TUN(Tunneling)

    TUN模式(g),通过在LVS和后端服务器之间建立隧道,将客户端的请求封装在隧道中发送给后端服务器。后端服务器处理完请求后,直接将响应数据包发送给客户端,不需要经过LVS。

  3. DR(Direct Routing)

    DR模式(i),通过修改数据包的MAC地址,将客户端的请求分发到后端服务器上。后端服务器处理完请求后,直接将响应数据包发送给客户端,不需要经过LVS。

负载均衡调度算法(10种):

  • 轮询(Round Robin)
  • 加权轮询(Weighted Round Robin)
  • 最少连接(Least Connections)
  • 加权最少连接(Weighted Least Connections)
  • 源地址散列(Source Hashing)
  • 目标地址散列(Destination Hashing)
  • 基于局部性的最少链接
  • 带复制的基于局部性最少链接
  • 最短的期望的延迟
  • 最少队列调度

LVS的应用场景:

  1. Web服务器集群:通过LVS将客户端的HTTP请求分发到多个Web服务器上,提高网站的性能和可用性。
  2. 应用服务器集群:通过LVS将客户端的应用请求分发到多个应用服务器上,提高应用的性能和可用性。
  3. 数据库服务器集群:通过LVS将客户端的数据库请求分发到多个数据库服务器上,提高数据库的性能和可用性。

1、ipvsadm

ipvsadm 是 Linux 虚拟服务器(LVS)的管理工具,用于配置和管理 IP 虚拟服务器(IPVS)规则。IPVS 是 Linux 内核中的一个模块,负责实现负载均衡功能,而 ipvsadm 则是用户空间的一个命令行工具,用于与 IPVS 模块进行交互,从而创建、修改和删除负载均衡规则。

软件包: ipvsadm(关于ipvsadm的用法可以参考man ipvsadm资料)

|-----------------------------------------------|--------------------------|
| 命令选项 | 含义 |
| ipvsadm -A | (add) 添加虚拟服务器 |
| ipvsadm -E | (edit) 修改虚拟服务器 |
| ipvsadm -D | (delete) 删除虚拟服务器 |
| ipvsadm -C | (clear) 清空所有 |
| ipvsadm -a | (add) 添加真实服务器 |
| ipvsadm -e | (edit) 修改真实服务器 |
| ipvsadm -d | (delete) 删除真实服务器 |
| ipvsadm -L [n] | (list) (number) 查看LVS规则表 |
| -s [ rr | wrr | lc | wlc | sh | dh...] | (scheduler) 指定集群负载调度算法 |
| -t -u | 设置集群地址(VIP,Virtual IP) |
| -r | 指定真实服务器(Real Server)的地址 |
| -m | -g | -i (不加默认为DR模式) | LVS工作模式:NAT、DR、TUN |
| -w (不加默认权重为1) | 为节点服务器设置权重,默认为1 |

语法案例:

|-----------------------------------------------------------------|----------------------------|
| ipvsadm -A -t|u 192.168.4.5:80 -s [算法] | 添加虚拟服务器,协议为TCP(-t)/UDP(-u) |
| ipvsadm -E -t|u 192.168.4.5:80 -s [算法] | 修改虚拟服务器,协议为TCP(-t)/UDP(-u) |
| ipvsadm -D -t|u 192.168.4.5:80 | 删除虚拟服务器 |
| ipvsadm -C | 清空所有 |
| Ipvsadm -a -t|u 192.168.4.5:80 -r 192.168.2.100 [-g|-i|-m] | 在虚拟服务器集群,添加真实服务器 |
| Ipvsadm -e -t|u 192.168.4.5:80 -r 192.168.2.100 [-g|-i|-m] | 在虚拟服务器集群,修改真实服务器 |
| Ipvsadm -d -t|u 192.168.4.5:80 -r 192.168.2.100 | 在虚拟服务器集群,删除真实服务器 |
| ipvsadm -Ln | 查看当前配置 |


案例1:使用命令增、删、改LVS集群规则

1)创建LVS虚拟集群服务器(算法为加权轮询:wrr)

bash 复制代码
[root@proxy ~]# yum -y install ipvsadm     //安装ipvsadm软件工具
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr
[root@proxy ~]# 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.4.5:80 wrr

2)为集群添加若干real server真实服务器

bash 复制代码
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -m -w 2
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.201 -m -w 3
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.202 -m -w 4
[root@proxy ~]# ipvsadm -Ln
...
TCP  192.168.4.5:80 wrr
  -> 192.168.2.100:80             Route   1      0          0         
  -> 192.168.2.200:80             Masq    2      0          0         
  -> 192.168.2.201:80             Masq    3      0          0         
  -> 192.168.2.202:80             Masq    4      0          0   

集群规则为虚拟服务器增加真实服务器时,不加模式默认为DR模式;不设置权重默认为1;

3)修改集群服务器设置,修改调度器算法(将加权轮询wrr 修改为轮询rr)

bash 复制代码
[root@proxy ~]# ipvsadm -E -t 192.168.4.5:80 -s rr
[root@proxy ~]# ipvsadm -Ln
TCP  192.168.4.5:80 rr
...

4)修改read server工作模式(使用-g选项改为DR模式;-i选项改为隧道模式)

bash 复制代码
[root@proxy ~]# ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.202 -g
[root@proxy ~]# ipvsadm -Ln
TCP  192.168.4.5:80 rr
  -> 192.168.2.100:80             Route   1      0          0         
  -> 192.168.2.200:80             Masq    2      0          0         
  -> 192.168.2.201:80             Masq    3      0          0         
  -> 192.168.2.202:80             Route   1      0          0   
[root@proxy ~]# ipvsadm -e -t 192.168.4.5:80 -r 192.168.2.201 -i
[root@proxy ~]# ipvsadm -Ln
TCP  192.168.4.5:80 rr
  -> 192.168.2.100:80             Route   1      0          0         
  -> 192.168.2.200:80             Masq    2      0          0         
  -> 192.168.2.201:80             Tunnel  1      0          0         
  -> 192.168.2.202:80             Route   1      0          0   

5)创建另一个集群(算法为最少连接算法lc;使用-m选项改为NAT模式)

bash 复制代码
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:3306 -s lc
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.100 -m
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:3306 -r 192.168.2.200 -m -w 2
[root@proxy ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
...
TCP  192.168.4.5:80 rr
  -> 192.168.2.100:80             Route   1      0          0         
  -> 192.168.2.200:80             Masq    2      0          0         
  -> 192.168.2.201:80             Tunnel  1      0          0         
  -> 192.168.2.202:80             Route   1      0          0         
TCP  192.168.4.5:3306 lc
  -> 192.168.2.100:3306           Masq    1      0          0         
  -> 192.168.2.200:3306           Masq    2      0          0    

集群规则为虚拟服务器集群增加真实服务器时,不加权重,默认权重为1

6)清空所有规则

bash 复制代码
[root@proxy ~]# ipvsadm -C
[root@proxy ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

7)永久保存所有规则

bash 复制代码
[root@proxy ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

注意:永久规则需要确保ipvsadm服务为开机自启服务(# systemctl enable ipvsadm)


案例2:部署LVS-NAT集群

案例要求:使用LVS实现NAT模式的集群调度服务器,为用户提供Web服务:

  • 1)LVS调度器公网IP地址为192.168.4.5(VIP)(实验private1虚拟网络)
  • 2)LVS调度器内网IP地址为192.168.2.5(DIP)(实验private2虚拟网络)
  • 3)真实Web服务器地址分别为192.168.2.100、192.168.2.200(RIP)
  • 4)将LVS调度服务器的Linux开启软路由功能;
  • 5)使用加权轮询调度算法(wrr),真实服务器权重任意;

注意:web1和web2必须配置网关地址192.168.2.5,跨网段必须配路由;(实验Private2虚拟网络,Yum源为ftp://192.168.2.254

  • CIP:是客户端的IP地址

  • VIP:是对客户端提供服务的IP地址

  • RIP:是后端服务器的真实IP地址

  • DIP:是调度器与后端服务器通信的IP地址

主机配置表:

实验拓扑结构:

工作流程:

**第一步,**用户通过互联网DNS服务器解析到负载均衡设备(LVS调度器)上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。

第二步, 用户将请求发送至192.168.4.5,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.2.100/200),将数据请求包转发给真实服务器,并且在转发之前LVS会基于路由NAT的原理,修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。

第三步, 真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户。

**缺点:**LVS NAT实验请求数据包从LVS调度器进,web的相应数据包也从LVS调度器出,那么LVS调度器就需要承载所有数据的压力,会成为整个集群的瓶颈!!

配置网关说明:

英语词汇:source(src)代表源地址,destination(dest或dst)代表目标地址。

LVS采用的是路由器的NAT通讯原理,流程如下:

  • ① 客户端发送请求数据包(src:4.10,dst:4.5)给LVS调度器;
  • ② LVS调度器做NAT地址转换(外网转内网,内网转外网),将数据包修改为(src:4.10,dst:2.100或2.200),期间LVS调度器通过算法把数据包转发给后端真正的web服务器
  • ③ 假设web1收到数据包,准备开始回应客户端数据时(src:2.100,dst:4.10)
  • 备注:调度器访问web1服务器,在web1回复数据时需返回给调度器,由于web1是2.100,调度器是4.10,跨网段默认无法通讯,所以Web1和web2都需要设置默认网关(192.168.2.5)
  • ④ web1回复数据给4.10但跨网段无法与其通讯,所以数据包被交给默认网关;
  • ⑤ LVS调度器(软路由)收到后端web1发送回来的数据,再次做NAT地址转换,数据包被修改为(src:4.5,dst:4.10),LVS调度器把数据包转发给客户端主机;
  • ⑥ 客户端接收网页数据内容

注意:客户端访问的是4.5(VIP),最后是4.5给客户端回复的网页数据,若其他IP,即使同网段也会丢弃;


步骤1:配置基础环境

1)设置Web服务器(web1、web2主机操作)

bash 复制代码
[root@web1 ~]# firewall-cmd --set-default-zone=trusted  //设置防火墙
[root@web1 ~]# setenforce 0     //设置SELinux
[root@web1 ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config

[root@web2 ~]# firewall-cmd --set-default-zone=trusted
[root@web2 ~]# setenforce 0
[root@web2 ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config

[root@web1 ~]# yum -y install httpd    //安装软件
[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html
[root@web1 ~]# systemctl restart httpd   //启动服务

[root@web2 ~]# yum -y install httpd    //安装软件
[root@web2 ~]# echo "192.168.2.200" > /var/www/html/index.html
[root@web2 ~]# systemctl restart httpd   //启动服务

验证:使用proxy主机测试访问web1和web2

bash 复制代码
[root@proxy ~]# curl http://192.168.2.100
192.168.2.100
[root@proxy ~]# curl http://192.168.2.200
192.168.2.200

2)配置网关(web1、web2主机操作)

将web1和web2的网关设置为192.168.2.5(若在虚拟机已配网关,可忽略)

bash 复制代码
[root@web1 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.gateway 192.168.2.5
[root@web1 ~]# nmcli connection up eth1
[root@web1 ~]# ip route show    //查看默认网关,default后面的IP就是默认网关
default via 192.168.2.5 dev eth1 proto static metric 101

[root@web2 ~]# nmcli connection modify eth1 ipv4.method manual ipv4.gateway 192.168.2.5
[root@web2 ~]# nmcli connection up eth1
[root@web2 ~]# ip route show    //查看默认网关,default后面的IP就是默认网关
default via 192.168.2.5 dev eth1 proto static metric 101

步骤2:部署LVS-NAT模式调度器(proxy操作)

1)设置防火墙,SELinux

bash 复制代码
[root@proxy ~]# firewall-cmd --set-default-zone=trusted
[root@proxy ~]# setenforce  0
[root@proxy ~]# sed -i  '/SELINUX/s/enforcing/permissive/'  /etc/selinux/config

2)确认调度器的路由转发功能(如果已开启,可忽略)

bash 复制代码
[root@proxy ~]# cat /proc/sys/net/ipv4/ip_forward  
0
[root@proxy ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  //开启临时路由转发,立即生效
[root@proxy ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@proxy ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf  //修改内核配置文件,设置永久规则,重启生效
...
net.ipv4.ip_forward = 1

3)创建集群服务器

bash 复制代码
[root@proxy ~]# yum -y install ipvsadm    //安装ipvsadm软件包
[root@proxy ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s wrr  //添加虚拟集群服务器

-A(add)是创建添加虚拟服务器集群;

-t(tcp)后面指定集群VIP虚拟服务器的地址和端口,协议是tcp协议(-u为udp);

-s 后面指定调度算法;

4)添加真实服务器

bash 复制代码
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m
[root@proxy ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 1 -m

-a(add)往虚拟服务器集群中添加后端真实服务器IP,指定往-t 192.168.4.5:80这个集群中添加;

-r(real)后面跟后端真实服务器的IP和端口,这里不写端口,默认是80端口;

-w(weight)指定服务器的权重,权重越大被访问的次数越多,默认权重为1;

-m 指定集群工作模式为NAT模式,-g代表DR模式,-i代表TUN模式

5)查看规则列表

bash 复制代码
[root@proxy ~]# 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.4.5:80 wrr
  -> 192.168.2.100:80             Masq    1      0          0         
  -> 192.168.2.200:80             Masq    1      0          0      

[root@proxy ~]# ipvsadm -L
...
TCP  proxy:http wrr
  -> 192.168.2.100:http           Masq    1      0          0         
  -> 192.168.2.200:http           Masq    1      0          0     

L是list查看,n是number数字格式显示

**验证:**客户端client使用curl命令反复测试访问http://192.168.4.5,查看访问的页面是否会轮询到不同的后端真实服务器;

bash 复制代码
[root@client ~]# curl http://192.168.4.5
192.168.2.200
[root@client ~]# curl http://192.168.4.5
192.168.2.100

添加规则时若写错,可通过# ipvsadm -C 清空规则列表,再重新添加;


常见报错1:连接超时

bash 复制代码
[root@client ~]# curl http://192.168.4.5
curl: (7) Failed connect to 192.168.4.5:80; 连接超时

问题分析:

  • ① web服务器未配置网关(192.168.2.5)
  • ② 未开启调度器的路由转发功能(ip_forward)

常见报错2:拒绝连接

bash 复制代码
[root@client ~]# curl http://192.168.4.5
curl: (7) Failed connect to 192.168.4.5:80; 拒绝连接

问题分析:

  • ① 防火墙未设置trusted;
  • ② Web服务器的httpd服务未开启;
  • ③ 未配置虚拟服务器;
  • ④ 未配置虚拟服务器集群的规则(后端真实服务器);

**常见报错3:**Memory allocation problem,命令输入错误(例如lcss不存在的算法)

bash 复制代码
[root@proxy ~]# ipvsadm -A -t 192.168.4.5:80 -s lcss
Memory allocation problem

案例3:部署LVS-DR集群

案例要求:使用LVS实现DR模式的集群调度服务器,为用户提供Web服务:

  • 1)客户端IP地址为192.168.4.10(CIP)
  • 2)LVS调度器VIP地址为192.168.4.15(VIP)
  • 3)LVS调度器DIP地址为192.168.4.5(DIP)
  • 4)真实Web服务器地址分别为192.168.4.100、192.168.4.200(RIP)
  • 5)使用加权轮询调度算法,权重可以任意

说明:

  • CIP:是客户端的IP地址

  • VIP:是对客户端提供服务的IP地址,VIP必须配置在虚拟接口(目的是防止地址冲突)

  • RIP:是后端服务器的真实IP地址

  • DIP:是调度器与后端服务器通信的IP地址

补充:调度器需要两个IP,其中一个对外(Client),一个对内(web)

主机配置表:

实验拓扑结构:

工作原理:

  • DR模式也叫直接路由模式,该模式中LVS调度器依然承担数据的入站请求及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。

  • DR模式要求调度器与后端服务器必须在同一个局域网内,VIP地址(192.168.4.15)需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。

  • 由于多台计算机都设置了同样一个VIP地址,会遇到地址冲突问题,所以在DR模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接收目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。


步骤1:配置网络环境

注意:为了防止地址冲突,必须要将VIP地址配置在网卡的虚拟接口上;

1)设置Proxy服务器的VIP(192.168.4.15)和DIP(192.168.4.5已配置)

bash 复制代码
[root@proxy ~]# cd /etc/sysconfig/network-scripts/    //网卡配置目录
[root@proxy network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@proxy network-scripts]# vim ifcfg-eth0:0    //修改eth0:0虚拟接口配置文件
TYPE=Ethernet     //配置网卡类型(Ethernet以太网卡)
BOOTPROTO=none    //none手动配置IP(dhcp自动配置IP)
NAME=eth0:0   //网卡名称
DEVICE=eth0:0   //设备名称
ONBOOT=yes    //开机时是否自动激活该网卡
IPADDR=192.168.4.15   //网卡IP地址(VIP)
PREFIX=24     //子网掩码

常见问题:RHEL7和Centos7系统中有两个管理网络的服务,有可能冲突

解决方法:关闭NetworkManager服务,重启network服务

bash 复制代码
[root@proxy network-scripts]# systemctl stop NetworkManager
[root@proxy network-scripts]# systemctl restart network
[root@proxy network-scripts]# ip address show 

2)设置Web1服务器的RIP(192.168.4.100)

bash 复制代码
[root@web1 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
[root@web1 ~]# nmcli connection up eth0

DR模式要求调度器与后端服务器必须在同一个局域网内

3)设置web1服务器的VIP(192.168.4.15)

  • 注意:VIP地址的子网掩码必须是32(即全255),网络地址和广播地址与IP地址一样;
  • 注意:Lo为虚拟网卡(回环地址127.0.0.1)
bash 复制代码
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0   //修改lo:0虚拟接口配置文件
DEVICE=lo:0    //设备名称
IPADDR=192.168.4.15    //网卡IP地址(VIP)
NETMASK=255.255.255.255     //子网掩码(主机型IP,无网络位)
NETWORK=192.168.4.15      //网络地址
BROADCAST=192.168.4.15    //广播地址
ONBOOT=yes     //是否激活网卡
NAME=lo:0     //网卡名称

4)修改内核配置说明文件(忽略ARP广播,不向外宣告)

**防止地址冲突的问题:**由于web1服务器同样配置与调度器一样的VIP地址,默认地址冲突;需要在sysctl.conf内核配置说明文件写入四行(真实服务器忽略ARP广播,不会向外广播自己的MAC及对应的IP地址),当客户端访问VIP(192.168.4.15),ARP进行广播,只有调度器会响应,其他主机不做任何响应,从而防止地址冲突的问题;(ARP地址解析协议)

bash 复制代码
[root@web1 ~]# vim /etc/sysctl.conf    //修改内核配置参数
net.ipv4.conf.all.arp_ignore = 1    //1代表忽略ARP广播,0代表不忽略(所有网卡)
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2   //0代表向外广播,1代表临时广播,2代表不向外宣告
net.ipv4.conf.all.arp_announce = 2

[root@web1 ~]# sysctl -p     //刷新配置
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2

解释说明:ignore忽略、忽视,announce宣告、广播通知

ARP广播询问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应(防止进站冲突)

本机不会向外宣告自己的lo回环地址是192.168.4.15(防止出站冲突)

5)重启网络服务

常见错误:如果重启网络后未正确配置lo:0,有可能是NetworkManager和network服务有冲突,关闭NetworkManager后重启network即可。(非必须的操作)

bash 复制代码
[root@web1 ~]# systemctl stop NetworkManager
[root@web1 ~]# systemctl restart network        //重启网络服务
[root@web1 ~]# ip address show           //看到一个网卡下面有两个IP地址

注意:需要先进行内核参数配置修改后再进行服务重启,否则重启后,VIP就已向外宣告

6)设置Web2服务器的RIP(192.168.4.200)

bash 复制代码
[root@web2 ~]# nmcli connection modify eth0 ipv4.method manual ipv4.address 192.168.4.200/24 connection.autoconnect yes
[root@web2 ~]# nmcli connection up eth0

7)设置web2服务器的VIP(192.168.4.15)

bash 复制代码
[root@web2 ~]# cd /etc/sysconfig/network-scripts/
[root@web2 ~]# cp ifcfg-lo  ifcfg-lo:0
[root@web2 ~]# vim ifcfg-lo:0
DEVICE=lo:0    //设备名称
IPADDR=192.168.4.15    //IP地址
NETMASK=255.255.255.255     //子网掩码(主机型IP,无网络位)
NETWORK=192.168.4.15      //网络地址
BROADCAST=192.168.4.15    //广播地址
ONBOOT=yes     //是否激活网卡

8)修改内核配置说明文件

bash 复制代码
[root@web2 ~]# vim /etc/sysctl.conf    //修改内核参数配置
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
[root@web2 ~]# sysctl -p   //刷新配置

9)重启网络服务

bash 复制代码
[root@web1 ~]# systemctl stop NetworkManager
[root@web1 ~]# systemctl restart network
[root@web2 ~]# ip address show      //会看到一个网卡下面有两个IP地址

步骤2:proxy调度器安装软件并部署LVS-DR模式调度器

1)安装软件

bash 复制代码
[root@proxy ~]# yum -y install ipvsadm
[root@proxy ~]# rpm -q ipvsadm
ipvsadm-1.27-7.el7.x86_64

2)创建新的集群服务器规则

bash 复制代码
[root@proxy ~]# ipvsadm -C     //清理之前实验的规则
[root@proxy ~]# ipvsadm -A -t 192.168.4.15:80 -s wrr   //添加虚拟服务器集群,算法wrr
[root@proxy ~]# 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.4.15:80 wrr

3)添加真实服务器(-g为DR模式,-w设置权重)

bash 复制代码
[root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
[root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1

4)查看规则列表

bash 复制代码
[root@proxy ~]# 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.4.15:80 wrr
  -> 192.168.4.100:80             Route   1      0          0         
  -> 192.168.4.200:80             Route   1      0          0      

验证:使用curl命令测试http://192.168.4.15,查看页面的轮询后端真实服务器效果

bash 复制代码
[root@client ~]# curl http://192.168.4.15
192.168.4.200
[root@client ~]# curl http://192.168.4.15
192.168.4.100

注意:实验不可在proxy主机(LVS调度器)访问网页验证,因调度器本机地址就是192.168.4.15,调度器将数据包转内部真实服务器(src:4.15,dct:4.15),真实服务器又做"地址伪装"(地址欺骗),返回数据给调度器(src:4.15,dct:4.15),结果就是地址冲突;

扩展知识:

LVS 功能设计简单,且默认LVS不带健康检查功能,假设ping测试真实服务器正常。但curl访问网址有问题(httpd服务出现问题),该问题真实服务器未在LVS规则中立刻删除,导致客户端访问时,轮询效果为正常服务和拒绝链接报错;

  1. 方法1:结合Keepalived服务 + LVS实现健康检查;
  2. 方法2:手动编写动态检测脚本

案例:手动编写动态检测脚本(参考脚本)

bash 复制代码
[root@proxy ~]# vim check.sh
#!/bin/bash
VIP=192.168.4.15:80    //定义变量VIP
RIP1=192.168.4.100    //定义web1的RIP
RIP2=192.168.4.200    //定义web2的RIP
while :
do
   for IP in $RIP1 $RIP2
   do
        curl -s http://$IP &>/dev/null    //执行访问网页
        if [ $? -eq 0 ];then    //判断网页执行是否成功状态
            ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP
        else
            ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP
        fi
   done
sleep 1
done

解释说明:

1.if双分支结构判断,当执行结果为0,说明网页访问成功,执行条件1;

A)条件1中,ipvsadm -Ln查看规则并过滤IP,如果规则中有IP,"条件为真",不执行加真实服务器的规则语句;(网页可正常访问,规则存在)

B)条件1中,ipvsadm -Ln查看规则并过滤IP,如果规则中没有IP,"条件为假",执行添加真实服务器的规则语句;(网页可正常访问,规则不存在)

2.if双分支结构判断,当执行结果为非0,执行条件2:

A)条件2中,ipvsadm -Ln查看规则并过滤IP,如果规则中有IP,"条件为真",执行删除真实服务器的规则语句;(网页不能正常访问,规则存在)

B)条件2中,ipvsadm -Ln查看规则并过滤IP,如果规则中有IP,"条件为假",不执行任何规则;(网页不能正常访问,规则不存在)

3.for循环+while循环实现重复监测LVS健康功能检查;

思维导图:

小结:

本篇章节为**【第二阶段】CLUSTER-DAY1**的学习笔记,这篇笔记可以初步了解到 集群及LVS简介、LVS-NAT集群、LVS-DR集群。除此之外推荐参考相关学习网址:


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解

相关推荐
阿赭ochre12 分钟前
Linux环境变量&&进程地址空间
linux·服务器
Iceberg_wWzZ12 分钟前
数据结构(Day14)
linux·c语言·数据结构·算法
秋已杰爱14 分钟前
进程间关系与进程守护
运维·服务器
微尘814 分钟前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
可儿·四系桜27 分钟前
如何在多台Linux虚拟机上安装和配置Zookeeper集群
linux·服务器·zookeeper
Flying_Fish_roe31 分钟前
linux-软件包管理-包管理工具(Debian 系)
linux·运维·debian
BLEACH-heiqiyihu1 小时前
红帽9中nginx-源码编译php
运维·nginx·php
大广-全栈开发1 小时前
centos 7 安装gitlab
linux·git·centos
666786661 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
宇宙第一小趴菜2 小时前
虚拟机安装xubuntu
linux·服务器·vmware