6.2 MySQL InnoDB クラスタ
6.2.9 メタデータのタグ付け
メタデータのタグ付け
mysql-js> \c clusterAdmin@localhost:3306 mysql-js> dba.createCluster("myCluster")
したがって、メタデータに格納されるホスト名の値は 「localhost」 であり、そのため、シードで report_host を 「localhost」 に設定する必要があります。
3. シードインスタンスのみを使用してクラスタを再起動します。 対話型プロンプトでは、残りのインスタンス はクラスタに追加されません。
4.
Cluster.rescan() を使用して、他のインスタンスをクラスタに追加します。
5. クラスタからシードインスタンスを削除
6. シードインスタンスで mysqld を停止し、強制 report_host 設定を削除するか (ステップ 2)、メタデータ値に以 前格納されていた値で置き換えます。
7. シードインスタンスを再起動し、Cluster.addInstance() を使用してクラスタに追加しなおします
これにより、クラスタを最新の MySQL Shell バージョンにスムーズかつ完全にアップグレードできます。 ユース ケースに依存する別の可能性は、クラスタの作成時にメタデータスキーマに登録されているものと一致するよう に、すべてのクラスタメンバーで report_host の値を設定することです。
メタデータのタグ付け
} } }
このクラスタには、値 US East を持つ location という名前のグローバルタグがあり、インスタンス ic-1 にタグが 付けられています。
クラスタインスタンスでのタグの設定
インスタンスレベルでタグを設定できます。これにより、たとえば、インスタンスを使用不可としてマークし て、アプリケーションおよびルーターでオフラインとして処理できます。 Cluster.setInstanceOption(instance,
option, value) 操作を使用して、インスタンスのタグの値を設定します。 instance 引数は、ターゲットインスタ
ンスへの接続文字列です。 option 引数は、namespace:option 形式の文字列である必要があります。 value パラ メータは、指定した namespace の option に割り当てる必要がある値です。 値が null の場合、option は指定され た namespace から削除されます。 クラスタに属するインスタンスの場合、setInstanceOption() 操作は tag ネー ムスペースのみを受け入れます。 その他のネームスペースは ArgumentError になります。たとえば、myCluster インスタンス ic-1 でタグ test を true に設定するには、次のように発行します:
mysql-js> myCluster.setInstanceOption(icadmin@ic-1:3306, "tag:test", true);
ルーティングからのインスタンスの削除
AdminAPI と MySQL Router が連携して動作している場合、インスタンスを非表示としてマークし、ルーティン グから削除できる特定のタグがサポートされます。次に、MySQL Router は、このようなタグ付けされたインス タンスをルーティング先候補リストから除外します。 これにより、サーバーインスタンスを安全にオフライン にできるため、たとえばサーバーのアップグレードや構成の変更などのメンテナンスタスクの実行中に、アプリ ケーションおよび MySQL Router でサーバーインスタンスを無視できます。
_hidden タグが true に設定されている場合、クライアントアプリケーションで使用可能な宛先のリストからイン
スタンスを除外するように MySQL Router に指示します。 インスタンスはオンラインのままですが、新しい着信 接続のためにルーティングされません。 _disconnect_existing_sessions_when_hidden タグは、インスタンスへの 既存の接続を閉じる方法を制御します。 このタグは true とみなされ、_hidden タグが true の場合、InnoDB クラ スタ または InnoDB ReplicaSet に対してブートストラップされた MySQL Routers に対して、インスタンスから 既存の接続を切断するように指示します。 _disconnect_existing_sessions_when_hidden が false の場合、_hidden が true であれば、インスタンスへの既存のクライアント接続はクローズされません。 予約済の_hidden およ び_disconnect_existing_sessions_when_hidden タグはインスタンスに固有であり、クラスタレベルでは使用でき ません。警告
use_gr_notifications MySQL Router オプションが有効な場合、デフォルトで 60 秒に設
定されます。 つまり、タグを設定すると、MySQL Router が変更を検出するまで最大 60 秒かかります。 待機時間を短縮するには、use_gr_notifications を小さい値に変更し ます。たとえば、myCluster に割り当てられた InnoDB クラスタ の一部である ic-1 インスタンスを ルーティング先から削除するとします。 setInstanceOption() 操作を使用して、_hidden およ び_disconnect_existing_sessions_when_hidden タグを有効にします:
mysql-js> myCluster.setInstanceOption(icadmin@ic-1:3306, "tag:_hidden", true);
オプションをチェックすることで、メタデータの変更を確認できます。 たとえば、ic-1 に加えられた変更は、次 のようにオプションに表示されます:
mysql-js> myCluster.options() { "cluster": {
"name": "test1", "tags": { "ic-1:3306": [ {
"option": "_disconnect_existing_sessions_when_hidden", "value": true
}, {
"option": "_hidden", "value": true }
],
"ic-2:3306": [],
メタデータのタグ付け
"ic-3:3306": [], "global": []
} } }
MySQL Router がメタデータの変更を検出したことを確認するには、ログファイルを表示します。 ic-1 に対する 変更を検出した MySQL Router には、次のような変更が表示されます:
2020-07-03 16:32:16 metadata_cache INFO [7fa9d164c700] Potential changes detected in cluster 'testCluster' after metadata refresh 2020-07-03 16:32:16 metadata_cache INFO [7fa9d164c700] view_id = 4, (3 members)
2020-07-03 16:32:16 metadata_cache INFO [7fa9d164c700] ic-1:3306 / 33060 - mode=RW 2020-07-03 16:32:16 metadata_cache INFO [7fa9d164c700] ic-1:3306 / 33060 - mode=RO
2020-07-03 16:32:16 metadata_cache INFO [7fa9d164c700] ic-1:3306 / 33060 - mode=RO hidden=yes disconnect_when_hidden=yes
2020-07-03 16:32:16 routing INFO [7fa9d164c700] Routing routing:testCluster_x_ro listening on 64470 got request to disconnect invalid connections: metadata change 2020-07-03 16:32:16 routing INFO [7fa9d164c700] Routing routing:testCluster_x_rw listening on 64460 got request to disconnect invalid connections: metadata change 2020-07-03 16:32:16 routing INFO [7fa9d164c700] Routing routing:testCluster_rw listening on 6446 got request to disconnect invalid connections: metadata change 2020-07-03 16:32:16 routing INFO [7fa9d164c700] Routing routing:testCluster_ro listening on 6447 got request to disconnect invalid connections: metadata change
インスタンスをオンラインに戻すには、setInstanceOption() 操作を使用してタグを削除し、MySQL Router に よってインスタンスがルーティング先に自動的に追加され、アプリケーションに対してオンラインになります。
例:
mysql-js> myCluster.setInstanceOption(icadmin@ic-1:3306, "tag:_hidden", false);
オプションを再度チェックして、メタデータの変更を確認します:
mysql-js> myCluster.options() { "cluster": {
"name": "test1", "tags": { "ic-1:3306": [ {
"option": "_disconnect_existing_sessions_when_hidden", "value": true
}, {
"option": "_hidden", "value": false }
],
"ic-2:3306": [], "ic-3:3306": [], "global": []
} } }
クラスタでのタグの設定
Cluster.setOption(option, value) 操作では、クラスタ全体のネームスペースオプションの値を変更できます。
option 引数は、namespace:option 形式の文字列である必要があります。 value パラメータは、指定した namespace の option に割り当てられる値です。 値が null の場合、option は指定された namespace から削除さ
れます。 クラスタの場合、setOption() 操作は tag ネームスペースを受け入れます。 その他のネームスペースはArgumentError になります。
ヒント
クラスタレベルで設定されたタグは、インスタンスレベルで設定されたタグをオーバー ライドしません。 Cluster.setOption() を使用して、インスタンスレベルで設定されたす べてのタグを削除することはできません。
すべてのインスタンスをオンラインにする必要はなく、クラスタにクォーラムがあることのみが必要です。
myCluster に割り当てられた InnoDB クラスタ に location タグを US East に設定してタグ付けするには、次のコ
マンドを発行します:mysql-js> myCluster.setOption("tag:location", "US East") mysql-js> myCluster.options()
{ "cluster": { "name": "test1", "tags": { "ic-1:3306": [], "ic-2:3306": [],
InnoDB クラスタ のヒント
"ic-3:3306": [], "global": [ {
"option": "location:", "value": "US East"
} ] } } }
ユーザー定義タグ付け
AdminAPI では、特定のクラスタ、ReplicaSet またはインスタンスに関連付けられたキーと値のペアに情報を格 納できる tag ネームスペースがサポートされています。 tag ネームスペースの下のオプションは制約されませ ん。つまり、有効な MySQL ASCII 識別子であるかぎり、選択した情報でタグ付けできます。 名前が次の構文に 従っているかぎり、タグには任意の名前と値を使用できます: _または文字の後に英数字と_文字が続きます。
namespace オプションは、namespace:option という形式のコロン区切りの文字列です。ここで、namespace は
ネームスペースの名前、option は実際のオプション名です。 タグは、インスタンスレベル、クラスタレベルまた は ReplicaSet レベルで設定および削除できます。タグ名には、文字またはアンダースコアで始まり、オプションで英数字および_文字が続く任意の値 (^[a-zA-Z_]
[0-9a-zA-Z_]* など) を指定できます。 _のアンダースコア文字で始めることができるのは組込みタグのみです。
カスタムタグの使用方法はユーザーによって異なります。 クラスタにカスタムタグを設定して、そのタグが動作 しているリージョンをマークできます。 たとえば、クラスタ上で EMEA の値を持つ location という名前のカスタ ムタグを設定できます。