現在人気のリレーショナル データベース (RDS) である MySQL は、クラウド ネイティブの波の中で依然として多くの課題に直面しています。クラウド ネイティブ設計原則を使用して、サンドボックス分離とコンピューティングとデータの完全な分離を通じて、低コストでスケーラブルかつ高可用性のクラウド RDS ソリューションを実装するにはどうすればよいでしょうか。 Alibaba Cloud データベース チームの Jiang Shanbiao (Meng Yu) が、クラウド ネイティブの分散型 MySQL 高可用性データベース ソリューションを紹介し、主要なテクノロジを共有し、クラウド ネイティブ シナリオにおける従来のデータベースの開発動向を簡単に分析します。 クラウド時代の到来により、従来の業界とインターネット業界の両方でビジネスが多様化し、反復が高速化しているため、全体的なデータ量が大幅に増加しています。 過去 2 年間で、Docker + Kubernetes などのテクノロジーの台頭により、誰もがビジネスをコンテナ化に移行し、チームのテクノロジーもクラウド ネイティブに向けて進化しています。初期の Kubernetes は、ステートレスで共有のないアプリケーションのデプロイメント シナリオの解決に重点を置いていました。しかし、今日のますます複雑化するアプリケーション シナリオでは、状態保存の必要性が頻繁に発生します。 Kubernetes 1.9 からは、ステートフル サービス用のリソース タイプ Statefulset が GA に入り、Kubernetes 1.14 の Local Volume や CSI などのストレージ機能も GA 段階に入りました。 Kubernetes のステートフル サービスのサポートが全面的に強化され、多くのデータ ストレージ ベースの基本ミドルウェアを Kubernetes に移行できるようになりました。 現在人気の高いオープンソースのリレーショナル データベース (RDS) である MySQL は、信頼性、使いやすさ、豊富な機能、幅広いアプリケーションという特徴を兼ね備えており、リレーショナル データベースの主な選択肢となっています。多くの注目を集めているものの、MySQL もクラウド ネイティブの波の中で多くの課題に直面しています。クラウド ネイティブ設計原則を使用して、サンドボックス分離とコンピューティングとデータの完全な分離を通じて、低コストでスケーラブルかつ高可用性のクラウド RDS ソリューションを実現するにはどうすればよいでしょうか。 この記事では、クラウドネイティブの分散型 MySQL 高可用性データベース ソリューション (以下、「SlightShift MySQL 高可用性ソリューション」と呼びます) を紹介し、クラウドネイティブ シナリオにおける従来のデータベースの開発動向を簡単に分析します。 1. 要求と課題 クラウドネイティブ シナリオで MySQL の高可用性アーキテクチャを検討する場合、主に次の課題があります。
第二の目的と重要な考慮事項 LightShift MySQL 高可用性ソリューションの目標は次のとおりです。
上記の目標に加えて、技術アーキテクチャを設計する際には、次の重要なポイントも考慮する必要があります。
3フレームデザイン この MySQL 高可用性ソリューションは、1 つのマスターと複数のスレーブのレプリケーション構造を使用します。マスター/スレーブ データ レプリケーションでは、半同期レプリケーションを使用して、データの一貫性と読み取り/書き込み効率を確保します。理論上、スレーブ データベースは無限に拡張できます。 データ エンジンの上位層に仲裁者が追加され、Raft 分散コンセンサス アルゴリズムを使用して自動リーダー選出とフェイルオーバーが実現されます。 ルーティング層は、SQL 要求プロキシとして ProxySQL を使用し、読み取りと書き込みの分離、負荷分散、および動的構成の検出を実現します。 監視とアラームに関しては、Prometheus-Operator ソリューションを使用して、MySQL 高可用性システム全体のリソース監視とアラームを実装します。 運用保守制御面では、Kubernetes Operator制御モデルを導入し、宣言型構成、クラスターステータス管理、On Demand(オンデマンド作成)を実現できるDB-Operatorを実装しています。さらに、データベース管理、テーブル管理、SQL クエリ、インデックスの変更、構成の変更、データのバックアップとリカバリなど、MySQL コンソールで基本的な MySQL 操作とメンテナンスを実行できます。 4つの主要技術 状態の永続性 コンテナ技術の誕生後、人々はすぐに、コンテナ技術を使用して「ステートレス アプリケーション」をカプセル化することが非常に便利であることに気付きました。しかし、コンテナを使用して「ステートフルアプリケーション」を実行したい場合、難易度は急激に増加します。 MySQL などのストレージベースの分散アプリケーションでは、マスターとスレーブの関係やマスターとスレーブの関係など、複数のインスタンス間に依存関係が存在することがよくあります。通常、各インスタンスはデータのコピーをローカル ディスクに保存します。インスタンスが強制終了されると、再構築されてもインスタンスとデータ間の対応が失われ、アプリケーション障害が発生します。 インスタンス間に不平等な関係があり、インスタンスが外部データに依存しているこのようなアプリケーションは、「ステートフル アプリケーション」と呼ばれます。 Kubernetes クラスターでノードのローカル ストレージ リソースを使用するには、emptyDir、hostPath、Local PV など、いくつかの方法があります。このうち、emptyDir ではデータを永続化できず、hostPath 方式ではボリュームのライフサイクルを手動で管理する必要があるため、運用と保守に大きな負担がかかります。 したがって、MySQL シナリオでは、パフォーマンスと運用および保守コストを考慮して、ローカル ストレージを使用する必要があります。今のところ、ローカル PV が唯一の選択肢です。 ローカル PV は、ビジネスで永続的に保存する必要があるデータをマシン上のディスクに保存します。リモート ストレージと同様に、Pod のデータとライフ サイクルは互いに独立しています。ビジネスポッドが削除されても、データは失われません。 同時に、リモート ストレージと比較して、ローカル ストレージはネットワーク IO オーバーヘッドを回避でき、読み取りおよび書き込みパフォーマンスも高いため、分散ファイル システムや分散データベースなどの IO 要件が高いアプリケーションはローカル ストレージに非常に適しています。 他の種類のストレージとは異なり、ローカル PV ローカル ストレージはノードに大きく依存します。つまり、ポッドをスケジュールするときは、これらのローカル PV の容量とトポロジの要件も考慮する必要があります。 ローカル PV を使用する場合、MySQL は主に、遅延バインディング メカニズムとボリューム トポロジ対応スケジューリングの 2 つの機能を使用します。遅延バインディング メカニズムでは、MySQL Pod が PVC を使用してスケジューリングを完了するまで PVC のバインディングを延期できますが、ボリューム トポロジ対応スケジューリングでは、Kubernetes スケジューラがボリュームのトポロジ制約 (このストレージ ボリュームは特定の領域またはノードでのみ使用 (アクセス) できる) を認識できるため、スケジューラは Pod をスケジュールするときにこの制限を考慮する必要があります。 さらに、MySQL が使用するローカル PV は、nodeAffinity を通じて Pod を正しいノードにスケジュールする必要があります。 以下は、Local PV を使用した MySQL の簡単な構成例を示しています。 --- 以上がLocal PVの基本的な使い方です。 MySQL では、ノードの柔軟なスケーリングも考慮する必要があり、そのためには、MySQL インスタンスのスケーリングに合わせて、基盤となるストレージも動的に構成できる必要があります。解決策は 2 つあります。 LVM マネージャーは Kubernetes クラスターに導入され、DaemonSet の形式で実行されます。各ノード上のディスクの管理、ノードのディスク容量と残り容量の報告、PV の動的な作成などを担当します。ローカル ストレージ スケジューラ スケジューリング モジュールは、ローカル ストレージを使用する Pod に適したノード (十分な容量を持つ) を選択するために導入されています。 オープンソース ソリューション OpenEBS を使用します。iSCSI は基盤となるストレージ機能を提供し、OpenEBS は iSCSI を管理します (現在は PV の ReadWriteOnce アクセス モードのみをサポートしています)。 自動マスター選択 SlightShift MySQL 高可用性アーキテクチャは、Raft の強力な一貫性プロトコルに基づいて、分散 MySQL 自動リーダー選出を実装します。 Raft はハートビートを使用してリーダー選出をトリガーします。 MySQL サーバーが起動すると、フォロワー状態になります。サーバーがリーダーまたは候補から有効な RPC を受信すると、フォロワー状態のままになり、リーダーは定期的にハートビートを送信して、自分がリーダーであることを示します。 フォロワーが選出タイムアウト内に通信を受信しない場合、リーダーの選出を開始します。 マスターを選択する手順は次のとおりです。
候補者は次の 3 つの状況で退出します。
フェイルオーバー 正常に実行されているマスター スレーブ レプリケーション環境では、フェイルオーバー モジュールがクラスターの状態を監視し、マスターに障害が発生すると自動的にフェイルオーバーをトリガーします。 フェイルオーバーの最初のステップは、自動マスター選出です。自動マスター選出のロジックについては上記で紹介しました。 2 番目のステップは、データの一貫性の保証です。デッドマスターのデータが新しいマスターに同期されることの保証を最大限にする必要があります。 マスターを新しいマスターに切り替える前に、一部のスレーブが最新のリレー ログ イベントを受信していない可能性があります。フェイルオーバー モジュールは、最新のスレーブからのさまざまなリレー ログ イベントを自動的に識別し、さまざまなイベントを他のスレーブに適用して、すべてのスレーブのデータの一貫性を確保します。 プロキシ層に関しては、ProxySQL は MySQL インスタンスの読み取り/書き込み構成をリアルタイムで検出します。 MySQL インスタンスの読み取り/書き込み構成が変更されると、ProxySQL は MySQL インスタンスの読み取り/書き込みグループ化構成を自動的に調整し、最終的にはフェイルオーバー後に読み取り/書き込み分離が正しく実行されるようにします。 LightShift MySQL 自動フェイルオーバーの手順は次のとおりです。
SlightShift MySQL は数秒でフェイルオーバーを実現できます。ホスト障害の検出には 5 ~ 10 秒、差分リレー ログの適用には 5 ~ 10 秒かかり、その後新しいマスターに登録されます。通常、ダウンタイムの合計は 10 ~ 30 秒です。さらに、新しいマスターとして選出される各スレーブの優先順位は構成ファイルで構成できるため、複数のコンピュータ ルームに MySQL を展開するシナリオでは非常に実用的です。 自動障害回復 ダウンしたマスターノードが復元されると、次のようになります。
ダウンしたスレーブノードが復元されると、次のようになります。
状態管理 状態管理は新しいトピックではありません。一貫した状態を集中システムに配布し、分散システムが常に期待される状態に収束することを保証します。これは集中型システムの基礎の 1 つです。 MySQL サービスは、マスター ノードと、マスターからデータを非同期的に複製する複数のスレーブ ノードで構成されます。これは、1 つのマスターと複数のスレーブのレプリケーション モデルです。このうち、マスターノードはユーザーの読み取りおよび書き込み要求を処理するために使用でき、スレーブノードはユーザーの読み取り要求を処理するためにのみ使用できます。 このようなステートフル サービスを展開するには、StatefulSet に加えて、ConfigMap、Headless Service、ClusterIP Service など、他の多くの種類の k8s リソース オブジェクトも必要です。これらの間の連携により、MySQL などのステートフル サービスを k8s 上で実行できるようになります。 MySQL クラスターでは、マスターに障害が発生し、クラスターがフェイルオーバーを実行したときに、状態転送が最も頻繁に発生します。マスターに障害が発生すると、マスター選択ロジックが自動的にトリガーされます。マスターの選出が完了すると、新しいマスターが読み取りおよび書き込みサービスを正常に提供できるようになるまでフェイルオーバーが実行されます。フェイルオーバー プロセスには時間がかかり、フェイルオーバー プロセス中は MySQL サービスは書き込み不可の状態になります。 フェイルオーバー中、Dead Master インスタンスは k8s クラスターによって自動的にプルアップされます。引き上げられた後、デッドマスターは自分が正当なマスターであると考えるようになります。これにより、クラスター内に 2 つのマスターが同時に存在することになります。書き込み要求は 2 つのマスター ノードにランダムに割り当てられる可能性があり、スプリット ブレインの問題が発生します。 このシナリオのスプリット ブレイン問題を解決するために、InitContainer メカニズムを導入しました。このメカニズムは、Sentinel と組み合わせることで、問題をうまく解決できます。 InitContainer は、その名前が示すように、コンテナが起動されると、準備作業を完了するために 1 つ以上のコンテナが起動されます。 InitContainer が複数ある場合は、指定された順序で実行されます。すべての InitContainers が実行されるまで、メイン コンテナーは起動されません。 各 MySQL インスタンスに InitContainer を追加しました。 Dead Master が k8s によって自動的にプルアップされた後、InitContainer はクラスターがフェイルオーバー段階にあるかどうかを自動的に検出します。フェイルオーバー段階にある場合は、フェイルオーバーが終了するまでスリープ ポーリング状態になります。 フェイルオーバーが終了すると、Sentinel は Dead Master がプルアップされたことを検出し、Dead Master を New Master のスレーブ ノードとして自動的に設定します。これにより、完全なフェイルオーバー プロセスが完了し、クラスター内のブレイン スプリットの問題が回避されます。 宣言型操作 k8s を使用する場合、通常はアプリケーション管理のニーズを満たすために k8s のリソースを使用します。
上記のリソースはユーザーの期待を表しています。 kube-controller-mananger のコントローラーは、リソース イベントをリッスンし、対応するアクションを実行してユーザーの期待を実現します。 この操作モードは、アプリケーション管理に非常に便利です。ユーザーは、従来の HTTP API や RPC 呼び出しなどの使用方法を気にすることなく、宣言的な方法でアプリケーションを管理できます。 コントローラーは、ユーザーの期待が満たされるようにさまざまなメカニズムを使用します。たとえば、オブジェクトの現在の状態がユーザーの期待を満たしていることを確認するためにオブジェクトの状態を継続的に検出するこの操作および保守モードは、宣言型の操作および保守と呼ばれます。 しかし、k8s が提供する基本的な型のみを使用すると、MySQL などの複雑なアプリケーションの運用および保守コストは依然として非常に高くなります。宣言型の運用保守モデルを MySQL アプリケーションに拡張できれば、MySQL アプリケーションの導入と運用保守のコストが大幅に削減されます。 この問題を解決するために、slightshift-mysql-operator が誕生しました。 slightshift-mysql-operator は基本的にリソース + コントローラーです。
リソースにおけるユーザーの期待を満たします。
ユーザーは、デプロイメントと同様の方法でMySQLの要件を説明します。 MySQL アプリケーションを k8s にデプロイする手順は、k8s 公式リソースの場合と同じです。 slightshift-mysql-operatorのコントローラーはイベントリクエストをリッスンして処理します
slightshift-mysql-operator の設計コンセプトは次のとおりです。
slightshift-mysql-operator は、Kubernetes クラスターでの MySQL アプリケーションの使用と管理にかかるコストを大幅に削減します。ユーザーは宣言型 CR を通じてアプリケーションを作成でき、ベンダーはアプリケーション管理の専門知識をカプセル化して、ユーザーに対して透過的にすることができます。 slightshift-mysql-operator は、アーキテクチャ レベルで階層化設計を使用してアーキテクチャの複雑さを簡素化し、複数の MySQL クラスタ インスタンス間の相互干渉を最小限に抑え、各インスタンスの自律性を実現します。 展開構造を次の図に示します。 バックアップと復元 データのセキュリティを確保するには、極端なケース (クラスターのクラッシュ) でもユーザー データを復元できるように、データを定期的にバックアップする必要があります。 Cronjob 経由で MySQL データをバックアップします。
ジョブを作成して MySQL からデータを回復します。
5つの技術進化 進化することによってのみ、私たちは食物連鎖の頂点に立つことができるのです。 Gartner のレポートによると、データベース クラウド プラットフォームの市場シェアは今後 5 年間で 2 倍になり、ユーザーの 70% が dbPaaS データベース クラウド プラットフォームを使い始めることになります。したがって、データベース クラウド プラットフォームのさまざまなアプリケーションのニーズを満たし、プライベート クラウド展開における多数の異なるタイプのデータ ストレージ製品の運用上の複雑さを軽減するために、データベース アーキテクチャの進化は、今後 10 年間のデータベース変革の主な方向性の 1 つになります。 クラウドネイティブ データベースは、データベースの将来の開発にとって重要な方向性です。クラウドネイティブ データベース アーキテクチャも、クラウド化の要件に応じて反復する必要があります。今後も、需要の変化に応じてクラウドネイティブ データベース アーキテクチャの進化は続いていきます。 6. 今後の見通し ミドルウェアは、上位のビジネスシステムを構築するための基礎および中核技術として、高い信頼性、高い拡張性、強力な専門性という特徴を備えています。 今後は、ミドルウェアのこうした特性により、クラウドネイティブミドルウェアは標準化、構築、疎結合、プラットフォーム化の方向へ発展していくでしょう。プラットフォーム化により、ビジネスの変化に迅速に対応し、ビジネスの水平展開のための集中型の技術ソリューションを提供できるようになります。 最終的には、基本的なミドルウェアの展開、構成、アップグレード、スケーリング、トラブルシューティングなどの自動化機能をカバーする、エンタープライズ レベルのクラウド ネイティブ ミドルウェア PaaS プラットフォームを構築したいと考えています。 まず、ミドルウェア プラットフォームについての私の理解についてお話しします。ミドルウェア プラットフォームは、一連のミドルウェア ソリューションを備えたオープン テクノロジー プラットフォームである必要があります。これは、複雑で絶えず変化する上位レベルのビジネス領域に安定した信頼性の高いコンピューティングおよびストレージ サービスを提供することを目的とした、完全で実績のあるオープンなコンポーネント化されたソリューションです。 プラットフォームベースの製品の開発の歴史は、プラットフォームとして始まったわけではありません。むしろ、まずビジネスニーズがあり、実際のビジネスニーズを解決するために、特定の分野の知識が蓄積され、その分野の専門家が生まれ、最終的にプラットフォームが変革されます。言い換えれば、プラットフォームは継続的な蓄積のプロセスであり、自然なプロセスでもあります。 企業情報プラットフォームを構築する過程で、ミドルウェア プラットフォームを効果的、合理的、標準化して使用し、上位の業務システムを迅速に構築することで、企業が需要の変化にタイムリーに対応し、企業の集中管理を形成し、企業の中核的な強みを強化して持続可能な競争優位性を獲得するための強力な保証を提供できます。 【この記事は51CTOコラムニスト「アリババオフィシャルテクノロジー」によるオリジナル記事です。転載については原著者にお問い合わせください。 この著者の他の記事を読むにはここをクリックしてください |
<<: フォグコンピューティングが IoT の課題を解決する方法
>>: 誰かがテンセントミーティングの計算をしたところ、5か月で714億元の社会コストが節約されたことが判明した。
10月に、tmhhostは日本のcn2ネットワークシリーズVPSを追加しました。サーバーはzenla...
たった 1 時間で Code Year の Web サイトをデザインした方法: Code Year ...
今日はウェブサイトの粘着性の問題についてお話ししましょう。インターネット業界で働く多くの人々は、We...
アルゴリズムが改良されるたびに、一部の SEO ツールは無効になります。過去 3 年間の SEO で...
今日もまた水曜日です。今日は皆さんが外部リンクをもう少し増やし、Baidu スパイダーに自分のウェブ...
Hosthatchは最近、米国データセンターの大容量ハードディスクストレージVPSにいくつかの変更を...
2018年5月18日、51CTO主催のグローバルソフトウェアおよび運用技術サミットが北京で開催されま...
VPS の基礎を学ぶには、初心者は次の手順に従います。目次1VPSとは何かを理解する: 2適切なVP...
ウェブサイト上の排他的コンテンツという概念は、誰もが聞いたことがあるわけではないかもしれませんが、ウ...
この記事は、この地域の企業に基づいて書かれています。多くの企業は、SEO を選択することで会社にどの...
今年、百度のアルゴリズムが継続的に改善・調整されたため、自分のウェブサイトや友人のウェブサイトのコン...
原題:百度のプロモーションアカウントへのハッキングによる詐欺事件が100件以上発生北京ニュース(記者...
1. Gome Online: 妥協は無力感から生まれるかもしれませんが、リスクもあります!国美オン...
Argo Rollouts は、Kubernetes Operator 実装であり、ブルーグリーン、...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています映画『囲碁...