さまざまなクライアントにサービスを提供する数百のデータベースを備えた3ノードのガレラクラスターがあります。
私は、レプリケーションとフォールオーバーを処理する簡単な方法としてガレラのみを使用しています。私は実際に一度に複数のマスターを使用していません。
各データベースのいくつかのテーブルでかなり高価なALTERを実行する必要があります。通常、各データベースでアップグレードスクリプトを1つずつ実行し、各サイトを一度に1つずつオフにするスクリプトがあります。
しかし、このガレラクラスターでは、DDLが遅いと、実行対象のデータベースだけでなく、すべてのデータベースが完全にロックされます。基本的には、アップグレードを実行する必要があるときはいつでも、全員のアップグレードを実行するのにかかる時間中、全員がオフラインになることを意味します。
wsrep_OSU_method があることは知っていますが、これをRSUに変更すると、それ自体に問題があり、役に立たないと思います。
ロックを無効にする方法はありますか?または、少なくともサーバーレベルのロックではなくデータベースレベルのロックにしますか?
クエリの実行中にクラスター内の他のノードを無効にした場合はどうなりますか?これでもグローバルロックが発生しますか?私が言ったように、私は実際には複数のマスターを使用しないので、この場合、他のノードを数分間オフラインにしておくことは問題ありません(通常の自動再結合プロセスがそれらを戻したときに発生する場合)。
あなたは運がいいです! Perconaは pt-online-schema-change
まさにこの種の状況のために。
pt-online-schema-changeは、MySQLが内部でテーブルを変更する方法をエミュレートしますが、変更したいテーブルのコピーで機能します。これは、元のテーブルがロックされておらず、クライアントがそのテーブル内のデータの読み取りと変更を続行できることを意味します。
pt-online-schema-changeは、変更するテーブルの空のコピーを作成し、必要に応じて変更してから、元のテーブルから新しいテーブルに行をコピーすることで機能します。コピーが完了すると、元のテーブルから離れて新しいテーブルに置き換えられます。デフォルトでは、元のテーブルも削除されます。
Perconaによって作成されていますが、主要なMySQLバリアントのいずれでも機能します。