Redisマスタースレーブ構成の実装と設定

Redisレプリケーションの特徴

Redisのマスタースレーブ同期メカニズムには以下の重要な特性があります。

  • 1つのマスターサーバーが複数のスレーブサーバーにデータを配信可能
  • スレーブサーバーも他のスレーブとの接続を受け入れることができ、階層的な同期構造を形成
  • マスター側はノンブロッキング処理でクライアントリクエストへの影響を最小限に抑える
  • スレーブ側も同様に非同期でデータ更新を行い、既存データに対する読み取りリクエストは即時応答
  • 読み取り負荷分散によりシステム全体のスケーラビリティが向上
  • データ永続化処理をスレーブに委譲することでマスターの負担を軽減

同期プロセスの仕組み

スレーブ起動後、マスターへの接続確立時にSYNCコマンドを送信します。これにより、マスター側ではバックグラウンドでRDBファイルの生成処理が開始され、同時に受信した全ての書き込みコマンドがバッファリングされます。生成完了後、データベース全体がスレーブに転送され、スレーブはこれをディスクに保存してメモリにロードします。その後、新規および蓄積された変更コマンドが継続的にスレーブに伝搬され、最終的にデータの一貫性が確保されます。

ネットワーク切断が発生した場合でも、自動再接続後にフル同期が自動実行されるため、運用上の手動介入は不要です。

環境構築手順

Windows環境での単一マスター・単一スレーブ構成の実装例を示します。ポート6379をマスター、6380をスレーブとして構成します。

設定ファイルの準備

まず基本設定ファイルを準備します:

# マスターサーバー用設定 (redis.conf)
port 6379

スレーブ用設定ファイルを作成:

# スレーブサーバー用設定 (redis-slave.conf)
port 6380
slaveof 127.0.0.1 6379

読み取り専用設定

バージョン2.6以降ではスレーブはデフォルトで読み取り専用ですが、必要に応じて変更可能です:

# 読み取り専用モードの無効化
slave-read-only no

サービス起動

コマンドプロンプトから各サービスを起動します:

# マスターサーバー起動
redis-server.exe redis.conf

# スレーブサーバー起動
redis-server.exe redis-slave.conf

動作確認

クライアント接続による検証:

# マスター側でデータ作成
redis-cli -p 6379
> set key1 "master data"
> set key2 "sync test"

# スレーブ側でデータ確認
redis-cli -p 6380
> get key1
"master data"
> get key2
"sync test"

課題と今後の検討事項

現時点の構成は基本的なレプリケーションであり、本格的なクラスタ構成とは異なります。マスターノード障害時の自動フェイルオーバーや、より高度な負荷分散戦略など、実運用に必要な機能については別途検討が必要です。

タグ: redis C# database-replication Master-Slave

8月3日 04:13 投稿