久しぶりにMariaDB以外のことを書いてみる。
Redis3.2のrdbファイルは、Redis4に持っていっても、なんの障害もなく移行できる。
リリースノートにも書いてあるし、実際に試してみたところ、問題なく移行でき、キー操作も問題ない。
移行先でAOFを無効化しているので、rdbファイルを移行しただけだが、
AOFを有効化している場合は、aofファイルから復元されるので、注意が必要。
https://raw.githubusercontent.com/antirez/redis/4.0/00-RELEASENOTES
※リリースノートの一番下に、移行についての説明が記載されています。
で、Redis4についてですが、
AOFが単なる追記型ファイルとしてでなく、一定時点のスナップショット+追記、という形式(MIXED)に生まれ変わりました。
これにより、Redis3ではすごい速さで肥大化し続けるaofファイルが、
Redis4では肥大化速度が抑制され、さらにaofによる復元速度も早くなり、さらにさらにレプリケーションにも好影響があるということで、
Redis4からはAOFを積極的に使っていくべきだな、と感じております。
とはいえ、実際に移行を行う際、まるっとrdbファイルを移行しても、
移行先がAOFを有効化していると、aofファイルから復元が試みられる結果、
rdbファイルが読み込まれず、saveした際には、データがなくなってしまうという悲しい結果に終わる。
そこで、Redis3.2からRedis4への移行については、レプリケーションが好ましい。
以下のような形でサーバを組む。
-------------------- redis01 (version:3.2.x, aof:disable) IP:192.168.35.11 -------------------- | | (replication) | -------------------- redis02 (version:4.0.x, aof:enable) IP:192.168.35.12 --------------------
このように、移行元(redis01)ではAOFが無効化されており、
移行先(redis02)ではAOFを有効化したい場合、
移行先のAOFを有効化した状態で、レプリケーションを始める。
そうすると、移行先のデータディレクトリ(/var/lib/redisなど)に、rdbファイルとaofファイルの両方が作成される。
もし、MIX形式を使いたいなら、
aof-use-rdb-preamble yes
というように、「aof-use-rdb-preamble」を「yes」に設定する必要がある。
実際に、aofファイルにスナップショットが書かれるタイミングは、
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size
という2つのパラメータに依存するため、なかなかaofファイルにスナップショットが書き込まれない場合、これらを小さくするとよい。
あくまで、aofにスナップショットが書かれたことを確認するためで、無理に小さくする必要はない。
ちなみに、aofファイルにスナップショットが含まれているかどうかは、lessコマンドで確認できる)
最後に、移行先(redis02)のaof関連パラメータを載せておく。
appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes
(参考)
https://qiita.com/devneko/items/67662e016e8cd0b7791a
以上
コメントがあればどうぞ