※このブログは2023年9月15日に公開された英語ブログ「Achieving Zero-Downtime Upgrades with TiDB」の拙訳です。
データベースの広大な世界において、ゼロダウンタイムのアップグレードと運用の継続性を確保することは依然として課題です。従来のデータベースは設計に固有の制限があるため、アップグレード中に大幅なダウンタイムが発生することがよくあります。これはリアルタイムのデータアクセスに依存するビジネスにとって、運用上の混乱を引き起こす可能性がある課題です。
TiDBはこの課題を克服するソリューションを提供する最先端の分散SQLデータベースです。TiDBは堅牢なクラウドネイティブで疎結合のアーキテクチャ上に構築されており、中断のない操作でダウンタイムなしのアップグレードを可能にする機能―オンラインローリングアップグレードを導入しています。
このブログではTiDBのユニークで使いやすいアップグレードの仕組みを実践的なデモを交えて説明します。
TiDBのゼロダウンタイムアップグレードの複雑さ
従来のデータベースでは多くの場合、時間のかかるアップグレードプロセスのためにすべての操作を凍結する「停止して待機する」手法が使用されます。対照的に、TiDBはオンラインのローリングアップグレード戦略を使用します。このアプローチではコンポーネントを特定の順序でアップグレードすることで、ダウンタイムのないアップグレードが保証されます。
- Placement Driver (PD) サーバー
- TiKVサーバー
- TiDBサーバー
各サーバーは一度に1台ずつアップグレードされ、他のサーバーが受信負荷をシームレスに処理できるようになり、スムーズで中断のないアップグレード体験が実現します。
各主要コンポーネントがプロセスにどのように寄与するかを詳しく見てみましょう。
図1. 自動アップグレードのアーキテクチャ
コンポーネント | 役割 | 自動アップグレードの仕組み |
Placement Driver (PD) サーバー | PDサーバーはクラスタマネージャーとして機能し、メタデータ、スケジューリング、および負荷分散を管理します。 | アップグレード中、各PDサーバーは一度に1つずつアップグレードされます。PDが現在のリーダーである場合、リーダーシップが最初に転送され、進行中のトランザクションやクライアント接続に影響を与えることなく、アクティブなTSO要求が短時間一時停止するだけで済みます。 |
TiKVサーバー | TiKVはデータの保存と取得を担当する分散型トランザクションキーバリューストレージ層です。 | TiKVサーバーは一度に1つずつアップグレードされます。アップグレードする前に、各リージョンのリーダーが別の TiKVサーバーに転送されるため、進行中の処理が中断されません。 |
TiDBサーバー (TiProxyによる促進) | TiDBはSQLクエリ処理、セッションの維持、およびトランザクションの処理を担当するステートレスSQLサーバーです。 | TiProxyはネットワークロードバランサーとSQLレイヤーの間に配置することにより、TiDBサーバーのスムーズなアップグレードを支援します。アップグレード中にクライアントセッションを他のTiDBサーバーに移行するため、クライアントアプリケーションの中断がゼロになります。 |
このアップグレードの仕組みにより、アップグレードの各段階でクライアントはダウンタイムがゼロになり、何も変更されていないかのようにデータベースと対話し続けることが保証されます。TiDBの世界ではアップグレードは中断ではなくシームレスな移行です。アップグレードの仕組みの動作の詳細については「TiProxyを使用したサーバーレスインフラストラクチャでのデータベース接続の維持」を参照してください。
TiDBのゼロダウンタイムアップグレードのハンズオンデモンストレーション
TiDBのゼロダウンタイムアップグレード機能を具体的に示すために、セルフホストしたTiDBクラスタによる実際のデモンストレーションを見てみましょう。フルマネージドTiDB Cloudはこれらの機能をすぐに利用できるように提供されていますが、セルフホスト環境ではアップグレードプロセスをより詳細に調査できます。
デモはAWS上で実施しました。手元で実行できるように詳細なスクリプト、プログラム、CloudFormationテンプレート、ワークフローを含むステップバイステップのガイドが提供されています。他のクラウドベースのデモンストレーション実装で自由に改良または再現してください。このセクションではアップグレードプロセスを通じての観察のみに焦点を当てます。
ベストプラクティスと推奨事項
主な焦点はアップグレード中のゼロダウンタイムをデモすることですが、TiDBのアーキテクチャ設計によりプロアクティブなスケーリングも可能になります。これはワークロードが並列処理に大きく依存している場合に特に便利です。オンラインアップグレードについては次の方法をお勧めします。
- アップグレード前:TiDBサーバーインスタンスを前もってスケールアウトして、スムーズなローリングアップグレードを確保します。このスケーリングはワークロード要件に応じてTiKVサーバーインスタンスにも適用できます。
- アップグレード後:TiDBを使用するとスケールインできるため、運用コストを効果的に節約できます。スケーリングは手動で管理することもTiDBの自動スケーリングソリューションを通じて管理することもできます。
アップグレード前の観測
デモ用に3つのターミナルウィンドウを用意しました。
図2. ターミナルの用意
- 上部のターミナル:TiProxyサービスを実行しています。
- 中央のターミナル:4つのアクティブなデータベース接続を持つサンプルアプリケーションを表示します。これらの接続はネットワークロードバランサーとTiProxyサービスを介してルーティングされ、一定の頻度でデータベースにデータを挿入します。
- 下部のターミナル:サンプルアプリケーションによって挿入されたイベントをクエリし、各TiDBサーバーによって処理された挿入リクエストの数を表示します。
ご覧のとおり、2つのTiDBサーバーがそれぞれ約170個のイベントをアクティブに処理しています。同じ数の接続を受信し、同じ数のリクエストを処理しています。ここでは高可用性とスムーズなアップグレードの両方のために2つのTiDBを使用していることに注意してください。
中央のターミナルと下部のターミナルは合わせてアプリケーションのワークロードを表し、1つは書き込み用、もう1つは読み取り用です。
アップグレードする前にAWSコンソールでTiProxyのステータスを確認しました。
図3. AWSコンソールのTiProxyステータス
また、現在のTiDBバージョンはv6.5.1であることが確認できました。対象にするアップグレードバージョンはv6.5.2です。
図4. クラスターの初期状態
アップグレードのプロセス
バージョン6.5.2へのアップグレードは、次のコマンドを実行するだけで簡単に開始できます。
$ tiup cluster upgrade tidb-demo v6.5.2 --yes
さまざまなコンポーネントがどのように順次アップグレードされるかを次に示します。
Placement Driver (PD) サーバー:サンプルアプリケーションを中断することなく1つずつアップグレードされます。
図5. PDのアップグレードプロセス
TiKVサーバー:各TiKVノードは順次アップグレードされました。各リージョンのリーダーの役割はアップグレードを続行する前に別のサーバーに転送されました。ここでも中断は観察されませんでした。
図6. TiKVのアップグレードプロセス
TiDBサーバー:ここではTiProxyが重要な役割を果たしました。各TiDBサーバーをアップグレードする前に、TiProxyはアクティブなセッションを別のTiDBサーバーに移し、中断のないサービスを確保しました。たとえばIP 10.90.1.216のTiDBサーバーをアップグレードする前に、TiProxyはホストされているセッションをサーバー10.90.3.163に移行しました。
図7. TiDBのアップグレードプロセス
アップグレードプロセス全体を通してサンプルプログラムの4つのセッションはアクティブなままであり、クライアントはアップグレードプロセスに気付きませんでした。
結論
アップグレードプロセスはクライアント側の介入を必要とせずにシームレスに完了しました。これはTiDBで約束しているダウンタイムゼロのアップグレードに応えています。TiDBのクラウドネイティブアーキテクチャは、これらの懸念を軽減することを目的としています。オンラインローリングアップグレード機能は、真のクラウドネイティブで疎結合のアーキテクチャを実現し、あらゆる規模の組織に安心感と優れた運用を提供することを証明しています。
さらに、フルマネージドのクラウドDBaaSを好むユーザーにはTiDB DedicatedおよびTiDB Serverlessがこれらすべての機能をすぐに提供します。DBaaSの選択肢によりプロビジョニング、アップグレード、拡張などの運用上の懸念が解消され、企業はコアコンピテンシーに集中しやすくなります。
TiDBを体験するには、コミュニティエディションまたはTiDB Serverlessをお試しください。日本語ドキュメントのTiDBクイックスタートガイド、またはTiDB Cloudワークショップガイドのご利用をお勧めします。ご不明な点などございましたら、お問い合わせフォームよりご連絡ください。 また、GitHubにて問題を報告することもできます。
TiDB Cloud Dedicated
TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。
TiDB Cloud Serverless
TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。