运维学习————LVS集群和Keepalived+LVS高可用

2024-08-27 09:28

本文主要是介绍运维学习————LVS集群和Keepalived+LVS高可用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

官网:LVS中文官网

一、概念

二、组成及软件工作层次图 

​编辑 三、整体架构

四、名词解释

五、三种工作模式 

1、LVS-NAT

2、LVS-TUN

 3、LVS-DR

六、DR模式的实现

1、克隆出LVS,配置虚拟IP

2、配置Nginx的虚拟IP

Nginx1的配置

Nginx2的配置

3、配置ARP行为 

3.1、什么是 ARP? 

3.2、什么是 arp_ignore?

3.3、什么是 arp_announce? 

4、添加路由 

5、搭建集群

5.1、添加一个虚拟服务,使用轮询调度算法 (rr) 将请求分发到后端服务器

 5.2、添加真实服务器

 七、Keepalived+lvs高可用

LVS-2上操作

master配置

LVS-1上操作

backup配置

测试


官网:LVS中文官网

一、概念

 LVS(Linux Virtual Server) 是 Linux Virtual Server 的简写,意即Linux虚拟服务器,是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一

二、组成及软件工作层次图 

LVS由2部分程序组成,包括ipvs和ipvsadm     adm=admin

 

IPVS:LVS 是一个负载均衡框架,它定义了如何使用负载均衡器来分发网络请求的基本规则和架构。IPVS 是 LVS 中实现负载均衡的核心模块,它负责具体的负载均衡任务。 安装于 Director Server(相当于代理服务器) 上,并在 Director Server  上虚拟出一个 VIP(Virtual IP)。 用户的访问请求通过 VIP 到达负载调度器,然后由负载调度器从 Real Server  列表中选取一个服务节点响应用户的请求。

ipvsadm是一个Linux内核中的IP负载均衡工具,它对应的用户控制程序也是ipvsadm。ipvsadm是IPVS(IP Virtual Server)的管理器,用于配置和管理Linux内核中的IPVS负载均衡器。

 
三、整体架构

 LVS的整体架构主要包括负载均衡器(Load Balancer)、后端服务器(Real Server)和客户端三部分。客户端的请求首先到达负载均衡器,然后由负载均衡器根据一定的调度算法将请求转发到后端服务器进行处理,处理结果再返回给客户端

 

四、名词解释

VIP:虚拟IP地址(Virtual  Ip Address)

RIP:真实IP地址(Real Server Ip Address)

DIP:Director的IP地址(Director Ip Address)用于连接内外网络的IP地址,物理网卡上的P地址。是负载均衡器上的IP。

CIP:客户端主机P地址(Client Ip Address)

五、三种工作模式 

官网:三种工作模式

1、LVS-NAT

 LVS-NAT(Network Address Translation):在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群

详解:

客户端发起请求

1)客户端 发送一个请求到虚拟服务 IP (VIP) 地址,例如 192.168.1.10。

2)负载均衡器 收到这个请求后,将数据包的目标 IP 地址从 192.168.1.10 修改为其中一个真实服务器的 IP 地址,比如 192.168.1.21。同时,负载均衡器还会记录这次修改,以便后续处理响应时能够正确地将数据包发回给客户端。

3)真实服务器 收到请求后处理数据并生成响应。

服务器响应

1)真实服务器 将响应发回给负载均衡器,此时响应数据包的源 IP 地址是 192.168.1.21。

2)负载均衡器 收到响应后,将数据包的源 IP 地址从 192.168.1.21 修改为虚拟服务 IP 地址 192.168.1.10。

3)负载均衡器 最后将修改后的响应转发给原始的客户端。

总结

请求阶段:客户端 -> 负载均衡器 -> 真实服务器

请求时负载均衡器修改目标 IP 地址。

响应阶段:真实服务器 -> 负载均衡器 -> 客户端

响应时负载均衡器修改源 IP 地址

lvs可以处于公网     Real Server  可以是内网

2、LVS-TUN

LVS-TUN(IP Tunneling):又叫隧道模式。该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群

