IT Notebook

ITについての備忘録的なブログです

ElastiCacheのRedisのrdbファイルのバックアップ方法

こんにちは。 今度システムリプレースでElastiCacheのRedisのデータを移行しなくてはならず、ElastiCacheのRedisのrdbファイルをどのように取得するのか調査しました。サーバ上であればbgslaveで一発なのですが。。。

EC2上にRedisをインストールしてレプリケーション

EC2上にRedisをインストールして、ElastiCacheのRedisからレプリケーションできるのではないか。それが可能であればEC2上でbgslaveでrdbファイルを簡単に取得できると思った。

※こんなイメージ

Master(ElastiCache-Redis) ---> Slave(EC2-Redis)

SlaveのRedisのコンフィグ

■「/etc/redis/6379.conf」にslaveofを追加
slaveof <ElastiCacheのRedisのDNS> 6379

■Redis再起動
service redis_6379 restart

しかしながら、Slaveで以下のようなエラーが出力されつづけてしまう。

[4382] 10 Jun 11:29:57.091 * Connecting to MASTER <ElastiCacheのRedisのDNS>:6379
[4382] 10 Jun 11:29:57.092 * MASTER <-> SLAVE sync started
[4382] 10 Jun 11:29:57.095 * Non blocking connect for SYNC fired the event.
[4382] 10 Jun 11:29:57.097 * Master replied to PING, replication can continue...
[4382] 10 Jun 11:29:57.102 * Partial resynchronization not possible (no cached master)
[4382] 10 Jun 11:29:57.105 * Master does not support PSYNC or is in error state (reply: -ERR unknown command 'PSYNC')
[4382] 10 Jun 11:29:57.105 * Retrying with SYNC...
[4382] 10 Jun 11:29:57.108 # MASTER aborted replication with an error: ERR unknown command 'SYNC'

エラーを調べると、「AWS Developer Forums」でこのような記事を発見! Export redis data - unknown command ‘sync’

よくよく見ると、ElastiCacheのRedisの2.8.22以降はRedisのSYNCコマンドがDisableにされているとのこと。ちーん。

結論

ElastiCacheのRedisの2.8.22以降は、EC2のRedisへのレプリケーションはできない。

ElastiCacheのRedisのバックアップをS3にコピー

ということで他の方法を模索。以下の記事を発見!ElastiCacheのRedisのバックアップをrdbファイルとして、S3にへ転送できるとのこと。

ほんとにこの通りにやるとS3へrdsファイルを作成することができたので、詳細は割愛させて頂きます。

【新機能】Amazon ElastiCache – RedisのスナップショットをS3にエクスポートする

S3のrdbファイルを元にして、ElastiCacheの起動はまだ試したことないがそのあたりは色々情報があるので多分大丈夫。なんとかシステムリプレースを乗り越えられそうで一安心です。