現在、スレーブなしで 60G RAM を搭載した EC2 マシンで redis を使用していますが、データが大きくなると、より多くのメモリが必要になります。
2 台の 60G マシンに移行し、既存のデータを 2 台に分割することを考えていました。
RDB ファイルを分割するツールはありますか? このために特別に設計されたものは見つかりませんでした。
現在、スレーブなしで 60G RAM を搭載した EC2 マシンで redis を使用していますが、データが大きくなると、より多くのメモリが必要になります。
2 台の 60G マシンに移行し、既存のデータを 2 台に分割することを考えていました。
RDB ファイルを分割するツールはありますか? このために特別に設計されたものは見つかりませんでした。
データを分割したい場合は、キーを分割する方法が必要になるため、一部のキーはサーバー A から書き込み/読み取りを行い、その他のキーはサーバー B から書き込み/読み取りを行います。
RDB ファイルを分割する方法はありませんが、目的を達成するためにできることがあります。
最初にできることは、2 番目のサーバーで redis インスタンスを開始し、それが現在のサーバーのスレーブであると言いますが、param slave-read-only を false に設定します。これにより、スレーブがマスターからすべての redis データを同期して読み取るようになります。これまでのところ、すべてのデータを持つスレーブしかありませんが、ここで興味深いことを行います。
次に、シャーディング戦略を決定する必要があります。一部の redis クライアントはこれを行います。たとえば、Ruby の公式クライアントは、設定した場合の処理方法を知っています。キーが A と B に分割されるようにクライアントを構成する必要があります (または、代わりに temproxy を使用して、クライアントが別のサーバーを認識せず、temproxy が処理するようにします)。
クライアントを構成したら、新しいクライアントを本番環境にデプロイし、すぐにスレーブをスレーブではなく構成する必要があります。これは、スレーブ サーバーで CONFIG コマンドを使用して直接行うことができます (CONFIG REWRITE を使用して構成を永続化することを忘れないでください)。または、スレーブの構成ファイルを変更して再起動することもできます。スレーブはスレーブ読み取り専用 false として構成されているため、スレーブ モードでも書き込みを受け入れます。これは、設定を redis-cli から直接変更すると、再起動せずにスレーブからシャードされたスタンドアロンの redis に変更できることを意味します。これは非常にクールだと思います。
一度シャードすると、MULTI コマンドや LUA スクリプトを使用する際には注意が必要になることに注意してください。temproxy を使用している場合、これらのコマンドは使用できませんが、クライアント側でシャーディングしている場合は、MULTI または LUA を引き続き使用できます。関連するすべてのキーが同じサーバーにとどまるシャーディングメカニズムを使用するように注意してください.