请求过程和NAT一样,响应过程不再走LVS,直接给客户端。LVS的压力就降低。上行大,下行小,大大提高并发和吞吐量。但Real Server的IP需要暴露给公网,有安全隐患

 3、LVS-DR

 LVS-DR(Direct Routing):在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。

和TUN相比,Real Server不会直接返回结果给客户端,而是通过Router中转后给客户端,这样Real Server的真实IP就不会暴露给公网  即支持高并发和解决了安全隐患问题。

下面就演示最好的DR模式  

六、DR模式的实现

实现LVS对nginx的负载均衡,因为当时当时nginx对tomcat实现了负载均衡,为了体现LVS的负载均衡,就和nginx使用,这样,就是可以实现对tomcat1-6的轮询,如果直接演示对tomcat的负载均衡的话,可能效果看不出来,因为当时为了方便1-3部署在了tomcat1,4-6部署在了tomcat2,并且端口不一样,所以显示不出来效果

1、克隆出LVS,配置虚拟IP

关闭网络管理服务

systemctl stop NetworkManager
systemctl disable NetworkManager

配置虚拟IP(虚拟ip为:192.168.37.189)

cp  /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-ens33:1vim /etc/sysconfig/network-scripts/ifcfg-ens33:1
#保留5行:
BOOTPROTO="static"
DEVICE="ens33:1"
ONBOOT="yes"
IPADDR=192.168.37.189
NETMASK=255.255.255.0#重启网络服务
service network restart
ip  a

让多出来的IP作为VIP

2、配置Nginx的虚拟IP

Nginx1的配置

cp /etc/sysconfig/network-scripts/ifcfg-lo  /etc/sysconfig/network-scripts/ifcfg-lo:1
vim /etc/sysconfig/network-scripts/ifcfg-lo:1

#刷新lo网卡
ifup lo#查看
ip a

Nginx2的配置

和上面一样

3、配置ARP行为 

在Nginx1和Nginx2上同时进行

vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2#让配置生效sysctl -p

3.1、什么是 ARP? 

ARP (Address Resolution Protocol) 是一种网络协议,用于将 IP 地址解析为物理地址(MAC 地址)。当你尝试与另一台设备通信时,如果只知道它的 IP 地址而不知道它的 MAC 地址,ARP 协议就会帮助你找到这个 MAC 地址

3.2、什么是 arp_ignore?

arp_ignore 是 Linux 内核中的一个配置参数,用于控制系统如何处理接收到的 ARP 请求。简单来说,它可以帮助系统决定是否应该忽略某些 ARP 请求,以提高安全性

arp_ignore 的类型:

        arp_ignore = 0:

        这是默认设置,意味着系统会正常处理所有接收到的 ARP 请求。

        arp_ignore = 1:

        当系统收到一个 ARP 请求时,如果这个请求的目标 IP 地址是本机的一个 IP 地址,但这个请求不是通过与该 IP 地址关联的接口接收到的,那么这个请求将被忽略。

 

通俗说:请求的目标地址到达对应的网络接口,才会响应请求

例如,如果你的电脑有两个网络接口 eth0 和 eth1,eth0 上有一个 IP 地址 192.168.1.10。如果一个 ARP 请求的目标 IP 地址是 192.168.1.10 但这个请求是通过 eth1 接收的,那么这个请求将会被忽略。

其他两个忽略

3.3、什么是 arp_announce? 

arp_announce 是 Linux 内核中的一个配置参数,用于控制系统的 ARP 行为,特别是系统何时发送 ARP 应答。简而言之,它告诉系统在什么情况下应该发送 ARP 应答,以提高网络的安全性和稳定性。

arp_announce 的类型

arp_announce = 0:

这是默认设置,意味着系统会正常发送 ARP 应答。

arp_announce = 1:

当系统收到一个 ARP 请求时,如果这个请求的目标 IP 地址是本机的一个 IP 地址,只有当这个请求是通过与该 IP 地址关联的接口接收到的,才会发送 ARP 应答。

通俗说:避免本网卡与不匹配的目标进行通告

例如,如果你的电脑有两个网络接口 eth0 和 eth1,eth0 上有一个 IP 地址 192.168.1.10。如果一个 ARP 请求的目标 IP 地址是 192.168.1.10 且这个请求是通过 eth0 接收的,那么系统会发送 ARP 应答。但如果这个请求是通过 eth1 接收的,则不会发送 ARP 应答。

