redis的repl-ping-slave-period和repl-ping-replica-period

一見發表於2019-01-06

網上很多Redis方面的文章,會涉及到repl-ping-slave-periodrepl-ping-replica-period這兩個重要引數,從一些中文解釋來看,意思差不多,即:SLAVE週期性的ping MASTER間隔,可直接理解成SLAVE -> MASTER間的心跳間隔(注意箭頭方向)。

 

沒有一篇文章同時提取這兩者,總是分開出現在不同文章中。在官方的配置檔案redis.conf,5.0版本之前的均使用repl-ping-slave-period,而從5.0開始變成了repl-ping-replica-period,也就是說這兩個其實是同一個東西。實際上因為一些非技術原因,很多軟體將slave改成了replica,Redis也同樣如此,所以replicaslave完全相同的。

為了相容,5.0同時支援兩種用法(其它配置項也同樣命運,如:slaveof改成了replicaof):

        } else if ((!strcasecmp(argv[0],"repl-ping-slave-period") ||

                    !strcasecmp(argv[0],"repl-ping-replica-period")) &&

                    argc == 2)

        {

            server.repl_ping_slave_period = atoi(argv[1]);

            if (server.repl_ping_slave_period <= 0) {

                err = "repl-ping-replica-period must be 1 or greater";

                goto loaderr;

            }

        }

 

常用命令變化,但5.0仍然相容的配置項(實際上所有的slave都改成了replica,包括一些官方網站的文件,不過程式碼中的變數名保持未變,仍就為slave):

<5.0版本

>=5.0版本

repl-ping-slave-period

repl-ping-replica-period

slaveof

replicaof

slave-priority

replica-priority

slave-read-only

replica-read-only

slave-serve-stale-data

replica-serve-stale-data

cluster-slave-validity-factor

cluster-replica-validity-factor

 

配置項說明(注意命名包含cluster的為叢集專有配置項):

 

預設值

單位

 

repl-ping-replica-period

10

定義心跳(PING)間隔。

repl-timeout

60

這個引數一定不能小於repl-ping-replica-period,可以考慮為repl-ping-replica-period的3倍或更大。定義多長時間內均PING不通時,判定心跳超時。對於redis叢集,達到這個值並不會發生主從切換,主從何時切換由引數cluster-node-timeout控制,只有master狀態為fail後,它的slaves才能發起選舉。

cluster-node-timeout

15000

毫秒

叢集中的節點最大不可用時長,在這個時長內,不會被判定為fail。對於master節點,當不可用時長超過此值時,它slave在延遲至少0.5秒後會發起選舉進行failover成為master。Redis叢集的很多其它值與cluster-node-timeout有關。

cluster-slave-validity-factor

10

 

如果設定為0,則slave總是嘗試成為master,無論slave和master間的連結斷開時間的長短。如果是一個大於0的值,則最大可斷開時長為:(cluster-slave-validity-factor * cluster-node-timeout)。例如:當cluster-node-timeout值為5,cluster-slave-validity-factor值為10時,slave和master間的連線斷開50秒內,slave不會嘗試成為master。

 

repl-timeout和cluster-node-timeout的區別:

 

預設值

單位

 

repl-timeout

60

決定複製超時,並不能決定slave發起選舉,也不決定master何時為fail

cluster-node-timeout

15000

毫秒

決定master何時為fail,在fail後,slave會發起選舉

 

 

相關文章