运维学习————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地址,看真正在哪台机子上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/410732.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react中配置Sentry

sentry 打开sentrySentry Docs | Application Performance Monitoring & Error Tracking Software官网, 注册。根据提示创建应用后 在 React 应用中配置 Sentry 可以按照以下步骤进行: 安装 Sentry SDK: 在项目根目录下运行: npm in…

Android settings命令讲解和实战

1,简介 在Android系统中,settings命令用于管理设备设置。这些命令可以与Settings提供者(Settings provider)交互,后者是一个用于存储和检索系统设置的系统服务。Settings provider在Android系统中可以被看作是一个特殊…

(一) 初入MySQL 【认识和部署】

前置资源 一、数据库概述 1.1、数据库基本概念 数据(Data) 描述事物的符号记录称为数据。数字、文字、图形、图像、声音、档案记录等都是数据。数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。 相同格式和类型的数据统一存放在一起&#xff0…

IP-RDS-222、IP-PRZ-59-AM12、EG-TRZ-42-L、EG-TRZ-42-H比例减压阀放大器

IP-DAR-250、IP-DAR-43C-L、IP-DAR-43C-H、IP-RDS-222、IP-PRZ-59-AM12、EG-TRZ-42-L、EG-TRZ-42-H比例减压阀 EE-PRB、EE-PRD比例压力阀 EE-P2G、ET-P2S、EB-P2A、EE-P2A、ET-P2A、EE-P2H、EG-F2A、EU-F2A比例流量阀 EF-F3G、EU-F3G比例压力补偿流量阀 EQ-S4M、EG-S4M、EQ…

Java 入门指南:Java IO流 —— 转换流、扫描流、打印流

转换流 转换流可以将一个 字节流 包装成 字符流,或者将一个字符流包装成字节流。这种转换通常用于处理文本数据,如读取文本文件或将数据从网络传输到应用程序。 转换流主要有两种类型:InputStreamReader 和 OutputStreamWriter。 InputStr…

文档翻译软件哪个好用?这里有5个顶尖选择

在我的书架上摆满琳琅满目的书籍,这些数据不断的在拓宽我的眼界,但其实我还有秘密武器——5款文献翻译app。 每当我遇到那些充满智慧却难以理解的外文文献时,这些工具总能伸出援手,让复杂的专业术语变得亲切,让晦涩的…

Kafka事件(消息、数据、日志)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

无线通信频率分配

首先看看无线电信号的频谱如何划分: 一、5G NR 3GPP已指定5G NR 支持的频段列表,5G NR频谱范围可达100GHz,指定了两大频率范围: ① Frequency range 1 (FR1):就是我们通常讲的6GHz以下频段 频率…

Java算法—排序篇之快速排序(Quick sort)

快速排序(Quick sort) 核心思路: 从数列中挑出一个元素,一般都是左边第一个数字,称为 “基准数”;创建两个指针,一个从前往后走,一个从后往前走。先执行后面的指针,找出第一个比基…

灵魂 20 问帮你彻底搞定Transformer

1.Transformer为何使用多头注意力机制?(为什么不使用一个头) 捕捉多种依赖关系: 多头注意力机制允许模型同时关注输入数据的不同部分和特征。每个“头”都能够学习输入序列的不同表示子空间,从而捕捉到不同类型的依赖关…

霸王茶姬小程序(8月优化版)任务脚本——带教程

文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/BTQ1HK 若失效,可用地址 https://www.aliyun.com/daily-act/ecs/ecs_trial_benefits?source5176.29345612&userCode49hts92d 2.部署…

Java基础(4)- IDEA

目录 一、Module 1.创建module 2.关闭modue 3.导入module 4.src灰色 二、Package 1.创建package 2.删除package 3.package取名规范 三、类 1.创建类 2.快捷语法 3.HelloWorld 四、IDEA基本设置说明 1.字体 2.提示的快捷键 五、常用快捷键 一、Module 1.创建mod…

SpringData-ElasticSearch入门

文章目录 1、创建demo工程2、application.properties3、Goods 实体类4、EsDemoApplicationTests 测试类5、pom.xml6、查看索引库7、查看单个索引(数据库)8、从goods索引中检索出符合特定搜索条件的文档(或记录) 1、创建demo工程 2…

ctfhub-web-SSRF通关攻略

一、内网访问 1.打开ctfhub给的环境地址 2.观察题目 发现让我们访问127.0.0.1下的flag.php 在地址栏后面有一个url参数 ?urlhttp://127.0.0.1/flag.php 提交即可 二、伪协议读取文件 1.打开ctfhub给的环境 2.观察题目 发现让我们读取flag.php文件 读取文件用到的协议是…

mathtype 公式编号 添加章节号 章节编号错乱 解决方法

1 怎么添加编号 左编号方法和右编号一样。 打开word软件,选择mathtype工具,点击右编号以后会打开mathtype软件界面,在mathtype软件界面中对于公式进行编写,编写完成后退出并且保存,就可以完成编号添加。 如果是对已有的公式进行编写的话,则通过ctrl+A进行全文选择,选择…

基于SpringBoot+Vue实现的高校心里辅导(咨询)管理系统设计与实现

本高校心理教育辅导系统的开发基于springboot框架,采用Java技术,同时使用MYSQL数据库对系统数据进行储存,充分保证系统数据的安全性和稳定性。系统根据高校心理教育辅导的需求开发功能模块,实现对信息数据的添加、删除、修改、查询…

前端项目部署到服务器上(nginx)

我这个之前已经部署过项目,所以要进行这个操作 docker imagedocker rm -f nginx //用于强制删除名为“nginx”的容器docker ps //用于列出当前正在运行的Docker容器docker volume -fdocker volume prune //用于删除所有未使用的Docker数据卷,‌释放存…

OpenCV绘图函数(2)绘制圆形函数circle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 绘制一个圆。 cv::circle 函数用于绘制一个给定中心和半径的简单圆或填充圆。 函数原型 void cv::circle (InputOutputArray img,Point cen…

驱动:mknod-misc 杂项自动

一、杂项设备驱动 #include <linux/init.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/module.h> #include <linux/device.h> #include <asm/io.h> #include <asm/string.h> #include <asm/uaccess.h>…

简易指南:迅速构建个性化RAG(Retrieval-Augmented Generation)应用

前面的章节&#xff0c;我们已经完成了可用的基于知识库回答的ai助手&#xff0c;尽管RAG容易上手&#xff0c;但是要真正掌握其精髓却颇有难度&#xff0c;实际上&#xff0c;建立一个的有效的RAG系统不仅仅是将文档放入向量数据库并叠加一个llm模型那么简单&#xff0c;这种方…