こんにちは。暇ですか?僕もです

暇人インフラエンジニアマン

redisをAWS ElastiCacheに移行した

オンプレredisに乗ってるデータをAWSに移行した時のメモ ※redis初心者です

  • redisはnot cluster
  • 一部のデータベースのデータのみ移行
  • ttl含む
  • 参考(↓) stackoverflow.com

手元のPC(mac)を経由して移行
A(オンプレ) -> PC -> B(AWS)

#!/bin/bash

source_host=A
source_port=6379
source_db=1
target_host=B
target_port=6379
target_db=1


redis-cli -h $source_host -p $source_port -n $source_db keys \* | while read key
do
  ttlmilli=$(( $(redis-cli -h $source_host -p $source_port -n $source_db ttl "$key")*1000 ))
  redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key"| /usr/local/opt/coreutils/libexec/gnubin/head -c-1| redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" "$ttlmilli"
done

この方法だとttlが無限だとエラーになるのでよしなに
僕の場合は、無限のものは無視してOKだったのでそのまま実行した

PC-> AWS間のネットワーク的疎通はええ感じにどうぞ

macのheadコマンドとgnu版でオプションが違ったのでgnu版をインストールするのぢゃ

  • ループ回数がエグくて時間かかった
  • 僕の場合、valが文字列だったので、わざわざdumpしなくても良く、一度コマンドリスト作ってから実行すればもっと早く終わったなぁと思った
  • 移行終わってからmigrateコマンドがあることを知った