問題タブ [redis-sentinel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
redis - Redis サービスは毎日同じ時間に接続を失います
実稼働サーバーでは、Windows で Redis (バージョン 2.8) を使用しています。次の「マスタースレーブ」構成があります。
- 別々のサーバーに 3 つのサービス (1 つのマスターと 2 つのスレーブ)
- 各サーバーに 3 つのセンチネル
大量の読み込みと大きなサイズのデータがなく、レプリケーションが必要に応じて機能するまで。しかし、私たちは毎日奇妙な行動をしています。Redis サービス ログには、次のように表示されます。
サーバーの IP:
---.--.--.1
---.--.--.2
---.--.--.3
他の2つのサーバーで同じログを記録しています。代わりに
記録された
次のセンチネル ログ:
これは、1 日の初めに 1 日に 1 回のみ発生しますが、特定の固定時間 (00:12:00 / 00:15:00 / 00:17:00 などに開始できます) では発生しません。redis-sentinel 構成に関しては、これ
redis-servers 構成では、実際にはほとんどデフォルト構成を使用します (「maxheap」と「maxmemory」を変更しただけです)。
この場合、レプリケーション タイムアウト (デフォルトでは repl-timeout = 60 秒) とクライアント バッファー制限 ("client-output-buffer-limit") が不十分である可能性があることがわかりました。しかし、これは私たちのケースではありません。なぜなら、レプリケーションが非常に高速 (約 1 秒) で、データのサイズが小さくなるまでです。また、この問題の発生時にサーバー (ポート) への物理的な接続を確認しました -> 接続は常に良好です...
では、この通常の切断された接続について誰が考え、理由もなくフェイルオーバー プロセスを開始するのでしょうか??
redis - オープン ソースの Redis クラスターと Redis ラボのエンタープライズ クラスターの違いは何ですか?
Redis を一元化された高可用性キャッシュとして使用することを計画しているため、Redis Labs Enterprise Cluster と、Redis を temproxy および Sentinel と共に使用する自家製のクラスターのようなセットアップを調べました。RELC について調査しているときに、次のリンクを見つけました。
つまり、RLEC は、スタンドアロンの Redis クライアントと Redis クラスター クライアントの両方の標準の Redis クライアントで動作します。
オープン ソース Redis クラスターとは正確には何ですか? また、どのように使用できますか? これはスタンドアロンの Redis とは異なりますか? オープン ソース バージョンが利用可能であるのに、サポートのためだけに RELC を使用する必要があるのはなぜですか? 違いを詳しく説明しているソースが見つからなかったので、これらのソリューションのいずれかを使用したことがある場合は、どちらを選択するのかを説明してください.
linux - 監視目的の Redis Sentinel? 通知スクリプトの起動回数が多すぎる
私の目的のために、実行中の redis のインスタンスを 1 つと、redis センチネルを 1 つだけ必要です。Redis 3.0.6 を実行しています。Mysentinel.conf
は、quorum が 1 で、通知スクリプト行がコメント解除されていることを除いて、すべてデフォルトです: sentinel notificication-script mymaster /etc/redis/notify_me.sh
. 内部notify_me.sh
では、テスト目的でprint "HEY SOMETHING IS UP WITH REDIS"
.
監視目的のみに redis センチネルを使用したい。後で、redis がダウンしたときにメール/テキスト メッセージを送信する Python スクリプトに何かを記述します。ただし、現在のように、あまりにも頻繁に発砲しています。センチネルがredisが死んだと判断したときに、メッセージを1回だけ受け取りたいです。今すぐ開始すると、ステートメントは最初に1回出力され、次にfailover-state-select-slaveの後にさらに数回出力されます
最初に印刷したくありません。サーバーが停止したときに一度だけ印刷したいので、後でメール/テキストを1つだけ受け取ります。誰でも、私ができることについて何かヒントはありますか?ありがとう!
c# - C# から Redis Sentinel を使用する
2 つのスレーブと 3 つのセンチネルを備えたマスター/スレーブ構成を使用しています。コマンドラインでコマンドを試すと、すべて問題ありません。しかし、C# 用に構成する際にいくつか問題があります。StackExchange.Redis ライブラリを使用しています。しかし、マスターからキーを取得/設定するために何をすべきかわかりません。手動でマスターを見つけてからキーを取得または設定する必要がありますか?それとも自律的に行う必要がありますか? それを行う最良の方法は何ですか?キーを取得/設定するたびに、誰がマスターかを確認する必要がありますか? 今のところ、私はこれだけを行い、他のコードはマスターが 1 つしかないまま残しました。
ここで、ポート 26379 に 3 つのセンチネルの 1 つがあります。申し訳ありませんが、これを C# で使用する方法が少しわかりません。
redis - Redis Sentinel マスターがすぐにスレーブにダウングレードされない
3 つの Redis インスタンス (1 つのマスターと 2 つのスレーブ) と 3 つの Sentinel インスタンスを含むアーキテクチャがあります。その前にHaProxyがあります。マスター Redis インスタンスがダウンするまで、すべてが正常に機能します。新しいマスターは、Sentinel によって適切に選択されます。ただし、古いマスター (現在はダウンしている) は、スレーブになるように再構成されていません。その結果、そのインスタンスが再び起動すると、短時間 (約 11 秒) の間 2 つのマスターが存在します。その後、起動されたインスタンスは適切にスレーブにダウングレードされます。
マスターがダウンすると、すぐにスレーブにダウングレードされるように機能するべきではありませんか? それを持って、再起したら即奴隷だ。(Redis 2.8 以降?) その CONFIG REWRITE 機能があるため、Redis インスタンスがダウンしているときに構成を変更できないことを私は知っています。
しばらくの間 2 つのマスターを持つことは私にとって問題です。なぜなら、HaProxy は 1 つのマスター Redis にリクエストを送信する代わりに、その短い期間、これら 2 つのマスター間の負荷分散を行うからです。
失敗したマスターをすぐにスレーブにダウングレードする方法はありますか?
明らかに、Sentinel タイムアウトを変更しました。
マスターがダウンした後の Sentinel および Redis インスタンスからのいくつかのログを次に示します。
センチネル
レディス
docker - Redis センチネル Docker セットアップ
基本的に、単一の Redis-sentinel docker インスタンスをセットアップしようとしていて、アプリ コンテナーから呼び出しを行いたいと考えています。私が実行している問題はこれです - redis-sentinel コンテナーはアプリコンテナーにリンクされています。
そのため、最初にアプリはセンチネル プロセスに redis マスターについて問い合わせます。センチネルは、それが「127.0.0.1」であると言います。ただし、アプリ コンテナーは、それがコンテナーに対してローカルであると想定しています。これは、sentinel プロセスの開始時に渡される Announce-ip/announce-port パラメータで克服できます。ただし、問題はこれです-
redis-sentinel コンテナーは、リンクが確立される前に起動を試みます。そのため、センチネル プロセスがネットワーク インターフェイスを起動している間でも、リンク IP は使用できません。
私が考えることができる 1 つの解決策は、ネットワーク インターフェイスが確立されるまでビジー状態で待機することです。したがって、問題は「ソース コンテナが新しく確立されたネットワーク インターフェースをどのように検出できるか? ソース コンテナにさまざまなリンクを検出するための docker セットがあるか?」ということになります。
リンクはすべて docker-compose ファイルで管理されます。
他に簡単な解決策がある場合は、それも試してみてください。
ruby - kubernetes でセンチネルを使用して Redis クラスターに接続する
こちらのガイドを使用して、パスワードで保護された redis クラスターを正常にセットアップしました。
http://kubernetes.io/v1.1/examples/redis/
を使用してセンチネルに問題redis-cli
なく接続できますが、センチネルを公開しても、redis マスター/スレーブに接続できません。
Ruby と次の接続文字列を使用しています。これは間違っていますか?
私が得るエラーは次のとおりです。
docker - 別の docker マシンで docker を使用して redis/sentinel レプリケーション/監視をセットアップする方法は?
私は3台の別々のマシンを持っているとしましょう:
docker-compose
これら 3 台のマシンのいずれかにマスターまたはスレーブを簡単にデプロイするために使用したいと考えています。今のところ、私の docker-compose.yml ファイルは次のようになります。
docker-compose.yml ファイルを機能させるには、どのように変更すればよいですか? 最後に、たとえば次のようなコンテナを開始できるようにしたいと思います。
redis + docker + sentinel セットアップのリポジトリをいくつか見ましたが、それらはすべて同じ docker ホストですべてのインスタンスを実行しています...