arp_announce = 2:

在 arp_announce = 1 的基础上进一步增强了安全性。

除了要求 ARP 请求必须通过正确的接口接收到以外,还要求请求中的源 MAC 地址必须与接收该请求的接口的 MAC 地址相匹配,才会发送 ARP 应答。

通俗说:只在本网卡通告

继续上面的例子,如果一个 ARP 请求的目标 IP 地址是 192.168.1.10 并且是通过 eth0 接收的,但是如果这个请求中的源 MAC 地址与 eth0 的 MAC 地址不匹配,那么系统也不会发送 ARP 应答

4、添加路由 

route 命令用于查看和管理系统的路由表。route 命令非常强大,可以让你查看当前的路由表、添加新路由、删除现有路由等

现代 Linux 系统通常使用 ip 命令来管理路由

使用旧版route的话,需要先通过yun安装一个

yum install net-tools

 Nginx1和Nginx2上都操作

查看路由表

route -n

 

结果详解:

Destination: 目标网络地址。这是路由的目的地。如果是:0.0.0.0: 这个 IP 地址通常表示“任何”或“所有”目的地。

Gateway: 网关地址。这是到达目的地的下一跳地址。如果目的地是在同一子网内,则网关为 0.0.0.0。

Genmask: 子网掩码。用于确定目标网络的范围。

Flags: 标志位。这些标志描述了路由的特性:

U: 可用(Up)

G: 网关(Gateway),表示需要通过网关到达目的地

H: 主机(Host),表示目的地是一个特定的主机

R: 重定向(Redirect),表示该路由是从另一个路由器重定向过来的

D: 动态(Dynamic),表示该路由是动态路由协议发现的

M: 修改(Modified),表示该路由已被修改

!: 不可达(Unreachable),表示该路由不可达

>: 默认路由(Default),表示该路由是默认路由

!G: 禁用网关(No Gateway),表示该路由不使用网关

!C: 禁用缓存(No Cache),表示该路由不使用高速缓存

!A: 禁用广告(No Advertise),表示该路由不会被通告给其他路由器

Metric: 路由度量值。用于决定哪条路由被优先使用。数值越小,优先级越高。

Ref: 引用计数。表示有多少进程引用该路由。

Use: 使用次数。表示该路由被使用的次数。

Iface: 接口名称。表示该路由对应的网络接口

添加路由 

这条命令会添加一条路由规则,该规则指定所有发往 IP 地址 192.168.170.15 的数据包都应该通过本地环回接口 lo 的第二个别名 (lo:1) 发送

route add  -host   192.168.37.189  dev  lo:1

防止重启失效:

echo "route add  -host   192.168.37.189  dev  lo:1">>/etc/rc.local

查看/etc/rc.d/rc.local的权限,如果不是可执行文件,就无法启动执行。

#查看权限
ll /etc/rc.d/rc.local#增加可执行权限chmod +x /etc/rc.d/rc.local

rc.local 是 Linux 系统中一个传统的脚本文件,用于在系统启动完成时执行一些自定义任务。

删除操作:

route del  -host   192.168.37.189  dev  lo:1

5、搭建集群

在LVS-1上操作

#安装adm:
yum -y install ipvsadm#查看帮助文档
ipvsadm -h#查看集群信息
ipvsadm -Ln

-L 选项表示列出(List)当前配置的服务组和服务状态,

-n 选项则表示输出 IP 地址而不是主机名或域名

当前是空,需要搭建集群

5.1、添加一个虚拟服务,使用轮询调度算法 (rr) 将请求分发到后端服务器

ipvsadm -A -t 192.168.37.189:8088 -s rr

-A 添加服务器

-t   tcp服务器

-s  调度算法(负载均衡算法)

Round Robin (rr):

简称 RR,是最简单的调度算法之一,按顺序将请求分发到后端服务器。

Weighted Round Robin (wrr):

简称 WRR,是 RR 的加权版本,根据后端服务器的权重来分配请求。

Least Connections (lc):

简称 LC,将请求分发给当前连接数最少的后端服务器。

