グローバルデータベースネットワーク (GDN) は、異なるリージョンにデプロイされた複数の PolarDB クラスターで構成されます。このトピックでは、GDN のクラスターエンドポイントを表示し、それに接続する方法について説明します。
読み書き分離とリクエストルーティング
GDN 内のクラスター (プライマリクラスターとセカンダリクラスター) への読み書きリクエストのルーティングは、各クラスターの データベースプロキシ構成によって決定されます。アプリケーションコードを変更する必要はありません。各クラスターのアドレスに接続するだけで、読み書きリクエストは次のロジックに基づいて自動的にルーティングされます。
データベースプロキシは、
INSERT、UPDATE、DELETE文などの書き込みリクエスト、SET文などの他のブロードキャスト構文、およびトランザクション内のすべてのリクエストを、処理のためにプライマリクラスターのプライマリノードに自動的に転送します。デフォルトでは、データベースプロキシは読み取りリクエストをローカルのセカンダリクラスターの読み取り専用ノードにルーティングして、ローカルアクセスを実現します。セッションの一貫性が有効になっている場合、データ整合性を確保するために、一部の読み取りリクエストがプライマリクラスターのプライマリノードにルーティングされることもあります。
アプリケーションがセカンダリクラスターのクラスターエンドポイントに接続する場合も、同じルーティングルールが適用されます。クライアントがデータベースプロキシとの接続を確立すると、プロキシはセカンダリクラスターからプライマリクラスターのプライマリノードへのバックエンド接続を作成および維持します。これらの接続が事前に確立されるかどうかは、データベースプロキシの構成によって異なります。セカンダリクラスターからプライマリノードへのリンクは、多くの場合、クロスリージョン接続です。短時間接続のアプリケーションの場合、これらのクロスリージョン接続が頻繁に作成されると、ネットワークの変動によりパフォーマンスが低下する可能性があります。このシナリオでは、セカンダリクラスターのデータベースプロキシで オンデマンド接続 を有効にすることを推奨します。詳細については、「データベースプロキシの設定」をご参照ください。
さらに、GDN は グローバルドメイン名を提供します。これにより、最寄りアクセスが可能になるだけでなく、プライマリクラスターのスイッチオーバー後もドメイン名は変更されません。
-
GDN の読み書き分離サービスは、読み書きモード が 読み書き (自動読み書き分離) に設定されているクラスターエンドポイントまたはカスタムエンドポイントでのみサポートされます。
-
プライマリアドレス および 読み書きモード が 読み取り専用 に設定されているカスタムエンドポイントは、GDN の読み書き分離サービスをサポートしません。
-
プライマリクラスターとセカンダリクラスター間のレプリケーションラグによるビジネスへの潜在的な影響を軽減するには、セカンダリクラスターでカスタムクラスターエンドポイントを設定する際に、プライマリノードによる読み取りリクエストの許可 を いいえ に、一貫性レベル を 最終的な整合性 (弱) に設定することをお勧めします。
-
ご利用のアプリケーションがセカンダリクラスターからのレプリケーションラグを許容できない場合は、プライマリクラスターのクラスターエンドポイントに直接接続することを推奨します。
クラスターエンドポイントの表示
-
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、グローバルデータベースネットワーク (GDN) をクリックします。
-
グローバルデータベースネットワーク (GDN) ページで、対象の GDN を見つけ、その GDN ID/名前 をクリックして GDN の詳細ページを開きます。
-
クラスター セクションで、対象のセカンダリクラスターを見つけ、表示 列の クラスターのエンドポイント をクリックして、クラスターエンドポイントの詳細を表示します。
説明-
デフォルトクラスターのエンドポイント情報のみ表示できます。これには プライベートネットワーク エンドポイントと パブリックネットワーク エンドポイントが含まれます。
-
より詳細なエンドポイント情報を表示するには、クラスターの概要ページにアクセスし、 をクリックします。対象クラスターの詳細ページにリダイレクトされ、データベースへの接続 セクションでより多くのエンドポイントを表示できます。
-
GDN クラスターへの接続
異なるリージョンのアプリケーションは、最寄りのクラスターエンドポイントを使用して GDN に接続し、自動読み書き分離を有効にします。このトピックでは、いくつかの一般的な接続方法の例を示します。
DMS を使用したクラスターへの接続
DMS は、Alibaba Cloud のグラフィカルなデータ管理サービスです。追加のツールをインストールすることなく、DMS で直接 PolarDB クラスターを管理できます。
PolarDB コンソールに移動します。[クラスターリスト] で、対象クラスターの ID をクリックしてクラスター詳細ページに移動します。ページの右上隅にある [データベースにログイン] をクリックします。

PolarDB for MySQL クラスターの[データベースアカウント] と [データベースパスワード] を入力し、[ログオン] をクリックします。

ログイン後、左側のナビゲーションウィンドウの [ログイン中のインスタンス] リストで PolarDB for MySQL クラスターを見つけます。

クライアントを使用したクラスターへの接続
MySQL と互換性のあるクライアントを使用して、PolarDB クラスターに接続できます。次の例では、MySQL Workbench 8.0.29 を使用します。
MySQL Workbench をダウンロードしてインストールします。
MySQL Workbench を開き、 を選択します。
接続情報を入力し、[OK] をクリックします。

