ホームページ  >  記事  >  データベース  >  docker に基づいて redis-sentinel クラスターを構築する方法

docker に基づいて redis-sentinel クラスターを構築する方法

WBOY
WBOY転載
2023-06-02 10:19:05849ブラウズ

1. 概要

redis クラスターは、redis ノードのグループ間で高可用性とシャーディングを実現できます。クラスター内には 1 つのマスター ノードと複数のスレーブ ノードが存在します。マスター ノードに障害が発生した場合、スレーブ ノードが新しいマスターとして選択される必要があります。ただし、redis 自体 (多くのクライアントを含む) には、自動障害検出を実装してアクティブ/スタンバイ切り替えを実行する機能がなく、自動障害回復を実現するには外部監視ソリューションが必要です。

redis Sentinel は、公式に推奨される高可用性ソリューションです。これは、Redis クラスターの監視および管理ツールであり、ノードの監視、通知、自動障害回復、およびクライアント構成検出サービスを提供できます。

2. 発生した問題

1. Docker ホスト ネットワーク

Docker がホスト ネットワークを使用する場合 (Windows および Mac の場合)それはうまくいかなかったので(解決策が見つからなかった)、最終的にWindowsをあきらめ、centosを使用してクラスターをデプロイしました。

2. ホスト ネットワークを使用しない Sentinel 接続の問題

ホスト ネットワークを使用せずに Sentinel クラスターに接続する場合、マスター ノードのポートを指定できるため、正常に接続できますが、マスターノードに障害が発生すると、マスターノードから Sentinel が取得した IP がコンテナ内の仮想 IP となり、クラスターが正常に接続できなくなります。

docker に基づいて redis-sentinel クラスターを構築する方法

3. 構築プロセス

1. ディレクトリ構造

docker に基づいて redis-sentinel クラスターを構築する方法

docker に基づいて redis-sentinel クラスターを構築する方法

2、センチネル設定ファイル

1、sentinel1.conf

#端口号
port 26379
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

2、sentinel2.conf

#端口号
port 26380
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

3、sentinel3.conf

#端口号
port 26381
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

3. docker-compose.yml

version: &#39;2&#39;
services:
 master:
 image: redis:4.0
 restart: always
 container_name: redis-master
 #使用主机网络
 network_mode: "host"
 command: redis-server --port 16379 
 
 slave1:
 image: redis:4.0
 restart: always
 container_name: redis-slave-1
 network_mode: "host"
 # 指定端口并指定master ip 端口
 command: redis-server --port 16380 --slaveof <master ip> 16379
 
 slave2:
 image: redis:4.0
 restart: always
 container_name: redis-slave-2
 network_mode: "host" 
 command: redis-server --port 16381 --slaveof <master ip> 16379
 
 sentinel1:
 image: redis:4.0
 restart: always
 container_name: redis-sentinel-1
 network_mode: "host"
 # 指定sentinel文件位置
 command: redis-sentinel /usr/local/etc/redis/sentinel.conf
 # 使用数据卷映射文件到指定sentinel位置
 volumes:
  - ./sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
 
 sentinel2:
 image: redis:4.0
 restart: always
 container_name: redis-sentinel-2
 network_mode: "host" 
 command: redis-sentinel /usr/local/etc/redis/sentinel.conf
 volumes:
  - ./sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
 
 sentinel3:
 image: redis:4.0
 restart: always
 container_name: redis-sentinel-3
 network_mode: "host" 
 command: redis-sentinel /usr/local/etc/redis/sentinel.conf
 volumes:
  - ./sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf

4. centos を使用してクラスターをデプロイし、効果をテストします

1. クラスターへの接続をテストします。 Sentinel1

docker に基づいて redis-sentinel クラスターを構築する方法

2. マスター ノードと子ノードのデータ同期をテストします

docker に基づいて redis-sentinel クラスターを構築する方法

docker に基づいて redis-sentinel クラスターを構築する方法

3. マスターを閉じて、マスター/スタンバイ スイッチを表示します。

docker に基づいて redis-sentinel クラスターを構築する方法

センチネルの通常の接続

docker に基づいて redis-sentinel クラスターを構築する方法

マスターノードが 16379 から 16381 に切り替わりました

docker に基づいて redis-sentinel クラスターを構築する方法

以上がdocker に基づいて redis-sentinel クラスターを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。