Weighted Least Connections (wlc):

简称 WLC,是 LC 的加权版本,根据后端服务器的权重和当前连接数来分配请求。

Destination Hash (dh):

简称 DH,根据客户端 IP 地址的哈希值来分发请求,以实现会话粘性。

Source Hash (sh):

简称 SH,根据源 IP 地址的哈希值来分发请求,以实现会话粘性。

Weighted Destination Hash (wdh):

简称 WDH,是 DH 的加权版本,根据客户端 IP 地址的哈希值和后端服务器的权重来分发请求。

Weighted Source Hash (wsh):

简称 WSH,是 SH 的加权版本,根据源 IP 地址的哈希值和后端服务器的权重来分发请求。

也可以删除:

ipvsadm -D -t 192.168.37.189:8081

 5.2、添加真实服务器

ipvsadm -a -t 192.168.37.189:8088 -r 192.168.37.183:8088 -gipvsadm -a -t 192.168.37.189:8088 -r 192.168.37.184:8088 -g

查看集群信息:

ipvsadm -Ln
查看发现,如果是处于同一个服务器上的,三个tomcat实例,比如8081,8082,8083,但是虚拟ip设置端口之后和真实服务ip进行映射,会覆盖掉8082,8083服务,,,,,所以负载均衡的时候,应保证服务在不同的服务器上

ipvsadm -Ln --stats

多次请求多次查看,会看到不同

会看到只有上行,没有下行,下行不过LVS服务器。也就是LVS-DR模式

通过虚拟ip访问:即可一致刷新页面,就会发现可以轮询访问tomcat

其它的细节就不演示,可以上网查查,比如超时时间什么的

 七、Keepalived+lvs高可用

利用LVS-1克隆一个LVS-2,这个时候虚拟IP:189.168.37.189只有LVS-2有效,你的可能是LVS-1上有虚拟IP,因为同一个网段下,IP不能重复

LVS-1:

LVS-2:

LVS-2上操作

安装keepalived

yum -y install   keepalived

现在虚拟IP在LVS-2上,所以咱用LVS-2做master

master配置

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_YSY
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.37.189}
}#配置集群IP和端口  和nginx保持一致
virtual_server 192.168.37.189 8088 {#健康检查的时间  单位秒delay_loop 6#负载均衡算法rr是轮询lb_algo rr#LVS的模式lb_kind DR#会话持久化时间persistence_timeout 50#请求协议方式protocol TCP#真实服务器配置  和nginx对应real_server 192.168.37.183 8088 {#权重weight 1#健康检查#检查端口connect_port 8088#超时时长5秒connect_timeout 5#重试次数nb_get_retry 2#间隔时间delay_before_retry 3}#真实服务器配置  和nginx对应real_server 192.168.37.184 8088 {#权重weight 1#健康检查#检查端口connect_port 8088#超时时长5秒connect_timeout 5#重试次数nb_get_retry 2#间隔时间delay_before_retry 3}
}

LVS-1上操作

也同样安装一个keepalived

backup配置

! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_SY
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.37.189}
}virtual_server 192.168.37.189 8088 {#健康检查的时间 单位 秒delay_loop 6#负载均衡算法rr是轮询lb_algo rr#LVS的模式lb_kind DR#会话持久化时间persistence_timeout 5#请求协议方式protocol TCP#真实服务器配置  和nginx对应real_server 192.168.37.183 8088 {#权重weight 1#健康检查#检查端口connect_port 8088#超时时长5秒connect_timeout 5#重试次数nb_get_retry 2#间隔时间delay_before_retry 3}#真实服务器配置  和nginx对应real_server 192.168.37.184 8088 {#权重weight 1#健康检查#检查端口connect_port 8088#超时时长5秒connect_timeout 5#重试次数nb_get_retry 2#间隔时间delay_before_retry 3}}

测试

一直刷新页面,会发现页面内容轮询,就没有问题

杀死LVS-1上的keepalived 看是否切换!测试和前面相同!

arp  -a  192.168.170.15

查看mac地址,看真正在哪台机子上

这篇关于运维学习————LVS集群和Keepalived+LVS高可用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111279

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3