Ubuntu14.04でマスタースレーブレプリケーションを使用してRedisデータを移行する方法
序章
Redisは、メモリ内、NoSQL、Key-Valueキャッシュおよびストアであり、ディスクに永続化することもできます。 人気が高まっており、大小のプロジェクトの両方でデータストアとして使用されています。 より強力なサーバーへの移行など、さまざまな理由で、あるサーバーから別のサーバーにそのデータを移行する必要がある場合があります。
現在のサーバーから新しいサーバーにデータベースファイルをコピーすることも可能ですが、Redisデータベースを移行するための推奨される方法は、マスタースレーブ方式でレプリケーションセットアップを使用することです。 このような設定は、ファイルのコピーよりもはるかに高速であり、ダウンタイムはほとんどまたはまったくありません。
この記事では、マスタースレーブレプリケーションを使用してRedisデータをUbuntu14.04サーバーから同様のサーバーに移行する方法を説明します。 これには、新しいRedisサーバーをセットアップし、現在のサーバーのスレーブになるように構成することが含まれます(つまり、 マスター)、移行が完了した後、スレーブをマスターに昇格させます。
前提条件
この記事に従うには、エクスポートまたは移行するデータを含む1台のRedisマスターサーバーと、スレーブとなる2台目の新しいRedisサーバーが必要です。
具体的には、これらはRedisマスターの前提条件です。
-
1つのUbuntu14.04サーバー:
-
初期サーバーセットアップガイドを介してセットアップされたsudo非rootユーザー
-
このIPTablesチュートリアルを介して、(オプション)ネームサーバーの更新ステップまでに構成されたファイアウォール
-
このRedisクラスターチュートリアルの手順1と2に従って、Redisをインストールし、マスターとしてセットアップします。
-
移行するデータ。このRedis復元記事の手順1と2に従って設定できます。
-
そして、これらはRedisスレーブの前提条件です。
-
2番目のUbuntu14.04サーバー:
-
初期サーバーセットアップガイドを介してセットアップされたsudo非rootユーザー
-
このIPTablesチュートリアルを介して、(オプション)ネームサーバーの更新ステップまでに構成されたファイアウォール
-
このRedisクラスターチュートリアルの手順1と3に従って、Redisをインストールし、スレーブとしてセットアップします。
-
両方のサーバーで、IPTablesチュートリアルのネームサーバー構成セクションに必ず従ってください。 これがないと、apt
は機能しません。
ステップ1—Redisマスターファイアウォールを更新する
Redisスレーブをインストールして構成した後、ファイアウォールルールのために通信していない2つの独立したサーバーがあります。 このステップでは、それを修正します
この修正には、マスターのTCPルールに例外を追加して、ポート6379でRedisトラフィックを許可することが含まれます。 したがって、マスターで、IPv4ルールのIPTables構成ファイルを開きます。
- sudo nano /etc/iptables/rules.v4
SSHトラフィックを許可するルールのすぐ下に、スレーブのIPアドレスからのRedisポートのみでのトラフィックを許可するRedisのルールを追加します。 必ずyour_slave_ip_address
をスレーブサーバーのIPアドレスに更新してください。
. . .
# Acceptable TCP traffic
-A TCP -p tcp --dport 22 -j ACCEPT
-A TCP -p tcp -s your_slave_ip_address --dport 6379 -j ACCEPT
. . .
これは非常に制限的で、より安全です。 それ以外の場合、サーバーはRedisポート上の任意のホストからのトラフィックを受け入れます。
IPTablesを再起動して、新しいルールを適用します。
- sudo service iptables-persistent restart
レプリケーションシステムが起動し、マスターのファイアウォールがRedisトラフィックを許可するように構成されたので、両方のサーバーが通信できることを確認できます。 これは、このRedisクラスターチュートリアルのステップ4に記載されている手順で実行できます。
ステップ2—データインポートの確認
両方のサーバーが接続を確立している場合、サーバーからスレーブへのデータのインポートが自動的に開始されます。 これで、それが正常に完了したことを確認するだけで済みます。 それを確認する方法は複数あります。
Redisデータディレクトリ
データのインポートが成功したことを確認する1つの方法は、Redisデータディレクトリを調べることです。 これで、マスター上にあるのと同じファイルがスレーブ上にあるはずです。 次のコマンドを使用して、スレーブサーバーのRedisデータディレクトリにあるファイルの長いリストを作成する場合:
- ls -lh /var/lib/redis
この種の出力を取得する必要があります。
total 32M
-rw-r----- 1 redis redis 19M Oct 6 22:53 appendonly.aof
-rw-rw---- 1 redis redis 13M Oct 6 22:53 dump.rdb
Redisコマンドライン
データのインポートを確認する別の方法は、Redisコマンドラインからです。 スレーブサーバーでコマンドラインを入力します。
- redis-cli
次に、認証してinfo
コマンドを発行します
- auth insert-redis-password-here
-
- info
出力では、#Keyspaceのキーの数は両方のサーバーで同じである必要があります。 以下の出力は、マスターサーバーの出力とまったく同じであるスレーブサーバーから取得されました。
# Keyspace
db0:keys=26378,expires=0,avg_ttl=0
キーをスキャンします
スレーブがマスターと同じデータを持っていることを確認するさらに別の方法は、Redisコマンドラインからscan
コマンドを使用することです。 そのコマンドからの出力は、両方のサーバーで常に同じであるとは限りませんが、スレーブで発行された場合、少なくとも、スレーブに期待するデータがあることを確認できます。
この記事で使用したテストサーバーからの出力例を以下に示します。 scan
コマンドの引数は任意の数であり、カーソルとして機能することに注意してください。
- scan 0
出力は次のようになります。
1) "17408"
2) 1) "uid:5358:ip"
2) "nodebbpostsearch:object:422"
3) "uid:4163:ip"
4) "user:15682"
5) "user:1635"
6) "nodebbpostsearch:word:HRT"
7) "uid:6970:ip"
8) "user:15641"
9) "tid:10:posts"
10) "nodebbpostsearch:word:AKL"
11) "user:4648"
127.0.0.1:6379>
ステップ3—スレーブをマスターに昇格させる
スレーブにすべてのデータがあることを確認したら、それをマスターに昇格させることができます。 これは、Redisクラスターチュートリアルのステップ5でも説明されていますが、簡単にするために、手順もここにあります。
まず、スレーブでRedisコマンドラインを入力します。
- redis-cli
認証後、slaveof no one
コマンドを発行して、マスターに昇格させます。
- auth your_redis_password
- slaveof no one
次の出力が得られるはずです。
OK
次に、info
コマンドを使用して確認します。
- info
Replicationセクションの関連する出力は次のようになります。 特に、 role:master 行は、スレーブがマスターになったことを示しています。
# Replication
role:master
connected_slaves:0
master_repl_offset:11705
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
その後、前のマスターのログファイルの1つのエントリでもそれを確認する必要があります。
14613:M 07 Oct 14:03:44.159 # Connection with slave 192.168.1.8:6379 lost.
そして、新しいマスター(以前のスレーブ)では、次のように表示されます。
14573:M 07 Oct 14:03:44.150 # Connection with master lost.
14573:M 07 Oct 14:03:44.150 * Caching the disconnected master state.
14573:M 07 Oct 14:03:44.151 * Discarding previously cached master state.
14573:M 07 Oct 14:03:44.151 * MASTER MODE enabled (user request from 'id=4 addr=127.0.0.1:52055 fd=6 name= age=2225 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=slaveof')
この時点で、アプリケーションをデータベースに接続し、元のマスターを削除または破棄することができます。
結論
正しく実行された場合、この方法でRedisデータを移行するのは簡単な作業です。 エラーの主な原因は、通常、マスターサーバーのファイアウォールを変更してRedisトラフィックを許可することを忘れていることです。
その他のRedisチュートリアルを参照すると、Redisをさらに活用する方法を学ぶことができます。