Month: 11月 2013

RedisのSlaveはMasterよりも容量を大きくした方がよさそう

結論から先に書くと、
RedisのSlaveは、Masterよりも容量を大きくとった方がいい。
理由は、同一容量だと、Masterが容量をフルで使っている場合、このマスターデータ全てをSlaveにSETすることが出来ないから。

主な設定は、
maxmemory 2gb
maxmemory-policy allkeys-lru

症状
Masterがこの容量をフルに使ってる場合、新たにSlaveが同期を開始すると、途中で同期が止まる。
再現性は100%
最初は、Masterのclient-output-buffer-limitで切られていることを疑ったが違った。
おそらく全ての同期を完了する前に、Slaveの容量がいっぱいになってしまっている模様。
このレプリケーションではallkeys-lruの挙動になっていないらしく、新しめのデータがSETされていないことが多い。
ログでは正常に終了した形になっている。

Master
db0:keys=8942214,expires=8778923

Slave
master_link_status:up
db0:keys=8309380,expires=8176889

こんな形で、Slaveとして正常に動いているが、データには差異が出来てしまっている。
Slaveの容量を少しMasterよりも大きくすることで解決。