2013-07-02 6 views
6

git commitメッセージによると、ServiceStackは最近、フェイルオーバーのサポートを追加しました。私は当初、自分のRedisインスタンスの1つを削除し、プールされたクライアントマネージャがフェイルオーバーをエレガントに処理して、代替のRedisインスタンスの1つに接続しようとしていると仮定しました。残念ながら、私のコードはちょうどバグがあり、最初のRedisインスタンスに接続できないと言います。ServiceStack PooledRedisClientManagerフェールオーバーはどのように機能しますか?

私は現在、Windowsでポート6379のマスタと6380のスレーブを持つRedis 2.6.12のインスタンスを実行しています。マスターがダウンすると自動的にスレーブをマスタに昇格するように設定されています。私は現在、このように私のクライアントマネージャをインスタンス化しています:(スレーブ用)

​​

最初の配列がされて読み書き(マスター用)、ホスト、および二番目の配列は読み取り専用ホスト。

ポート6379でマスターを終了すると、監視員はスレーブをマスターに昇格させます。今、ポート6380にフェイルオーバーする代わりにC#コードを実行しようとすると、単に "localhost:6379でredis instanceに接続できませんでした"というエラーが返されて返されます。

回避策はありますか、フェールオーバーは単に私が望むように動作しませんか?

+1

あなたは道を見つけました@Vliu – jaxxbo

+0

ほとんどの人が行った研究のほとんどから、ほとんどの人はフェールオーバーを処理するコードに頼っていません。彼らは、HAProxy @jaxxboのようなredisデータベースの上に(Linuxの)プロキシ層を使用します。 – Vliu

答えて

4

PooledRedisClientManager.FailoverToは、読み取り/書き込みホスト、読み取り専用ホスト、リセットをリセットして工場を再起動することができます。これにより、クライアントを再作成せずに素早く移行することができます。

+1

try {// redis operation} catch {PooledRedisClientManager.FailoverTo(読み書きポートとしてのスレーブポート})のように}? – Vliu

+1

それはそうする一つの方法だろう。 Redis Sentinelからの着信要求を処理する特別なサービスを設定しました。障害ノードを検出した場合、適切なスレーブをネゴシエートしてプロモートしてから、新しいアドレスとポートをWebサービスに通知します。 – TheDruidsKeeper

+0

こんにちは@TheDruidsKeeper、いくつかのサンプルであなたのアプローチを詳細に説明します。例えば、どのようなサービスを意味していますか? – wliao

関連する問題