【入門編】 Redis Sentinelによる高可用性 – Redis

やあ。Redisの世界へようこそ。
Redisをただの「速いキャッシュ」だと思っているなら、それは少しもったいない。こいつは、止まることが許されない現代のWebサービスにおいて、鋼の心臓として機能する非常に頼もしい相棒なんだ。

今日は、Redisがどうやって「不眠不休のシステム」を実現しているのか。その核心である「Redis Sentinel(センチネル)」について、難しい専門用語は抜きにして、君の目の前で起きている出来事として解説していくよ。

肩の力を抜いて読んでくれ。ここを理解すれば、君はもうRedisの運用を怖がる必要はなくなるはずだ。

—

1. Sentinelは「24時間見守る頼れるガードマン」

Redisはメモリ上で動くから爆速だけど、もしサーバーが突然壊れたらどうなる? 中身は全部消えてしまうよね。だから普通は、同じデータを別のサーバーにもコピーしておく(レプリケーション)。

でも、もし「主役(マスター)」のサーバーが故障したら?
「誰かが素早く代役(スレーブ)を新しい主役に昇格させて、みんなをそっちに誘導しなきゃいけない」。

この「監視・判断・交代」を自動でやってくれるのが、Redis Sentinelだ。
イメージとしては、主役の楽屋の前で24時間目を光らせている「ガードマン」だと思ってほしい。

2. 「クォーラム(定足数)」の知恵:独断専行は許されない

ここで一つ面白い話がある。もしガードマンがたった1人だったらどうなるだろう?
「あれ? 主役の反応がないな。よし、俺が独断で交代させる!」
……でも、実は主役は壊れていなくて、単に回線が混雑していただけだとしたら? 勘違いで勝手に交代してしまったら、システムは混乱の渦に飲み込まれる。

だからSentinelは、複数人で監視するんだ。これを「クォーラム(定足数)」と呼ぶ。

  • 「ねえ、主役から返事がないんだけど、君もそう思う?」
  • 「ああ、俺もそう思う。じゃあ多数決で『故障』と決めようか」

このように、一定数以上のSentinelが「あいつは死んだ」と同意しない限り、勝手なフェイルオーバー(交代劇)は行わない。この慎重さが、大規模システムを支える秘訣なんだ。

3. 自動フェイルオーバー:華麗なる交代劇

実際に主役が故障したとき、裏側では何が起きているのか。ざっくり言うとこんな流れだ。

1. 検知: Sentinelたちが「主役が応答しない!」と気づく。
2. 合意: 「定足数」に達したら、「あいつはもうダメだ」と判定を下す。
3. 選挙: どのスレーブを新しい主役にすべきか、Sentinel同士で話し合う。
4. 昇格: 選ばれたスレーブに「今日からお前が主役だ!」と命令を下す。
5. 周知: アプリケーション(君が作ったプログラム)に、「新しい主役はここだよ!」と通知する。

この間、ほんの数秒。人間が深夜に叩き起こされて復旧作業をする必要なんてない。これが「高可用性(いつでも使えること)」の正体だ。

4. アプリケーションはどうやって知るの?

ここが一番の悩みどころだよね。「主役が変わったら、プログラムの設定を書き直さないといけないの?」と。

答えは「No」だ。
プログラムはSentinelに「今の主役はどこ?」と聞けばいい。Sentinelは、常に最新の情報を教えてくれるコンシェルジュのような役割も持っているんだ。

擬似的なコード例:Sentinelに問い合わせるイメージ
from redis.sentinel import Sentinel

1. 監視しているSentinelたちのリストを渡す
sentinel = Sentinel([(‘192.168.1.1’, 26379), (‘192.168.1.2’, 26379)], socket_timeout=0.1)

2. 「マスターの名前」を指定して、現在の主役を教えてもらう
master = sentinel.master_for(‘mymaster’, socket_timeout=0.1)

3. これで、裏側で交代があっても自動的に新しいマスターに接続してくれる
master.set(‘key’, ‘value’)

これだけで、君のアプリは「壊れないRedis」と対話できるようになる。

—

先輩エンジニアからのアドバイス

Sentinelを運用する上で、一つだけ覚えておいてほしい。
「Sentinelは奇数個で動かす」のが鉄則だ。

なぜか? 3人や5人なら多数決で必ず決着がつくからだ。2人や4人だと、意見が割れた時に「同点」になってしまい、いつまで経っても交代できない……なんていう悲劇が起きる。

システムは時として、人間社会以上に「政治的」なんだよ。

—

まとめ:今日学んだこと

  • Sentinelはガードマン: 24時間監視し、故障を検知する。
  • クォーラムは多数決: 独断専行を防ぐための賢い仕組み。
  • 自動フェイルオーバー: 故障を察知し、即座に次の主役を用意する。
  • 運用は奇数で: 意見が割れない構成を心がけること。

これで君も、Redis Sentinelの基礎はマスターしたと言っていい。
次は実際に3台のSentinelを立てて、わざとマスターを落としてみる実験をしてみるといい。その時、ログに流れる「交代劇」を眺めれば、Redisの本当の凄さが肌感覚でわかるはずだよ。

何かあればいつでも聞いてくれ。応援しているよ!

コメント

タイトルとURLをコピーしました