グローバルデータベースネットワーク (GDN) では、各クラスター (プライマリクラスターとセカンダリクラスターの両方) に独立したクラスターエンドポイントが提供されます。アプリケーションは、地理的なリージョンに基づいて最寄りのクラスターエンドポイントに接続することで、GDN に接続できます。GDN は自動的に読み書き分離を処理します。書き込みリクエストはプライマリクラスターに転送され、読み取りリクエストは通常ローカルで処理されます。
読み書き分離とリクエストルーティング
GDN では、プライマリクラスターとセカンダリクラスターへの読み取りおよび書き込みリクエストのルーティングは、各クラスターの PolarProxy の設定 によって決定されます。アプリケーションコードを変更する必要はありません。クラスターのエンドポイントに接続すると、読み取りおよび書き込みリクエストは次のように自動的にルーティングされます。
INSERT、UPDATE、DELETEなどの書き込みリクエスト、およびトランザクション内のすべてのリクエストは、処理のためにプライマリクラスターのプライマリノードに自動的に転送されます。読み取りリクエストは、デフォルトでローカルのセカンダリクラスターの読み取り専用ノードにルーティングされ、低遅延のローカルアクセスが実現します。セッションの一貫性が有効になっている場合、データ整合性を確保するために、一部の読み取りリクエストがプライマリクラスターのプライマリノードにルーティングされることもあります。
[読み書きモード] が [読み書き (読み書き分離の自動化)] に設定されているクラスターエンドポイントまたはカスタムエンドポイントのみが、GDN の読み書き分離サービスをサポートします。
[プライマリエンドポイント] および [読み書きモード] が [読み取り専用] に設定されているカスタムエンドポイントは、GDN の読み書き分離サービスをサポートしません。
プライマリクラスターとセカンダリクラスター間のレプリケーションの遅延がビジネスに与える潜在的な影響を軽減するために、セカンダリクラスターでカスタムクラスターエンドポイントを構成する場合は、プライマリノードによる読み取りリクエストの許可 を [いいえ] に設定し、一貫性レベル を 最終的な整合性 (弱) に設定します。
クラスターエンドポイントの表示
PolarDB コンソールにログインします。左側のナビゲーションウィンドウで、[グローバルデータベースネットワーク (GDN)] をクリックします。
[グローバルデータベースネットワーク (GDN)] ページで、ターゲットの GDN を見つけ、[グローバルデータベースネットワーク ID] をクリックして GDN の詳細ページに移動します。
[クラスター] セクションで、ターゲットのセカンダリクラスターを見つけ、[クラスターエンドポイント] 列の [表示] をクリックします。表示されるダイアログボックスでクラスターエンドポイントの詳細を表示できます。
説明ここには、デフォルトのクラスターエンドポイントの接続情報 (プライベートおよびパブリックネットワークアドレスを含む) のみが表示されます。
より多くのエンドポイントの詳細を表示するには、[クラスターの概要ページを表示] をクリックします。ターゲットクラスターの詳細ページにリダイレクトされ、[データベース接続] セクションでより多くのエンドポイントを表示できます。
グローバルデータベースクラスターへの接続
異なるリージョンのアプリケーションは、最寄りのクラスターエンドポイントに接続して GDN にアクセスでき、GDN は自動的に読み書き分離を処理します。次のいずれかの方法でデータベースクラスターに接続できます。
DMS を使用したクラスターへの接続
Data Management (DMS) は、Alibaba Cloud が提供するグラフィカルなデータ管理ツールです。データ管理、スキーマ管理、ユーザー管理、セキュリティ監査、データトレンド、データ追跡、ビジネスインテリジェンス (BI) チャート、パフォーマンスの最適化、サーバー管理など、さまざまなデータ管理サービスを提供します。他のツールを使用せずに、DMS を使用して PolarDB クラスターを直接管理できます。
PolarDB コンソールにログインします。クラスターリストで、接続したいクラスターの ID をクリックして、その [基本情報] ページに移動します。ページの右上隅にある [データベースにログイン] をクリックします。

表示されるダイアログボックスで、クラスター用に作成したデータベースアカウントとパスワードを入力し、[ログイン] をクリックします。

クラスターにログインした後、左側のナビゲーションウィンドウで を選択して、 クラスターを管理します。

クライアントを使用したクラスターへの接続
クライアントを使用して PolarDB クラスターに接続できます。次の手順では、pgAdmin 4 v9.0 クライアントを使用してクラスターに接続します。
pgAdmin 4 クライアントをダウンロードしてインストールします。
pgAdmin 4 クライアントを開き、[Servers] を右クリックし、 を選択します。

[General] タブで接続名を設定します。[Connection] タブで、クラスターの接続情報を構成し、[Save] をクリックします。