パラメーター
説明
例
ホスト名
pc-2***.rwlb.rds.aliyuncs.com
ポート
データベースエンドポイントのポート番号。
説明デフォルトのポートは 3306 です。
3306
[ユーザー名]
polardb_mysql_user
[パスワード]
データベースアカウントのパスワード。
Pass***233
コマンドラインを使用したクラスターへの接続
ご利用のサーバーに MySQL クライアントがインストールされている場合は、次のコマンドを実行して PolarDB for MySQL クラスターに接続します。
構文:
mysql -h<endpoint> -P<port> -u<database_username> -p<database_user_password>例:
mysql -h pc-2***.rwlb.rds.aliyuncs.com -P3306 -upolardb_mysql_user -pPass***233パラメーター | 説明 | 例 |
-h | pc-2***.rwlb.rds.aliyuncs.com | |
-P | データベースエンドポイントのポート番号。 説明
| 3306 |
-u | polardb_mysql_user | |
-p | データベースアカウントのパスワード。 説明 このパラメーターは必須です。
| Pass***233 |
アプリケーションを使用したクラスターへの接続
PolarDB for MySQL クラスターへの接続は、MySQL データベースへの接続と同じです。エンドポイント、ポート、アカウント、パスワードを、ご利用の PolarDB クラスターの値に置き換えてください。言語別の例:
Java
Maven プロジェクトで MySQL JDBC ドライバーを使用して、PolarDB for MySQL クラスターに接続します。
pom.xml ファイルに MySQL JDBC ドライバーの依存関係を追加します。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency>クラスターに接続します。
<HOST>、<USER>、<PASSWORD>、<DATABASE>、<YOUR_TABLE_NAME>、<YOUR_TABLE_COLUMN_NAME>を実際の値に置き換えてください。import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DatabaseConnection { public DatabaseConnection() { } public static void main(String[] args) { // 接続するデータベースのエンドポイント、ポート、および名前。 String url = "jdbc:mysql://<HOST>:3306/<DATABASE>?useSSL=false&serverTimezone=UTC"; // データベースアカウント。 String user = "<USER>"; // データベースアカウントのパスワード。 String password = "<PASSWORD>"; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); // 取得するデータテーブルの名前。 ResultSet rs = stmt.executeQuery("SELECT * FROM `<YOUR_TABLE_NAME>`"); while(rs.next()) { // 取得するデータテーブルの列名。 System.out.println(rs.getString("<YOUR_TABLE_COLUMN_NAME>")); } rs.close(); stmt.close(); conn.close(); } catch (Exception var7) { var7.printStackTrace(); } } }
Python
Python 3 で PyMySQL ライブラリを使用して、PolarDB for MySQL クラスターに接続します。
PyMySQL ライブラリをインストールします。
pip3 install PyMySQLクラスターに接続します。
<HOST>、<USER>、<PASSWORD>、<DATABASE>、<YOUR_TABLE_NAME>を実際の値に置き換えてください。import pymysql # データベース接続パラメーター host = '<HOST>' # PolarDB クラスターのエンドポイント port = 3306 # デフォルトのポートは 3306 です user = '<USER>' # データベースアカウント password = '<PASSWORD>' # データベースアカウントのパスワード database = '<DATABASE>' # 接続するデータベースの名前 try: # データベース接続を作成 connection = pymysql.connect( host=host, port=port, user=user, passwd=password, db=database ) # カーソルを取得 with connection.cursor() as cursor: # SQL クエリを実行 sql = "SELECT * FROM `<YOUR_TABLE_NAME>`" # 取得するデータテーブルの名前 cursor.execute(sql) # クエリ結果を取得 results = cursor.fetchall() for row in results: print(row) finally: # データベース接続を閉じる if 'connection' in locals() and connection.open: connection.close()
Go
database/sql パッケージと go-sql-driver/mysql ドライバー (Go 1.23.0) を使用して、PolarDB for MySQL クラスターに接続します。
go-sql-driver/mysqlドライバーをインストールします。go get -u github.com/go-sql-driver/mysqlクラスターに接続します。
<HOST>、<USER>、<PASSWORD>、<DATABASE>、<YOUR_TABLE_NAME>を実際の値に置き換えてください。package main import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" ) func main() { // データベース接続パラメーター dbHost := "<HOST>" // PolarDB クラスターのエンドポイント dbPort := "3306" // デフォルトのポートは 3306 です dbUser := "<USER>" // データベースアカウント dbPass := "<PASSWORD>" // データベースアカウントのパスワード dbName := "<DATABASE>" // 接続するデータベースの名前 // データソース名 (DSN) を構築 dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", dbUser, dbPass, dbHost, dbPort, dbName) // データベース接続を開く db, err := sql.Open("mysql", dsn) if err != nil { log.Fatalf("Failed to connect to database: %v", err) } defer db.Close() // 接続をテスト err = db.Ping() if err != nil { log.Fatalf("Failed to ping database: %v", err) } // カーソルを作成 var result string err = db.QueryRow("SELECT VERSION()").Scan(&result) if err != nil { log.Fatalf("Failed to execute query: %v", err) } // データベースのバージョンを出力 fmt.Printf("Connected to database, version: %s\n", result) // SQL クエリを実行 rows, err := db.Query("SELECT * FROM `<YOUR_TABLE_NAME>`") // 取得するデータテーブルの名前 if err != nil { log.Fatalf("Failed to execute query: %v", err) } defer rows.Close() }
関連ドキュメント
-
グローバルデータベースネットワーク (GDN):GDN のアーキテクチャとユースケースについて説明します。
-
グローバルドメイン名の作成:最寄りクラスターへのアクセスとスイッチオーバー耐性のためのグローバルドメイン名の作成方法について説明します。
API リファレンス
|
API |
説明 |
|
PolarDB クラスターのクラスターエンドポイントに関する情報をクエリします。 |
|
|
PolarDB クラスターエンドポイントの属性を変更します。属性には、読み書きモード、新規ノードの自動追加、整合性レベル、トランザクション分割、プライマリノードでの読み取りリクエストの受付、接続プールが含まれます。 |