3

Redisのマスターが1人います。そしてそのマスターの2人の奴隷。スレーブはWebサーバーとしても使用されます。PHPセッションにはRedisを使用しています。ラウンドロビンDNSを使用して負荷分散を行っています。つまり、「ランダムな」サーバーでリクエストがヒットすることを意味します。

ユーザーエクスペリエンスを損なわないようにPHPセッションなどを構成する方法。たとえば、10秒ごとにredisのレプリケーション期間があります。ユーザーログインとセッションが作成されました。数秒後、ユーザーは新しいページを要求し、他のサーバーにアクセスします。しかし、そのサーバーでは、Redisはまだ複製されていません。

この問題でデータが重要な場合、この場合はどうすればよいですか?また、redisには重要ではないデータがあるため、レプリケーション期間を非常に短い期間に設定して、マスターに負荷をかけたくありません。

実際、これはRedisだけに当てはまるわけではありません。まだわかりませんが、MySQLでも同じ問題が発生する可能性があります。

4

1 に答える 1

4

たとえば、10秒ごとにredisのレプリケーション期間があります

設定を参照していると思いますrepl-ping-slave-period。これは、リンクがアップしていることを確認するためにマスターからスレーブにpingを実行する時間間隔です。

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

これはローカルで確認できます。telnetセッションを開き、localhost 6379(またはマスターがいる場所)に接続します。を入力しsyncます。マスターは最初にダンプファイルを送信し、次にマスターのデータを変更したときにコマンドを送信します。また、10秒ごとにpingが表示されます。

ユーザーエクスペリエンスを損なわないようにPHPセッションなどを構成するにはどうすればよいですか?

Redisマスターとスレーブ専用のサーバーを用意するのが最善です。WebサーバーがインストールされているマシンにRedisをインストールしないでください。

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

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

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

于 2012-04-24T12:46:49.640 に答える