遇到一个 Redis 跨 VPC 读取的问题

29 天前
 0x5c0f
1232 次点击
所在节点    DevOps
20 条回复
zzlyzq
29 天前
如果你的应用比较少,比如只有一台云主机里面部署了应用。那么,可以在这个云主机里面,做一个 lo 本地环回接口,地址 192.168.50.11 ,然后部署一个 rinetd 程序,将 192.168.50.11:6379 端口,转发到 192.168.2.10:6379.
FabricPath
29 天前
跨 Vpc 访问底层数据库这个方案设计得不好。
你如果两个 Vpc 本来就属于同一业务,那直接建 peer ,无 nat 直接访问;如果本来就属于不同业务,那应该暴露 API 而不应该暴露 Redis 。
zzlyzq
29 天前
不过,这个问题是云平台导致的问题。这个是自己的云,还是公有云?
0x5c0f
29 天前
@zzlyzq 公有云平台
0x5c0f
29 天前
@zzlyzq 关于转发是测试过了,主要是主备 Redis 本书数据存储的就是他们的实际节点,这个理论上是没有什么问题的, 因为这是正常的情况, 问题就是我后面说的这种,2 台机器 A 和 B ,B 上面通过 docker 创建 Redis 主备服务,那么 Redis 中存储的主备信息就是 docker 内的网络信息,A 机器是和 B 机器处于统一网段,但是,他不可能直接请求到 B 机器上 docker 内的 ip 。
0x5c0f
29 天前
@FabricPath 平台的架构看起来就是这样的,也没办法改变,我是想如果我自建的时候遇到这种情况,应该如何解决,根据平台反馈,他们的 redis 就是相当于一个虚拟机内的,他们提供给我们的就是一个映射的地址,而 Redis 主备存储的信息是他们虚拟机内的网络信息
julyclyde
29 天前
我觉得是他们这个代理的问题啊
缺乏针对这个协议做的特殊处理
FabricPath
29 天前
@0x5c0f 你自建没有问题,他这个问题是因为 redis 在公共服务区,他给你的是一个 1:1 nat 的访问地址
0x5c0f
29 天前
@FabricPath 是的,如果是按照正常流程,Redis 主备,应该每个节点都位于与应用同一网络下,这种就不会有问题,但是假设我 Redis 主备,是部署到虚拟机或者 k8s 这种大环境下,那么 redis 中存储的主备信息就是虚拟机或者 k8s 内部分配的 ip ,这种情况,如果应用通过 `INFO REPLICATION` 拿到的信息肯定就是不正确的了
guo4224
29 天前
非得把所有节点 ip 都给你,你自己搞就好了
oneegg
29 天前
看起来 redis proxy 都可以解决你的问题
adoal
29 天前
为什么你在业务系统里直连主、备节点的实际地址呢,连负载均衡地址不能完成你的需求吗?
opengps
29 天前
这种用了负载均衡的主备只有容灾效果,防止单个节点死掉,并不具备读写分离效果
0x5c0f
29 天前
@adoal 因为程序这边那个默认组件他使用的是 INFO REPLICATION 去获取的主备信息,只有第一次程序会去通过配置文件中设置的负载地址连接,后面就通过 INFO 拿了,所以上面也说了,研发去重写代码自适应这个了
0x5c0f
29 天前
@opengps 对啊,所以我才想要请教,有没有什么方案,可以解决这个问题,可以解决 `INFO REPLICATION`获取到实际节点信息的问题
opengps
29 天前
@0x5c0f 用了负载均衡你就知连接到单个负载均衡节点行了,不需要再考虑你的程序里自动切换节点了
iloveayu
29 天前
@0x5c0f #4 公有云平台开支持单给他们啊,把你的需求扔过去让支持工程师们给方案,如果公有云的能力没办法支持你的想法,自己搞完等到上线后跑出问题,那锅就都在你了。
sagaxu
28 天前
用了 redis 代理,就不该获取主备信息,因为你只能连接代理,对你来说只有一个结点,背后是什么结构对你是透明的。

如果你是要一个高可用的获得 redis 主备的方式,那你应该用 sentinel ,从 sentinel 获取主备信息,而不该用代理。
ICKelin
28 天前
感觉差一个打通网络的产品,可以用来打通 VPC 网络,甚至可以打通不同的 k8s 集群的网络,这样以后同样的跨网络的业务也都不需要再解决了。
0x5c0f
28 天前
@iloveayu 这个和云平台确认了,他们目前的架构就是这样,没办法改变。 所以目前的解决是让研发自己适配 ,我考虑的就像 @opengps #16 、 @sagaxu #18 和 @ICKelin #19 说的这种,程序不应该考虑自动切换,但问题是`INFO REPLICATION`拿到的就是实际的节点信息, 我希望是否有可能通过调整架构,让程序即使通过`INFO REPLICATION`获取信息时,也可以拿到正确的代理地址。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1082949

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX