2012-04-24 6 views
3

Redisには1人のマスターがいます。そして、その奴隷の2人の奴隷。スレーブはWebServerとしても使用されます。私たちはRedisをPHPセッションに使用しています。ラウンドロビンDNSを使用してロードバランシングを行っています。つまり、「ランダム」サーバーでヒットをリクエストすることを意味します。複製を使用するとブレークを避ける - Redis

どのように私はPHPのセッションのようなユーザーエクスペリエンスを壊さないように構成する必要があります。たとえば、私は10秒ごとに赤色の複製期間を持っています。ユーザーログインとセッションが作成されました。数秒後、ユーザーは新しいページを要求し、他のサーバーでヒットします。しかし、そのサーバーでは、Redisはまだ複製されていません。

この場合、データが重大な場合はどうすればいいですか?また、重要ではないデータもあるので、複製期間を非常に短くしてマスターに負荷をかけたくありません。

実際、これはRedisにのみ適用されません。私はまだ分かりません。多分、MySQLと同じ問題があります。例えば

答えて

4

私は私はあなたが設定repl-ping-slave-periodを参照していると仮定しRedisのための複製期間、各10秒

を持っている - それはにマスタからスレーブへのpingの時間間隔ですリンクがアップしていることを確認してください。

Redisには複製期間がありません。マスターはできるだけ早くスレーブにコマンドを送信します。スレーブはまだ遅れることがありますが、この遅れは指定した10秒の設定のためではありません。

これはローカルで確認できます。 telnetセッションを開き、localhost 6379に接続します(またはマスターがどこにいても)。 syncと入力します。マスターは、最初にダンプ・ファイルを送信してから、マスター上のデータを変更する際にコマンドを送信します。 10秒ごとにpingが表示されます。私は、ユーザーエクスペリエンスを壊さないためにPHPのセッションのようなものを設定する必要がありますどのように

Redisマスターとスレーブ専用のサーバーがあるのが最善です。あなたのウェブサーバを持つマシンにRedisをインストールしないでください。

すべての3つのWebサーバーは、Redisマスターに直接接続する必要があります。何らかの理由でマスターがダウンした場合、ウェブサーバーはスレーブに切り替える必要があります。

どのようにマスターからスレーブに切り替えるのですか?今のところ、手動​​で行う必要があります。サルバトーレはこの問題を解決するRedis-Sentinelについて話してきましたが、その解決策は今日存在しません。

複数の人がフェールオーバーを自動化するソリューションを実装していますが、そのような小さなセットアップでは、スクリプトを監視して手動でフェールオーバーを行うことをお勧めします。

関連する問題