パラメーター
説明
ホスト名/アドレス
PolarDB クラスターのエンドポイントとポート。
ECS インスタンスから PolarDB クラスターにアクセスし、ECS インスタンスが PolarDB クラスターと同じ VPC にある場合は、[非公開] エンドポイントとポートを指定します。
オンプレミス環境から PolarDB クラスターにアクセスするには、[パブリック] エンドポイントとポートを指定します。
デフォルトのポート番号は 1521 です。
ポート
ユーザー名
PolarDB クラスターのデータベースアカウントとパスワード。
パスワード
接続結果を表示します。接続情報が正しければ、次のインターフェイスが表示され、接続が成功したことを示します。
説明postgresはデフォルトのシステムデータベースです。このデータベースに対して操作を実行しないでください。
psql を使用したクラスターへの接続
PostgreSQL ダウンロードから psql をダウンロードして PolarDB クラスターに接続できます。PolarDB-Tools の psql を使用して PolarDB クラスターに接続することもできます。
psql を使用したクラスター接続方法は、Windows と Linux システムで同じです。
詳細については、「psql」をご参照ください。
構文
psql -h <host> -p <port> -U <username> -d <dbname>パラメーター | 説明 |
| PolarDB クラスターのクラスターのエンドポイントとポート。
|
| |
| PolarDB クラスターのデータベースアカウント。 |
|
例
psql -h pc-xxx.rwlb.rds.aliyuncs.com -p 1521 -U testusername -d postgresプログラミング言語でのクラスターへの接続
PolarDB for PostgreSQL (Oracle 互換) クラスターへの接続は、通常の PostgreSQL データベースへの接続と似ています。エンドポイント、ポート、アカウント、パスワードなどの接続パラメーターを変更するだけです。以下は、特定のプログラミング言語で PolarDB クラスターに接続する方法の例です。
Java
この例では、Maven ベースの Java プロジェクトで PostgreSQL JDBC ドライバーを使用して PolarDB for PostgreSQL (Oracle 互換) クラスターに接続する方法について説明します。
pom.xml ファイルに PostgreSQL JDBC ドライバーの依存関係を追加します。サンプルコード:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.18</version> </dependency>クラスターに接続します。
<HOST>、<PORT>、<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 PolarDBConnection { public static void main(String[] args) { // データベースの URL、ユーザー名、パスワード。 String url = "jdbc:postgresql://<HOST>:<PORT>/<DATABASE>"; String user = "<USER>"; String password = "<PASSWORD>"; try { // PostgreSQL JDBC ドライバーをロードします。 Class.forName("org.postgresql.Driver"); // 接続を確立します。 Connection conn = DriverManager.getConnection(url, user, password); // Statement オブジェクトを作成します。 Statement stmt = conn.createStatement(); // SQL クエリを実行します。 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 e) { e.printStackTrace(); } } }
Python
この例では、Python 3 で psycopg2 ライブラリを使用して PolarDB for PostgreSQL (Oracle 互換) クラスターに接続する方法について説明します。
psycopg2 ライブラリをインストールします。
pip3 install psycopg2-binaryクラスターに接続します。
<HOST>、<PORT>、<USER>、<PASSWORD>、<DATABASE>、<YOUR_TABLE_NAME>のプレースホルダーを実際のクラスター接続パラメーターに置き換えます。import psycopg2 try: # 接続パラメーター conn = psycopg2.connect( host="<HOST>", # クラスターのエンドポイント。 database="<DATABASE>", # データベース名。 user="<USER>", # ユーザー名。 password="<PASSWORD>", # パスワード。 port="<PORT>" # ポート番号。 ) # カーソルオブジェクトを作成します。 cursor = conn.cursor() # クエリを実行します。 cursor.execute("SELECT * FROM <YOUR_TABLE_NAME>") # すべての結果を取得します。 records = cursor.fetchall() for record in records: print(record) except Exception as e: print("Error:", e) finally: # 接続を閉じます。 if 'cursor' in locals(): cursor.close() if 'conn' in locals(): conn.close()
Go
この例では、Go 1.23.0 で database/sql パッケージと lib/pq ドライバーを使用して PolarDB for PostgreSQL (Oracle 互換) クラスターに接続する方法について説明します。
lib/pqドライバーをインストールします。go get -u github.com/lib/pqクラスターに接続します。
<HOST>、<PORT>、<USER>、<PASSWORD>、<DATABASE>、および<YOUR_TABLE_NAME>プレースホルダーを、実際のクラスター接続パラメーターに置き換えます。package main import ( "database/sql" "fmt" "log" _ "github.com/lib/pq" // PostgreSQL ドライバーを初期化します。 ) func main() { // 接続文字列のフォーマット。 connStr := "user=<USER> password=<PASSWORD> dbname=<DATABASE> host=<HOST> port=<PORT> sslmode=disable" // データベース接続を開きます。 db, err := sql.Open("postgres", connStr) if err != nil { log.Fatal(err) } defer db.Close() // プログラムが終了するときに接続を閉じます。 // 接続をテストします。 err = db.Ping() if err != nil { log.Fatal(err) } fmt.Println("Connected to PostgreSQL!") // クエリを実行します。 rows, err := db.Query("SELECT * FROM <YOUR_TABLE_NAME>") if err != nil { log.Fatal(err) } defer rows.Close() }
関連する API 操作
API | 説明 |
PolarDB クラスターのエンドポイント情報を照会します。 | |
PolarDB クラスターエンドポイントのプロパティ (読み取り/書き込みモード、エンドポイントに新しいノードを自動的に追加するかどうか、整合性レベル、トランザクション分割、プライマリノードが読み取りリクエストを受け入れるかどうか、および接続プールなど) を変更します。 |