Skip to content
Neuron Teckid edited this page Apr 14, 2015 · 1 revision

在一些应用场合里, Redis 集群会分出主从节点. 从节点会持有其主节点所有数据, 也就是说, 这时可以通过从节点来获取数据, 从而分流一部分主节点的请求流量.

要启用此模式, 在配置文件中加上

read-slave 1

以该配置文件启动 cerberus 进程即可. 以只读从节点模式启动的 cerberus 进程将尽可能地连接从节点发送请求, 其规则为

  • 如果一个主节点有多个从节点, 那么随机选取其中一个连接
  • 如果一个主节点没有从节点, 那么仍连接此主节点进行读取

并且此时 cerberus 将仅支持以下指令

PING PROXY UPDATESLOTMAP SUBSCRIBE PSUBSCRIBE

DUMP EXISTS TTL PTTL TYPE GET MGET BITCOUNT GETBIT GETRANGE STRLEN

HGET HGETALL HKEYS HVALS HLEN HEXISTS HMGET HSCAN

LINDEX LLEN LRANGE SCARD SISMEMBER SMEMBERS SSCAN

ZCARD ZSCAN ZCOUNT ZLEXCOUNT ZRANGE ZRANGEBYLEX ZREVRANGEBYLEX
ZRANGEBYSCORE ZRANK ZREVRANGE ZREVRANGEBYSCORE ZREVRANK ZSCORE

注意, 目前启用了只读从节点模式的 redis-cerberus 就无法再响应写请求了. 因此, 应用确定要进行读写分离时, 至少需要分别启动两个 cerberus 进程来操作同一个集群; 这通常适用于一些应用程序是数据生产者而另一部分只是消费者的场景.

在集群运行过程中, 新主节点被加入集群后从节点才能加入, 如果从节点加入前新主节点已经被分配了部分槽位, 那么只读 cerberus 可能已经选取该主节点作为读取节点, 这时要向代理发送 UPDATESLOTMAP 命令, 强制其下一次指令处理后重新更新槽位映射.

Clone this wiki locally