您的位置:首页 > 科技 > 能源 > Linux云计算 |【第二阶段】CLUSTER-DAY1

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

2024/11/17 16:18:18 来源:https://blog.csdn.net/AnJern/article/details/140839153  浏览:    关键词: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)

[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真实服务器

[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)

[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选项改为隧道模式)

[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模式)

[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)清空所有规则

[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)永久保存所有规则

[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主机操作)

[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

[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(若在虚拟机已配网关,可忽略)

[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

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

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

[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)创建集群服务器

[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)添加真实服务器

[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)查看规则列表

[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,查看访问的页面是否会轮询到不同的后端真实服务器;

[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:连接超时

[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:拒绝连接

[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不存在的算法)

[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已配置)

[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服务

[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)

[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)
[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地址解析协议)

[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即可。(非必须的操作)

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

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

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

[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)

[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)修改内核配置说明文件

[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)重启网络服务

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

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

1)安装软件

[root@proxy ~]# yum -y install ipvsadm
[root@proxy ~]# rpm -q ipvsadm
ipvsadm-1.27-7.el7.x86_64

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

[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设置权重)

[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)查看规则列表

[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,查看页面的轮询后端真实服务器效果

[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:手动编写动态检测脚本

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

[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 :
dofor IP in $RIP1 $RIP2docurl -s http://$IP &>/dev/null    //执行访问网页if [ $? -eq 0 ];then    //判断网页执行是否成功状态ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IPelseipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IPfidone
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集群。除此之外推荐参考相关学习网址:

  • LVS负载均衡(LVS简介、三种工作模式、十种调度算法)-CSDN博客

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com