🤼
Redis、Replicationが組めるバージョンの組み合わせ
Redis の Replication が組めるバージョン、組めないバージョンの組み合わせ
そしてそれが何起因で決まるのか?を記す。
意識するポイントは RDB のバージョン
Redis のバージョンではなく、内部的に持っている永続化ファイル (RDB) のバージョンによって、レプリケーション可否が決まります。
これは最初に Full Sync する際、利用される snapshot が RDB 形式なためです。
RDB バージョンは新たな型が生まれたり、 RDB に新たなメタ情報が埋め込まれた時にバージョンが上がります。
直近では Redis v5 で stream 型対応など。
RDB 解釈の後方互換性について
Redis3.2 以降は RDB の解釈について、後方互換性が維持されています。
そのため、 3.2 以降であれば古い RDB を読み込むことが可能です。
簡単な例
可否 | Master Redis version | Master RDB verison | > | Replica Redis version | Replica RDB version | 備考 |
---|---|---|---|---|---|---|
OK | v5.0 | v9 | > | v6.0 | v9 | 同じ RDBver |
OK | v6.0 | v9 | > | v5.0 | v9 | 同じ RDBver |
NG | v5.0 | v9 | > | v4.0 | v8 | |
OK | v4.0 | v8 | > | v5.0 | v9 | 後方互換性あり |
OK | v2.8 | v6 | > | v3.0 | v6 | 同じ RDBver |
OK | v2.8 | v6 | > | v3.2 | v7 | 後方互換性あり |
NG | v2.4 | v5 | > | v2.8 | v6 | 後方互換性なし |
Redis と RDB version 早見表
Redis ver | RDB ver |
---|---|
v6 | v9 |
v5 | v9 |
v4 | v8 |
v3.2 | v7 |
v3 | v6 |
v2.8 | v6 |
v2.4 | v5 |
どういうときに問題になるか?
主に Redis Cluster で、 Failover を利用して Redis upgrade したい場合
新バージョンを Replica にして、 Failover するところまでは問題なく出来ます。
しかし Failover した後、 RDB ver が異なると古いバージョンを Replica に出来ません。
つまり往復の Failover によって切り戻しが出来ない、ということになります。
片道切符です。
切り戻しには停止メンテナンスが必要そうです。
※ resharding を使えばオンラインでも出来る気がしますが未検証です。
Discussion
大変参考になる記事ありがとうございます!
『Redis と RDB version 早見表』では Redis v3.2 が RDB v7 となっているのですが、『簡単な例』の表では Redis v3.2 が RDB v6 となっていて、食い違っているようです。ご確認いただけますと幸いです
早見表の方が正しかったので、例の方を修正しました!指摘ありがとうございます