この記事は Announcing MySQL InnoDB ReplicaSet/Cluster/ClusterSet & MySQL Shell 8.0.33 の翻訳版です。

MySQL Shell 8.0.33 が先週リリースされました。 いくつかのバグ修正とは別に、セキュリティ、同時実行制御、およびパフォーマンス設定に関連する、いくつかの新しい、重要で、長く望まれていた機能があります。

パスワードレス認証(証明書ベースの認証)

AdminAPIを使用すると、高可用性または災害復旧のいずれかのために、MySQLのセットアップとメンテナンスを簡単に行うことができます。 セキュリティは非常に重要であり、InnoDBクラスターはSSL/TLSをサポートしていますが、クラスターメンバー間のグループ通信接続に限定されていました。 同様に、InnoDB ClusterSetは、クラスター間の非同期レプリケーション チャネルでSSLを有効にすることをサポートしています。 

それにもかかわらず、複製機構で証明書ベースの認証を有効にし、ReplicaSetでSSLを有効にすることはサポートされていませんでした。

MySQL Shell 8.0.33以降、MySQL InnoDB Cluster、ClusterSet、およびReplicaSetを構成して、SSL/TLS と証明書ベースの認証をデプロイのあらゆる面で完全に使用できるようになりました。 つまり、次のようになります。

  • グループ レプリケーションおよび非同期レプリケーション チャネルを暗号化します。
    • あるエンドポイントから別のエンドポイントへのレプリケーションによって開かれたすべての接続は暗号化され、(オプションで) SSL証明書の検証とIDの検証も実行されます。
    • 構成可能:
      • InnoDB クラスター (GR チャネル)         
      • InnoDB ReplicaSet (非同期チャネル)         
      • InnoDB ClusterSet (クラスター間非同期チャネル) 
  • レプリカが証明書ベースの認証を使用できるようにする      
    • 内部レプリケーション アカウントの認証では、パスワードの代わりにSSL証明書が使用され、(オプションで) ソースのIDも検証されます。 
  • AdminAPI 管理者アカウント およびMySQL ルーターアカウントのクライアントSSL証明書を使用した認証、またはパスワード有効期限ポリシーを構成するための認証

詳細については、今後のブログ投稿をお待ちください。この機能については、デプロイの例とともに詳しく説明します。

同時実行制御

複数の管理者が同時にMySQL Shellを使用する可能性は常にあります。 同じMySQL展開での同時操作は、予期しない結果やリソースの枯渇にさえ苦しむ可能性があります。 たとえば、DBAがクラスターのセカンダリメンバーを削除しているときに、別のDBAがそれを選択してスイッチオーバーで新しいプライマリにする場合です。

このようなシナリオは一般的ではありませんが、AdminAPIが改善され、InnoDBクラスター、ReplicaSet、およびClusterSetでのすべての操作の同時実行制御が含まれるようになりました。 

MySQL Locking Serviceとすべての操作の広範な分析を利用して、適切な同時実行制御を確保するために 2 種類のロックを導入しました:

  • 読み取りまたは共有ロック: 排他的操作をブロックしながら、一部の操作の同時実行を許可します。 
  • 書き込みまたは排他ロック: 現在の操作が完了するまで、他のすべての操作の実行をブロックします。

次の表はInnoDB ClusterSetコマンドのロックのタイプの一覧です:

AdminAPI Locks ClusterSet

詳細およびすべての管理操作のロックのリストについては、https://dev.mysql.com/doc/mysql-shell/8.0/en/adminapi-locking.htmlを参照してください。

Paxosシングルリーダーを有効にする

MySQLグループ レプリケーションは、データベース ステートマシンアプローチに基づいており、Paxos実装を使用します。 

デフォルトでは、Paxosはクラスターのすべてのメンバーをリーダーとして使用して動作し、シングルプライマリ モードでも動作します。MySQL Shell 8.0.33以降、作成時に単一のリーダーを使用するようにクラスターを構成できます:

cluster = dba.createCluster("myCluster", {paxosSingleLeader: true})
replica_cluster = clusterset.createReplicaCluster("myReplica", {paxosSingleLeader: true})

この構成により、特にセカンダリ メンバーに到達できない場合に、パフォーマンスと回復力が向上します。

このリリースでは、AdminAPIを使用して単一のpaxosリーダーを使用するようにクラスターを構成できるようにするだけでなく、クラスターに追加された新しいメンバーがそれに応じて自動的に構成されるようにします。

また、完全な停止からクラスターを再起動するときに別の設定に切り替えることもでき、さらに、監視コマンドにその情報が含まれます。

dba.rebootClusterFromCompleteOutage("myCluster", {paxosSingleLeader: false})

注: これは、MySQL Server 8.0.31以降のMySQL Shellによってのみ設定できます。これは、MySQL Shellがパフォーマンス スキーマ テーブルreplication_group_communication_informationのWRITE_CONSENSUS_SINGLE_LEADER_CAPABLEによって提供される情報を必要とするためです。

MySQL Enterprise Authentication Plugins

MySQL Shell には、次のクライアント認証プラグインがバンドルされるようになりました:

MySQL Shell Dump & Load

  • ダンプ ロード ユーティリティ (loadDump()) 進行状況ファイルに、インデックス作成ステータスに関する情報が含まれるようになりました。
  • AWS S3: リクエストが HTTP 400 エラーで失敗し、報告されたエラーが ExpiredToken または TokenRefreshRequired である場合は再試行します

重要なバグ修正

Bug#108905 (community), Bug#34778797

クラスターの作成時または完全な停止からの再起動時に、インスタンスがクラスターに追加または再結合されると、AdminAPIが無効になり、offline_modeが保持されました。 この変数がユーザーによって明示的に有効にされた場合、MySQL Shellによってサイレントに上書きされました。 

このリリースの時点で、offline_modeは永続化されずにグローバルに無効になり、新しい警告がCluster.statusに追加されて、この変数を有効にするリスクをユーザーに通知します。

Bug#108759 (community), Bug#34711038

メンバーをクラスターに追加するときに、auto_increment_incrementとauto_increment_offsetの値が誤って計算され、1ずれていました。 その結果、クラスターに8番目のメンバーを追加または再結合すると、新しいメンバーは正しい値で構成され、他の7つのメンバーは7メンバーのクラスターの構成を続行しました。

Bug#34837601

サーバーの SQLモード (sql_mode) で「NO_BACKSLASH_ESCAPES」を使用すると、レプリカ クラスターの作成 (ClusterSet.createReplicaCluster()) が「不正な形式の GTID SET」というエラーで失敗しました。  これは、クローン ベースのリカバリが完了した後のAdminAPI内部接続の初期化が間違っていたことが原因でした。

Bug#34324165

ClusterSet.status()によって返されるレプリカ クラスタの「globalStatus」値は、ClusterSetのプライマリ クラスタが到達不能であるが、レプリカが正常に機能していた場合、NOT_OKとして誤って報告されました。  値はOK_NOT_REPLICATINGに修正されました。これは、レプリカが正常に機能していることを正しく示していますが、プライマリクラスタがオフラインまたは到達不能であるため、複製されていません。

More Information

機能とバグ修正の完全なリストは、https://dev.mysql.com/doc/relnotes/mysql-shell/8.0/en/news-8-0-33.htmlにあります。

いつものように、私たちはコミュニティからのフィードバックを楽しみにしています。 Slack :  https://mysqlcommunity.slack.com/ の #shell および #mysql_innodb_cluster からお問い合わせいただけます。

問題や不足している機能が発生した場合は、バグレポートまたはサポートチケットでご連絡ください。

リソース: