本稿では、TDSQL-C for MySQLデータベースプロキシの瞬断防止機能についてご紹介します。
背景情報
データベースインスタンスは運用保守プロセス中に、必要に応じて常に調整を行います。例:構成変更、計画内HA切り替え、計画内再起動など。これらの操作はユーザーセッションを中断し、接続の瞬断や新規接続の一時的な失敗などの問題を引き起こす可能性があります。TDSQL-C for MySQLデータベースプロキシは瞬断防止機能を提供し、データベースインスタンスが損失のある切り替えや移行を行う際に、損失のないアプリケーション継続性を実現し、接続とトランザクションの中断を回避します。
実装原理
瞬断防止機能は、TDSQL-C for MySQLのsession track機能を使用しています。計画内の損失のある動作を感知すると、データベースプロキシは切り替え前のマスターノードとの接続を切断し、クライアントからデータベースプロキシへの接続を切り替え後のマスターノードの接続に復元します。session track機能により、セッション関連のシステム変数、ユーザー変数、文字セットエンコーディング情報を新しいバックエンド接続に転送し、アプリケーション側での損失のない切り替えを実現します。
注意事項
一時テーブルを使用するステートメントの場合(一時テーブルは各セッションに関連付けられているため)、接続を復元できず、直接エラーを返します。
データベースプロキシは瞬断防止機能を備えていますが、データベースプロキシのカーネルバージョンを1.3.1以上に更新する必要があります。
瞬断防止機能は、3秒を超えるトランザクションを自動的に中止します。
接続切り替え時に、データベースプロキシがデータベースから結果パケットを受信しているが、マスターノードとスレーブノードの切り替えによりパケットの一部のみが転送された場合、瞬断防止機能は接続を継続して保つことができません。
防閃断機能の作動中にプリペアドステートメント(Prepared Statement)を使用している場合、瞬断防止機能は接続を維持できません。
性能テスト
以下に、TDSQL-C for MySQLデータベースプロキシの瞬断防止機能のパフォーマンステストについてご紹介します。
テスト環境
リージョン/アベイラビリティーゾーン:北京 - 北京7区。
クライアント:S5.8XLARGE64(スタンダードタイプS5、32コア64GB)。
クライアントOS:CentOS 8.2 64ビット。
CVMとTDSQL-C for MySQLインスタンスのネットワークタイプはどちらもVPC(プライベートネットワーク)であり、同一のサブネット内にあります。
テスト対象のTDSQL-C for MySQLインスタンス情報は以下の通りです。
インスタンスタイプ:専有型です。
インスタンスバージョン:MySQL 8.0です。
インスタンス仕様:4コア・32GB。
パラメータテンプレート:デフォルトテンプレート。
テストツール
今回のパフォーマンステストのツールはsysbenchです。sysbenchはクロスプラットフォームでマルチスレッド対応のモジュール型ベンチマークツールであり、高負荷のデータベース実行時におけるシステムの関連コアパラメータのパフォーマンスを評価するために使用されます。複雑なデータベースベンチマーク設定を回避し、データベースがインストールされていない環境でも、データベースシステムのパフォーマンスを迅速に把握することが可能です。
テスト方法
様々な運用保守操作シナリオにおいて、TDSQL-C for MySQLインスタンスの接続の瞬断防止機能による接続維持率(つまり、運用保守操作前後の接続が瞬断しなかった割合)をテストします。
テスト結果
様々な運用保守操作シナリオにおいて、TDSQL-C for MySQLインスタンスはデータベースプロキシの瞬断防止機能により100%の接続維持率を維持しました。
|
カーネルのマイナーバージョンアップグレード | 100% |
インスタンス仕様の変更 | 100% |