【问题标题】:when redis get key in slave, why redirect to master?当redis在slave中获取密钥时,为什么要重定向到master?
【发布时间】:2018-03-02 10:27:54
【问题描述】:

我想知道 read key 在 Redis 集群模式下。

我的 redis 集群信息:

127.0.0.1:7001> cluster nodes
2f255a65c7238134a5b2b84671f1d1af01778178 127.0.0.1:7004@17004 slave 4c1fe92725284ae39f9b538674d9f13ae6d75d66 0 1519807517000 5 connected
cf434afde5f61917f46af8982f6f1e72bedabc9e 127.0.0.1:7001@17001 myself,master - 0 1519807516000 2 connected 5461-10922
4c1fe92725284ae39f9b538674d9f13ae6d75d66 127.0.0.1:7002@17002 master - 0 1519807517765 3 connected 10923-16383
281be7a01b553b0600789ec08e30c38949bfdd59 127.0.0.1:7005@17005 slave e2ca464b949bddc0e5414345ad6f238449be8e94 0 1519807516756 6 connected
e2ca464b949bddc0e5414345ad6f238449be8e94 127.0.0.1:7000@17000 master - 0 1519807517563 1 connected 0-5460
d86241a9eb69e8055de05dd95d54b348a836cbda 127.0.0.1:7003@17003 slave cf434afde5f61917f46af8982f6f1e72bedabc9e 0 1519807517000 4 connected

我想知道这个!

bash
❯ redis-cli -c -p 7003
127.0.0.1:7003> keys *
1) "key1"
127.0.0.1:7003> get key1
-> Redirected to slot [9189] located at 127.0.0.1:7001
"val1"
127.0.0.1:7001>

从机与主机具有相同的密钥
主人有相同的钥匙。


但是为什么.. 为什么get key 命令会重定向到主控???
为什么?
我不懂 Redis 集群...

【问题讨论】:

    标签: redis redis-cluster


    【解决方案1】:

    默认情况下,slave 将客户端重定向到它的 master,因为 slave 上的数据可能是陈旧的,即对 master 的写入可能不会同步到 slave。

    但是,有时我们并不关心陈旧性,而是希望通过从从站读取(可能是陈旧的)数据来扩展读取操作。

    为了实现这一点,您可以将READONLY 命令发送到从站。然后,该连接上的任何仅就绪操作都将由从属服务器提供服务,并且不会重定向到其主服务器。

    如果要关闭READONLY模式,可以发送READWRITE命令告诉slave将读请求重定向到master。

    注意

    无论从机是READONLY 还是READWRITE 模式,你都不能写入从机,即写操作总是重定向到主机。

    更新slave-serve-stale-dataslave-read-only 配置与 READONLYREADWRITE 命令无关。

    slave-serve-stale-data 控制slave 是否应该将请求重定向到master 或者只是返回一个错误,当它失去与master 的连接时,或者复制仍在进行中。

    slave-read-only 控制是否可以写入从属设备。但是,这些写入不会传播到 master 和其他 slave,并且会在与 master 重新同步后被删除。

    【讨论】:

    • 但是我这样配置 Redis 集群,slave-serve-stale-data yesslave-read-only yes 所以,Redis 集群在 master 和 slave 中具有相同的 key,但是当 slave 数据陈旧时,slave 会将客户端重定向到它的 master ?我明白了吗……?
    • 这两个配置与READONLYREADWRITE命令无关。
    • 感谢您的详细信息,所以从服务器不会将客户端重定向到其主服务器,除非数据陈旧?只有从服务器将客户端重定向到其主服务器,因为数据可能已过时? slave怎么知道自己的数据已经过时了?
    • 没有。是否重定向请求,只取决于你是否已经在相应的连接上发送了READONLY 命令。从站不知道数据是否陈旧。
    猜你喜欢
    • 2014-12-17
    • 2018-07-09
    • 2012-08-11
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2013-03-17
    • 2018-09-06
    • 2016-09-28
    相关资源
    最近更新 更多