多くの場合、レプリカは高可用性や読み取りスケーリングのためにデプロイされます。プライマリに障害が発生した場合、レプリカの1つがプライマリにプロモートされます。読み取りが多い場合、ほとんどの場合、レプリカが追加されてスケールアウトされます。理想的には、書き込みはプライマリにルーティングされ、読み取りはレプリカ間で負荷分散されます。これは、利用可能なリソースを利用するための最も効率的な方法です。
RDS、Azure Database、およびCloud SQLはすべて、データベースインスタンス用に個別のエンドポイントを提供します。1つはプライマリ用、もう1つは各レプリカ用です。読み取りの負荷を分散する場合は、複数の接続(レプリカごとに1つ)を作成して自分で行う必要があります。プライマリで書き込みを実行し、レプリカで読み取りを実行する場合(つまり、読み取り/書き込み分割)、プライマリへの追加の接続を作成して、自分で実行する必要があります。
楽しくない。かっこいいじゃない。
MariaDB Enterprise Serverの高度なデータベースプロキシであるMaxScaleを使用すると、心配する必要はありません。 MaxScaleは、読み取り負荷分散と読み取り/書き込み分割を実行します。これを透過クエリルーティングと呼びます。開発者は、物理インフラストラクチャ(つまり、データベーストポロジ)について心配する必要はありません。なぜ彼らはすべきですか?レプリカが1つあるかもしれませんし、5つあるかもしれません。 DBAが昨夜レプリカを追加したのかもしれませんし、2つ削除したのかもしれません。それは問題ではなく、アプリケーションはそれを説明する必要はありません。
それがMaxScaleの素晴らしいところです。基盤となるデータベースインフラストラクチャと展開トポロジを抽象化します。多分それはスタンドアロンデータベースです。多分それは複製されたデータベースです。多分それはクラスター化されたデータベースです。誰も気にしない?特にクラウドで。
では、なぜオンプレミスで透過的なクエリルーティングを利用できるのに、クラウドでは利用できないのでしょうか。 RDS、Azure Database、GoogleCloudSQLにはMaxScaleがないためです。 MaxScaleと透過的なクエリルーティングを備えたDBaaSがあった場合のみ。究極のMariaDBクラウドでさらに高く飛躍できれば。ちょっと待って、SkySQLこんにちは!
はい、MaxScaleのパワーをSkySQLにもたらしました。
レプリケートされたデータベースを作成すると、ホスト名と2つのポート(1つは読み取り、もう1つは読み取り/書き込み)が提供されます。読み取り/書き込みポートのみが必要です。これは、読み取り負荷分散も行うためです。ただし、読み取り専用アプリケーション(BI /レポートなど)がある場合は、読み取りポートが便利な場合があります。簡単です。
>
シェーンはデータベースのホスト名とポートを共有しただけですか?
なぜそうです、そうです。デフォルトでは、SkySQLデータベースにはアクセスできません。アクセスが必要なクライアントとアプリケーションサーバーのIPアドレス(または範囲)をホワイトリストに登録する必要があります。そして、私がホワイトリストに登録した唯一のIPアドレスは、自宅のラップトップ用のIPアドレスです。幸運を。 😉
目前のトピックに戻ると、読み取り/書き込み分割用の5001(プライマリへの書き込み、レプリカ間で負荷分散された読み取り)と読み取り専用の負荷分散用の5002の2つのポートが表示されます。私のデータベースには2つのレプリカがありますが、データベースに接続するアプリケーションはそれを気にする必要はありません。明日はさらに2つのレプリカを追加でき、それらを利用するためにアプリケーションを変更する必要はありません。 MaxScaleは、単純かつ自動的に、読み取りのルーティングを開始します。
そして、プライマリが失敗しても、大したことはありません。 MaxScaleは自動的にレプリカをプロモートし、レプリカへの書き込みのルーティングを開始します(残りのレプリカ間で読み取りの負荷分散を行います)。 RDSの予測できないフェイルオーバー時間に悩まされたことがある場合は、その理由をご存知でしょう。 RDSフェイルオーバーはDNS伝播に基づいているため、エンドポイントのホスト名を変更する必要はありません。ほぼ透明ですが、時間がかかります。一方、MaxScaleを使用すると、すぐに使用できます。DNSの伝播は必要ありません。
しかし、私はあまり話題から外れたくありません。私はHAのために何か他のことを計画しています。しばらくお待ちください。