我使用舵图在GKE中设置redis。
它创建了3个服务redis-master,redis-slave和redis-headless。当我通过“ redis-headless”连接到它时,出现错误(大约66%的时间):
READONLY You can't write against a read only replica.
我认为这是因为它正在路由到两个从属实例。如果我使用母版,那么它似乎可以工作。
我认为我应该只使用redis-master进行连接?它会使用奴隶吗?如果主机发生故障,它会更新吗?我应该路由到从属服务器(用于读取查询)吗?
我想对它的工作方式(假设是这样)感到更好。
谢谢
答案 0 :(得分:0)
假设您正在参考stable/redis
图表。
您可以通过运行kubectl describe service <service_name>
获得更多详细信息。检查Selector
和Endpoints
字段。 redis-headless
服务选择所有Redis容器,而redis-master
仅选择标记为role:master
的Redis主容器。
默认情况下,写操作只能由主服务器处理,但是您可以从副本中读取数据。 Redis副本主要用于:
提高吞吐量。如果主服务器已经忙于写操作,则可以将读取命令发送到副本。请注意,默认情况下复制是异步进行的,因此不能保证强一致性。
高可用性。通过使用Redis Sentinel,当旧主副本不健康时,副本可以升级为新主副本。这还可以防止在未打开Redis持久性的情况下崩溃的主服务器提出空数据。
对于stable/redis
图表,您可以配置sentinel.enabled
以启用Redis Sentinel和自动故障转移。还有一个stable/redis-ha
图表。