【Redis入門】一瞬でコピーを作る魔法!`REPLICAOF` コマンドで学ぶデータのレプリケーション
みなさん、こんにちは!Redisの世界へようこそ。
開発を進めていると、「データが消えたら困るな…」「アクセスが多すぎて1台のサーバーじゃ捌ききれないかも…」という不安に直面することがありますよね。
そんな時に大活躍するのが、Redisの「レプリケーション(データの複製)」という仕組みです。そして、その設定をサーバーを止めることなく、たった一行のコマンドで実行できてしまうのが今回ご紹介する `REPLICAOF`(レプリカ・オブ) コマンドです。
「難しそう…」と思うかもしれませんが、大丈夫。日常の分かりやすい例えを交えながら、基礎から本質までじっくり噛み砕いて解説しますね。
ここをクリアすれば、Redisの基本はバッチリマスターできますよ!
—
そもそも「レプリケーション」ってなに?
まずは、日常の例えで考えてみましょう。
あなたが大人気のラーメン屋さん(メインのRedisサーバー)を経営しているとします。毎日、ものすごい数のお客さんがやってきて、注文(データの書き込み・読み込み)をさばいています。
でも、もし店主のあなたが倒れてしまったり(サーバーダウン)、お店が満席で対応しきれなくなったら(アクセス集中)大変ですよね。
そこであなたは、隣に「弟子(レプリカ)」を配置することにしました。
弟子は、あなたが注文を受けてラーメンを作る様子をリアルタイムでじーっと観察し、まったく同じラーメン(データ)を自分の手元にも準備します。
【メイン(マスター)】 ──(リアルタイムでデータを同期)──> 【弟子(レプリカ)】
注文を受けて書き込む 同じデータを保持して
ラーメンを作る! 読み取り専用で手伝う!
この仕組みがあれば:
1. お客さんが増えても安心:注文を見る(データの読み取り)作業は弟子に任せることができる。
2. もしもの時も安心:店主が倒れても、弟子がすぐに代わりを務められる。
このように、「本物のデータを常にリアルタイムで真似してコピーを持ち続ける仕組み」をITの世界ではレプリケーションと呼びます。
—
`REPLICAOF` コマンドのすごさとは?
通常、こういった「コピーの関係」を作るには、サーバーを一度停止して設定ファイルを書き換え、再起動する…という大がかりな作業が必要になることが多いです。
しかし、Redisは違います。
なんと、サーバーが元気に動いている最中に、コマンド一発で「今日から君はあっちのデータの弟子になってね!」と指示できるのです。これを実現するのが `REPLICAOF` コマンドです。
システムを一切止めずに構造を変えられる。これがRedisの極めてしなやかで強力な設計の本質なんです。
—
実際にコマンドを叩いてみよう!
では、実際のコマンドの使い方を見てみましょう。驚くほどシンプルですよ。
1. 別のサーバーの「弟子(レプリカ)」にする
新しく用意したRedisサーバー(分店)に入り、メインサーバー(本店)のIPアドレスとポート番号を指定してコマンドを実行します。
構文: REPLICAOF <メインサーバーのIP> <ポート番号>
127.0.0.1:6379> REPLICAOF 192.168.1.100 6379
OK
たったこれだけです!「OK」と返ってきた瞬間、裏側で以下のようなドラマチックな処理が自動で一気に行われます。
1. メインサーバーに「弟子にして!」と接続要求を送る。
2. メインサーバーが今の全データを一括で送ってくれる(初期同期)。
3. その後は、メインサーバーに新しいデータが入るたびに、リアルタイムで転送されてくる。
実行後のログを見てみると、裏側で Redis が素早くデータを同期している様子が分かります。
レプリカ側の内部ログのイメージ
- Connecting to MASTER 192.168.1.100:6379
- MASTER <-> REPLICA sync started <-- 同期が始まりました!
- FULL RESYNC finished successfully. <-- 全データのコピーが完了!
- Slave is now ready to accept requests. <-- 準備完了!読み取りリクエストに応じられます
2. 独立して「一人立ち」させる(レプリカ解除)
「もうコピーをやめて、独立した単独のサーバーとして動かしたい」という時も、コマンド一発です。
レプリカ関係を解除して、誰の弟子でもなくする
127.0.0.1:6379> REPLICAOF NO ONE
OK
これを実行すると、メインサーバーからの同期がピタッと止まり、自分自身が独立したメインサーバーへと昇格します(手元にあるコピーデータはそのまま残ります)。
—
知っておくと得する!先輩からのワンポイントアドバイス
ここからは、実務でも役に立つちょっと賢いポイントを2つお伝えしますね。
① レプリカは基本的に「読み取り専用」
弟子(レプリカ)になったRedisは、デフォルトではデータの書き込みができません。
データを書き込めるのはメインサーバーだけで、弟子はメインから送られてくるデータをひたすら受け取ります。
試しにレプリカ側でデータを入れようとすると、このように怒られます。
127.0.0.1:6379> SET mykey “Hello”
(error) READONLY You can’t write against a read only replica.
「読み取り専用だから書き込めませんよ!」という優しいエラーです
これは、「あっちこっちでデータを書き換えると、どれが本物か分からなくなる」のを防ぐためのとても賢い安全装置なのです。
② ネットワークが一瞬切れても大丈夫!
もし通信トラブルでメインと弟子の接続が一瞬切れてしまったらどうなるでしょう?
安心してください。接続が戻ったとき、Redisは「切れていた間に増えた差分データ」だけをスマートに計算して、追いつくように同期してくれます(部分再同期と言います)。最初から全部やり直すわけではないので、ネットワークにもとっても優しいんですよ。
—
まとめ:動的なレプリケーションをマスターしよう!
今回は、Redisの `REPLICAOF` コマンドについて解説しました。
- レプリケーションとは、データをリアルタイムで別サーバーにコピーする仕組み。
- `REPLICAOF` コマンドを使えば、サーバーを止めずに動的に「メイン」と「レプリカ(弟子)」の関係を作れる。
- `REPLICAOF NO ONE` で、いつでも独立させることができる。
「サーバーのコピー」と聞くと最初は難しく感じるかもしれませんが、コマンドひとつで完結する仕組みを知ると、Redisがどれほど扱いやすく作られているかが分かりますよね。
データの一貫性と安全性を守るこの強力な魔法、ぜひ手元の環境でためしてみてくださいね。
ここまで理解できれば、Redisの高可用性(壊れにくい仕組み)の第一歩はバッチリマスターですよ!応援しています!
コメント