1.概要
Redisのクラスタは、高可用性とノード間のグループのRedisのシャーディングを達成することができます。クラスタ内のマスタと複数のスレーブノードがあります。マスターノードに障害が発生すると、スレーブノードは、新しいマスタとして選出されなければなりません。(そのクライアントの多くを含む)ただしRedisの自身が自動的に故障し、スタンバイスイッチング機能、自動フェイルオーバーを実現するために外部の監視ソリューションの必要性を検出しません。
RedisのSentinelは、高可用性ソリューションの公式推奨です。これは、Redisのクラスタノードを監視、通知、自動フェイルオーバーおよびクライアント構成ディスカバリーサービスを提供することができ、監視および管理ツールです。
2、問題が発生しました
1、ドッキングウィンドウのホストネットワーク
ドッキングウィンドウの窓のホストのネットワークを使用する場合は、MACは、(解決策を見つけることができませんでした)に有効になり、そして最終的にはCentOSの展開クラスタを使用してWindowsをあきらめていません。
図2に示すように、ホストネットワーク接続の問題を使用しないセンチネル
仮想IPにマスタから取得したネットワークのホストを使用せずに、あなたが通常の接続口となるようセンチネルノードクラスタマスターユニコムを指定できますが、プライマリノードに障害が発生したときセンチネルノードは、クラスタ内のコンテナ結果のIPが正しく接続されていないことができます。
3、ビルドプロセス
1、ディレクトリ構造
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、ドッキングウィンドウ-compose.yml
version: '2'
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を介して接続されています
2、テストデータ同期マスタノードのサブノード
3、近景スタンバイ切り替えマスタ
センチネル通常ユニコム 16379から16381までマスターノードスイッチエンディング
あなたは、ホストがちょうどいくつかの完璧なウィンドウ上でテストのCentOSに入れて達成することはできません見て、昨日スタンバイスイッチのクラスタノードの後に起因するドッカ原因の問題は接続できないセンチネルネットワークモデルクラスタを、設定する前にドラゴンは、後に怠惰な一週間を盗みました取得。
ます。https://juejin.im/post/5d07ac98e51d4577583ddcccで再現