Documentation Home
MySQL Shell 8.0
Download this Manual
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


MySQL Shell 8.0  /  ...  /  メタデータのタグ付け

このページは機械翻訳したものです。

6.2.9 メタデータのタグ付け

バージョン 8.0.21 から、構成可能なタグフレームワークを使用して、クラスタまたは ReplicaSet のメタデータを追加情報でマークできるようになりました。 タグを使用すると、カスタムキーと値のペアをクラスタ、ReplicaSet またはインスタンスに関連付けることができます。 タグは MySQL Router での使用のために予約されており、互換性のある MySQL Router でアプリケーションからのインスタンスの非表示をサポートできます。 次のタグは、この目的で予約されています:

  • _hidden は、クライアントアプリケーションで使用可能な宛先のリストからインスタンスを除外するように MySQL Router に指示

  • _disconnect_existing_sessions_when_hidden は、非表示とマークされたインスタンスから既存の接続を切断するようルーターに指示

詳細は、ルーティングからのインスタンスの削除を参照してください。

また、タグフレームワークはユーザーが構成できます。 カスタムタグは任意の ASCII 文字で構成でき、クラスタ、ReplicaSets またはその特定のインスタンスに関連付けることができるキーと値のペアのディクショナリとして機能する namespace を提供します。 タグ値には任意の JSON 値を指定できます。 これにより、メタデータの上部に独自の属性を追加できます。

タグの表示

Cluster.options() 操作では、個々のクラスタインスタンスおよびクラスタ自体に割り当てられたタグに関する情報が表示されます。 たとえば、myCluster に割り当てられた InnoDB クラスタ では、次のように表示されます:

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": [
                {
                    "option": "location:",
                    "value": "US East"
                }
            ]
        }
    }
}

このクラスタには、値 US East を持つ location という名前のグローバルタグがあり、インスタンス ic-1 にタグが付けられています。

クラスタインスタンスでのタグの設定

インスタンスレベルでタグを設定できます。これにより、たとえば、インスタンスを使用不可としてマークして、アプリケーションおよびルーターでオフラインとして処理できます。 Cluster.setInstanceOption(instance, option, value) 操作を使用して、インスタンスのタグの値を設定します。 instance 引数は、ターゲットインスタンスへの接続文字列です。 option 引数は、namespace:option 形式の文字列である必要があります。 value パラメータは、指定した namespaceoption に割り当てる必要がある値です。 値が null の場合、option は指定された namespace から削除されます。 クラスタに属するインスタンスの場合、setInstanceOption() 操作は tag ネームスペースのみを受け入れます。 その他のネームスペースは ArgumentError になります。

たとえば、myCluster インスタンス ic-1 でタグ testtrue に設定するには、次のように発行します:

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 パラメータは、指定した namespaceoption に割り当てられる値です。 値が 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": [],
            "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 という名前のカスタムタグを設定できます。