ゼロのダウンタイムでRedisの新しいバージョンにどのようにアップグレードしますか? Redisスレーブは読み取り専用であるため、マスターを停止する必要があり、DBのリロードを待っている間、サイトは45秒以上読み取り専用になるようです。
これを回避する方法はありますか?
ノードをオフラインにするとき、SLAVEOFコマンドを使用してスレーブをマスターにプロモートし、オンラインに戻すとスレーブとして設定し、オンラインノードからすべてのデータをコピーします。
また、クライアントが変更/欠落したマスターノードを適切に処理できることを確認する必要があります。
本当に空想を得たい場合は、マスターへの書き込みエラーを検出した場合、スレーブを昇格するようにクライアントを設定できます。
Redisチームにはこれに関する非常に優れたドキュメントがあります
コアステップ:
完全なドキュメント:
これを行うためにRedis Sentinelを使用できます。センチネルは自動的にスレーブを新しいマスターとして昇格させます。詳細はこちらをご覧ください http://redis.io/topics/sentinel 。
Sentinelはredisサーバーの管理に使用されるシステムであり、redisマスターとスレーブを継続的に監視します。マスターがダウンすると、スレーブをマスターに自動的に昇格させます。古いマスターが起動すると、新しいマスターのスレーブとして作成されます。
ここでは、ダウンタイムがないか、設定ファイルの手動設定が必要です。上記のリンクにアクセスして、Redisサーバーのセンチネルを構成する方法を確認できます。
スレーブに書き込むには、次の設定を確認して設定する必要がある場合があります。 (「デフォルトでは、Redis 2.6はスレーブは読み取り専用です」)
redis-cli config set slave-read-only no
-例
-bash-4.1$ redis-cli info
Server
redis_version:2.6.9
-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK
-bash-4.1$ redis-cli set temp 42
(error) READONLY You can't write against a read only slave.
-bash-4.1$ redis-cli slaveof no one
OK
-bash-4.1$ redis-cli set temp 42
OK
-bash-4.1$ redis-cli get temp
"42"
-bash-4.1$ redis-cli config set slave-read-only no
OK
-bash-4.1$ redis-cli slaveof admin2.mypersonalsite.com 6379
OK
-bash-4.1$ redis-cli set temp 42
OK
-bash-4.1$ redis-cli get temp
"42"