问题描述
在我们当前的体系结构中,我们使用MemoryStore中的Redis作为简单的快速缓存和发布-订阅系统。
对于我们的服务之一,我们需要为复制的服务提供非常快的本地缓存。该服务将托管在GKE(Google Kubernetes Engine)上。我们的想法是每个节点都有一个Redis从节点,它将成为我们服务的任何Pod的端点。
是否可以使用我们的MemoryStore Redis作为此系统的主控?如果是,是否有相应的文档或示例?或者我们的K8S集群上应该有一个Redis主实例?
推荐答案
不确定是否可以使用Memory Store执行此操作。据我所知,它是托管服务,不提供这样的功能。
我通常看到和使用的是使用Sentinel部署Redis HA Kubernetes。
舵机:https://docs.bitnami.com/tutorials/deploy-redis-sentinel-production-cluster/
什么是哨兵?
将其视为管理主和从属连接的SideCar代理。如果您向它发出请求,它会将主备IP返回给您。
默认情况下,Redis的掌舵会使用2个从POD部署主POD,并将哨兵部署为侧车。
在每个节点上部署Redis从属设备可能很容易配置,但将POD直接连接到同一节点上从属设备会很奇怪,因为所有通信都使用Kubernet服务。可以,您可以将从属节点保留在每个节点上,但不确定您的服务将如何连接到这些从属?
您的应用程序将与Kubernetes的单个服务进行会话,该服务将根据前置文档返回当前主机和从属的IP。
哨兵文档:https://redis.io/topics/sentinel
额外说明(群集vs哨兵):
Redis群集是分布式选项,而哨兵则有利于HA,作为新主机的复制将始终随时可供处理。
这里是Python中的一个应用程序示例:
from redis import Sentinel
sentinel = Sentinel([('<**Single K8s service Name**>', 26379)], socket_timeout=0.1)
sentinel.discover_master('mymaster')
('127.0.0.1', 6379)
sentinel.discover_slaves('mymaster')
[('127.0.0.1', 6380)]
参照:https://github.com/redis/redis-py#sentinel-support
这篇关于GCP内存库上的Redis主/从的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!