ピピ+ redis +センチネル=高利用レッド
8133 ワード
Pipy は、クラウド、エッジ、およびiOTのオープンソースプログラマブルプロキシです.Pipy用途が広い自然は、それが複数のユースケースで使われるのを許します.この記事の主な目的は、クライアントとアプリケーションの接続が常に楽しまれるようにREDISマスターとスレーブ(エージェント)の複製の前にTCP負荷バランサーとしてPIPYの実装を示すことです.
我々は、プロセス終了、ハードウェア障害、ネットワークしゃっくりまたはいくつかの既知の理由のために指定されたRedisマスターノード停止が指定された場合、自動フェイルオーバー機能を実装して、達成したいです、そして、sentinelは残りのエージェントノードのうちの1つに自動的に失敗します. クライアントとアプリケーションRedisに接続するフェイルオーバーメカニズムによって影響されていません. 我々は、クライアントとアプリケーションの設定/設定の変更を必要とせずに全体フェイルオーバーメカニズムを完全に透明にする. 我々は、すべての書き込み(Redisセットまたは他のユーザー設定コマンド)の要求をマスターノードによって処理されたクライアントとアプリケーションのない場所でのトポロジーを知っている. 私たちは、すべてのリクエストが割り当てられたリソースのより良い使用をするために利用可能なノードに等しく分配されることを望みます. .... ロードバランシング、TCP接続をプロキシして、セット(または他のユーザー構成)Redisコマンドを確実にすることは常にマスターノードに送られます.
マスターとエージェント実装を含むRedis展開のための高可用性は、Redis Sentinelを実装することによって達成されます.
Pipy は、クラウド、エッジ、およびiOTのオープンソースプログラマブルプロキシです.
Redis オープンソースは、メモリのデータストア、ベンチマーク世界最速です.Redisパワーエッジアプリケーションを切断し、リアルタイム分析、高速高ボリュームトランザクション、アプリケーションの社会的機能、アプリケーションのジョブ管理、キューやキャッシュなどのユースケースを強化するために知られています.
Redis Sentinel Redisクラスタを使用しない場合はRedisに対して高可用性を提供します.
つのPIPYプロキシサーバはTCP負荷バランサとして動作し、REDISサーバが利用可能であり、リクエストを提供する準備ができているトラックを維持する. つのREDISサーバは、マスターエージェント複製を提供します. ロバスト展開のための3つのsentinelインスタンス
デモンストレーション目的のために、デモコードは、Dockerを構成するスクリプトを回転させるようになります.
デモの完全なソースが利用可能でありhttps://github.com/flomesh-io/pipy-demos/tree/main/pipy-redis-sentinel
Docker docker-compose redis-cli クローンPipy Demos Repo またはデモコードをダウンロードpipy-redis-sentinel .
PIPYプロキシ、REDIS、Sentinelコンテナのスピンアップ
すべてのコンテナが稼働中であることを確認します.
PIPYサービスがコマンド以下で実行することによってすべてのREDISノードにルーティングトラフィックであることを確認してください.ピピが6379のREDISデフォルトポートを公開しているので、DockerホストIPとポート情報を提供する必要はありません.
もっと赤のコマンドを試してみましょう
休止しましょう
何らかの問題なしでREDISにアクセスできるかどうかを見るためにいくつかのREDISコマンドを実行します.
一時停止コンテナを戻し、Sentinelはスレーブノードとしてマークされます
我々は、Pipy、Happroxy、twemproxy、およびシングルRedisインスタンスで様々なテストを行いました.
以下は、我々のMac M 1 MAXで動いているOS 20.04.4 LTS(焦点Fossa)ARM 64で、我々のVMで実行されるテスト結果です.
Redisの前にどんなプロキシを加えても性能ペナルティを引き起こすということは明らかです、しかし、それは利益代理人が持ってくる利益を達成するために支払わなければならなかったコストです.
インフラストラクチャサービスをソフトウェア構成と組み合わせることによって、REDISレプリケーションのためにRedis高可用性とどんな障害と災害に対しても最大の保護を達成することができます.Properyのインフラストラクチャの設定とデザインでは、異なるアベイラビリティゾーンを使用して、マスターとスレーブのREDISレプリケーションのための高い可用性を達成することができます.Redis SentinelはマスターからスレーブへのREDISレプリケーションのフェイルオーバを監視し、実行します.
Pipy はopen-source , 非常に高速で、エッジルータ、ロードバランシング&プロキシ(フォワード/リバース)、APIゲートウェイ、スタティックHTTPサーバ、サービスメッシュサイドカー、および他の多くのアプリケーションに至るまで様々な使用ケースで使用することができます軽量ネットワークトラフィックプロセッサ.Pipyは活発な開発において、フルタイムのコミットメントと誘因によって維持されます.
目標
マスターとエージェント実装を含むRedis展開のための高可用性は、Redis Sentinelを実装することによって達成されます.
クイックテクノロジー入門
Pipy は、クラウド、エッジ、およびiOTのオープンソースプログラマブルプロキシです.
Redis オープンソースは、メモリのデータストア、ベンチマーク世界最速です.Redisパワーエッジアプリケーションを切断し、リアルタイム分析、高速高ボリュームトランザクション、アプリケーションの社会的機能、アプリケーションのジョブ管理、キューやキャッシュなどのユースケースを強化するために知られています.
Redis Sentinel Redisクラスタを使用しない場合はRedisに対して高可用性を提供します.
デモ高レベル展開アーキテクチャ
セットアップ
デモンストレーション目的のために、デモコードは、Dockerを構成するスクリプトを回転させるようになります.
デモの完全なソースが利用可能でありhttps://github.com/flomesh-io/pipy-demos/tree/main/pipy-redis-sentinel
必要条件
PIPYプロキシ、REDIS、Sentinelコンテナのスピンアップ
$ docker-compose up -d
テスト
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0db7eba4f91d sentinel "sentinel-entrypoint…" 6 seconds ago Up 6 seconds 6379/tcp, 26379/tcp redis_sentinel_3
e4a7b6b99074 sentinel "sentinel-entrypoint…" 6 seconds ago Up 6 seconds 6379/tcp, 26379/tcp redis_sentinel_2
4ec87846b1e3 naqvis/pipy-pjs:0.22.0-31 "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 6000/tcp, 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp pipy-proxy
8e81ddc5eb07 sentinel "sentinel-entrypoint…" 6 seconds ago Up 4 seconds 6379/tcp, 26379/tcp redis_sentinel_1
f1a533de6d41 redis:alpine "docker-entrypoint.s…" 8 seconds ago Up 6 seconds 6379/tcp redis-slave2
a522c208b236 redis:alpine "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 6379/tcp redis-slave1
8065dec93c3d redis:alpine "docker-entrypoint.s…" 8 seconds ago Up 7 seconds 6379/tcp redis-master
Pipyは3つのREDISコンテナ(1人のマスターと2人のスレーブ)の向こう側に標準的なRedisポートと荷天秤であるDockerホストの上でTCPポート6379を聞いています.強力な展開とRedisのための高い可用性を提供するための3つのRedis Sentinel contaners.$ redis-cli info replication | grep role
role:master
$ redis-cli info replication | grep role
role:slave
$ redis-cli info replication | grep role
role:slave
Pipy負荷分散アルゴリズムとデモスクリプトが付属して使用するように設定されてRoundRobinLoadBalancer そして、上記の出力から、Pipyがすべての構成されたREDISノードにRequordeのファッションでリクエストを送っているのを見ることができます.$ redis-cli set hello world
OK
$ redis-cli get hello
"world"
$ redis-cli set foo bar
OK
私たちは、プロキシをRolldrobinアルゴリズムを使用するように設定しましたSET
リクエストは正常に実行されます.我々が単に各々のノードに等しくリクエストを転送するために丸いビンアルゴリズムに続いたならば、我々SET
スレーブノードに到達するリクエストは以下のようにエラーに失敗しました:(error) READONLY You can't write against a read only slave.
フェイルオーバーテスト
redis-master
自動失敗をテストするコンテナ$ docker pause redis-master
Sentinelは自動的にマスターが行方不明であることを検出し、それはマスターとして推進するスレーブを選択します.ヘルスチェック中のPIPYは、マスターノードがダウンしていることを検出します.Pipy新しいマスターノードを検出し、すべてを転送しますSET
新しく昇進するコマンドmaster node
.$ redis-cli set abc 1234
OK
$ redis-cli get abc
"1234"
$ docker unpause redis-master
それは、あなたが今使用する必要がない場合は、フォールトトレラントで高利用可能なredisを設定する必要があるすべてを持っている必要がありますRedis Cluster .性能試験
我々は、Pipy、Happroxy、twemproxy、およびシングルRedisインスタンスで様々なテストを行いました.
以下は、我々のMac M 1 MAXで動いているOS 20.04.4 LTS(焦点Fossa)ARM 64で、我々のVMで実行されるテスト結果です.
Redisの前にどんなプロキシを加えても性能ペナルティを引き起こすということは明らかです、しかし、それは利益代理人が持ってくる利益を達成するために支払わなければならなかったコストです.
結論
インフラストラクチャサービスをソフトウェア構成と組み合わせることによって、REDISレプリケーションのためにRedis高可用性とどんな障害と災害に対しても最大の保護を達成することができます.Properyのインフラストラクチャの設定とデザインでは、異なるアベイラビリティゾーンを使用して、マスターとスレーブのREDISレプリケーションのための高い可用性を達成することができます.Redis SentinelはマスターからスレーブへのREDISレプリケーションのフェイルオーバを監視し、実行します.
Pipy はopen-source , 非常に高速で、エッジルータ、ロードバランシング&プロキシ(フォワード/リバース)、APIゲートウェイ、スタティックHTTPサーバ、サービスメッシュサイドカー、および他の多くのアプリケーションに至るまで様々な使用ケースで使用することができます軽量ネットワークトラフィックプロセッサ.Pipyは活発な開発において、フルタイムのコミットメントと誘因によって維持されます.
Reference
この問題について(ピピ+ redis +センチネル=高利用レッド), 我々は、より多くの情報をここで見つけました https://dev.to/flomesh/pipy-redis-sentinel-high-available-redis-2p18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol