全部产品
Search
文档中心

Hologres:Pengaturan keseimbangan beban berbasis JDBC

更新时间:Jul 02, 2025

Mulai Hologres V1.3 dan versi lebih baru, Anda dapat menggunakan Java Database Connectivity (JDBC) untuk mengonfigurasi beberapa instans sekunder baca-saja guna menerapkan pengaturan keseimbangan beban sederhana. Topik ini menjelaskan cara menggunakan JDBC untuk menerapkan pengaturan tersebut.

Informasi latar belakang

Dalam Hologres, sebuah instans utama dapat dihubungkan dengan beberapa instans sekunder baca-saja. Instans utama dan sekunder berbagi sumber daya penyimpanan tetapi tidak berbagi sumber daya komputasi. Hal ini memungkinkan Anda menerapkan instans dengan ketersediaan tinggi berdasarkan pemisahan baca/tulis. Untuk informasi lebih lanjut, lihat Konfigurasikan Penyebaran Multi-Instans dengan Ketersediaan Tinggi.

Anda dapat menggunakan JDBC untuk mengaitkan beberapa instans sekunder baca-saja dengan instans utama guna menerapkan pengaturan keseimbangan beban sederhana, seperti yang ditunjukkan pada gambar berikut.image..png

Hologres menyediakan fitur-fitur berikut terkait instans sekunder baca-saja yang dikonfigurasi menggunakan JDBC:

  • Permintaan kueri dialokasikan secara acak ke instans sekunder baca-saja, mencegah instans sekunder kelebihan beban.

  • Permintaan kueri dialokasikan ke instans sekunder secara berurutan untuk memastikan layanan tetap tersedia dalam kasus kegagalan instans.

    • Jika JDBC gagal terhubung ke Instans Sekunder 1, JDBC secara otomatis mencoba terhubung ke Instans Sekunder 2.

    • Jika JDBC gagal terhubung ke Instans Sekunder 1 dan 2, JDBC secara otomatis mencoba terhubung ke Instans Sekunder 3.

    • Jika JDBC gagal terhubung ke semua instans sekunder, sistem menampilkan pesan kegagalan koneksi.

Mulai Hologres V2.0.10 dan versi lebih baru, lebih banyak nilai tersedia untuk parameter targetServerType. Dengan cara ini, Anda dapat menerapkan pengaturan keseimbangan beban dalam lebih banyak skenario.

Catatan penggunaan

Prasyarat

Sintaksis

Untuk mengonfigurasi beberapa instans sekunder baca-saja, Anda perlu mengonfigurasi pasangan Endpoint:Port dari instans tersebut dalam URL JDBC. Pisahkan pasangan Endpoint:Port dengan koma (,).

jdbc:postgresql://<Endpoint1>:<Port1>,<Endpoint2>:<Port2>,<Endpoint3>:<Port3>.../<DBNAME>?user=<AccessKey ID>&password=<AccessKey Secret>&targetServerType=any&loadBalanceHosts=<value>[&hostRecheckSeconds=<value>]

Parameter

Parameter

Deskripsi

Endpoint

Titik akhir dari instans Hologres.

Anda dapat memperoleh titik akhir dari instans Hologres pada halaman instance details di Konsol Hologres.

Port

Nomor port dari instans Hologres.

Anda dapat memperoleh nomor port dari instans Hologres pada halaman Instance Details di Konsol Hologres.

DBNAME

Nama database Hologres.

ID AccessKey

ID AccessKey dari akun Alibaba Cloud yang digunakan untuk mengakses instans Hologres.

Anda dapat memperoleh ID AccessKey dari halaman Pasangan AccessKey.

Rahasia AccessKey

Rahasia AccessKey dari akun Alibaba Cloud yang digunakan untuk mengakses instans Hologres.

Anda dapat memperoleh rahasia AccessKey dari halaman Pasangan AccessKey.

targetServerType

Instans ke mana JDBC dapat terhubung. Nilai any menunjukkan bahwa JDBC dapat terhubung ke instans apa pun yang titik akhirnya ditentukan dalam URL.

Nilai valid dalam Hologres V2.0.10 dan versi lebih baru:

  • master: JDBC hanya dapat terhubung ke instans utama.

  • slave: JDBC hanya dapat terhubung ke instans sekunder baca-saja.

  • preferSlave: JDBC secara preferensial terhubung ke instans sekunder baca-saja. Jika koneksi gagal, JDBC terhubung ke instans utama.

JDBC menentukan apakah suatu instans adalah instans utama atau instans sekunder baca-saja berdasarkan nilai parameter Grand Unified Configuration (GUC) in_hot_standby. Nilai valid dari in_hot_standby:

  • Nonaktif: Instance utama.

  • on: instans sekunder baca-saja.

loadBalanceHosts

Urutan di mana JDBC mencoba terhubung ke instans sekunder baca-saja. Nilai valid:

  • False: JDBC terhubung ke instans sekunder baca-saja dalam urutan yang sama dengan titik akhir instans yang ditentukan dalam URL. Ini adalah nilai default.

  • True: JDBC secara acak terhubung ke instans sekunder baca-saja.

hostRecheckSeconds

Waktu cache untuk JDBC terhubung ke instans yang ditentukan dalam daftar titik akhir. Nilai default adalah 10. Unit: detik.

Jika Anda ingin menyesuaikan waktu cache, Anda dapat mengubah nilai parameter hostRecheckSeconds. Dalam contoh ini, waktu cache diubah menjadi 30.

jdbc:postgresql://{ENDPOINT1}:{PORT1},{ENDPOINT2}:{PORT2},{ENDPOINT3}:{PORT3}.../{DBNAME}?targetServerType=any&loadBalanceHosts=true&hostRecheckSeconds=30

Catatan

Untuk informasi lebih lanjut tentang cara mengonfigurasi JDBC, lihat Dokumentasi JDBC.

Contoh

  • Permintaan kueri dialokasikan secara acak ke tiga instans sekunder baca-saja. Jika koneksi gagal, JDBC secara otomatis mencoba terhubung ke instans lain.

    import java.sql.*;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    public class hatest {
        public static void main(String[] args) {
            //Konfigurasikan titik akhir dari Hologres Read-only Secondary Instance 1.
            String endpoint1 = "hgpostcn-cn-wxxxxxxxx01-cn-shanghai.hologres.aliyuncs.com:80";
            //Konfigurasikan titik akhir dari Hologres Read-only Secondary Instance 2.
            String endpoint2 = "hgpostcn-cn-wxxxxxxxx02-cn-shanghai.hologres.aliyuncs.com:80";
            //Konfigurasikan titik akhir dari Hologres Read-only Secondary Instance 3.
            String endpoint3 = "hgpostcn-cn-wxxxxxxxx03-cn-shanghai.hologres.aliyuncs.com:80";      
            //Tentukan nama database yang ingin Anda hubungkan.
            String dbname = "postgres";
            String jdbcUrl = "jdbc:postgresql://" + endpoint1 + "," + endpoint2 + "," + endpoint3 + "/" + dbname;
            Properties properties = new Properties();
            //Tentukan ID AccessKey dari akun yang digunakan untuk terhubung ke database.
            properties.setProperty("user", "xxxx");
            //Tentukan rahasia AccessKey dari akun yang digunakan untuk terhubung ke database.
            properties.setProperty("password", "xxxx");
            //Set targetServerType ke any. Ini memungkinkan JDBC terhubung ke instans apa pun yang titik akhirnya ditentukan dalam URL.
            properties.setProperty("targetServerType", "any");
            //Set loadBalanceHosts ke true untuk mengaktifkan pengaturan keseimbangan beban.
            properties.setProperty("loadBalanceHosts", "true");
            //Set hostRecheckSeconds ke 10. Unit: detik.
            properties.setProperty("hostRecheckSeconds", "10");
            try {
                Class.forName("org.postgresql.Driver");
                Connection connection = DriverManager.getConnection(jdbcUrl, properties);
                PreparedStatement preparedStatement = connection.prepareStatement("show hg_frontend_endpoints;" );
                ResultSet resultSet = preparedStatement.executeQuery();
                while (resultSet.next()) {
                    ResultSetMetaData rsmd = resultSet.getMetaData();
                    int columnCount = rsmd.getColumnCount();
                    Map map = new HashMap();
                    for (int i = 0; i < columnCount; i++) {
                        map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1));
                    }
                    System.out.println(map);
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    }
  • Kueri dipolling sebanyak 100 kali dan dialokasikan ke dua instans.

    import java.sql.*;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    public class hatest {
        public static void main(String[] args) {
            int x = 1;
            while( x <= 100 ){
                //Konfigurasikan titik akhir dari instans utama Hologres.
                String endpoint1 = "hgpostcn-cn-wxxxxxxxx04-cn-hangzhou.hologres.aliyuncs.com:80";
                //Konfigurasikan titik akhir dari instans sekunder baca-saja Hologres.
                String endpoint2 = "hgpostcn-cn-wxxxxxxxx05-cn-hangzhou.hologres.aliyuncs.com:80";
                //Tentukan nama database yang ingin Anda hubungkan.
                String dbname = "postgres";
                String jdbcUrl = "jdbc:postgresql://" + endpoint1 + "," + endpoint2 + "/" + dbname ;
                Properties properties = new Properties();
                //Tentukan ID AccessKey dari akun yang digunakan untuk terhubung ke database.
                properties.setProperty("user", "xxx");
                //Tentukan rahasia AccessKey dari akun yang digunakan untuk terhubung ke database.
                properties.setProperty("password", "xxx");
                //Set targetServerType ke any. Ini memungkinkan JDBC terhubung ke instans apa pun yang titik akhirnya ditentukan dalam URL.
                properties.setProperty("targetServerType", "any");
                //Set loadBalanceHosts ke true untuk mengaktifkan pengaturan keseimbangan beban.
                properties.setProperty("loadBalanceHosts", "true");
                //Set hostRecheckSeconds ke 10. Unit: detik.
                properties.setProperty("hostRecheckSeconds", "10");
                try {
                    Class.forName("org.postgresql.Driver");
                    Connection connection = DriverManager.getConnection(jdbcUrl, properties);
                    PreparedStatement preparedStatement = connection.prepareStatement("show hg_frontend_endpoints;" );
                    ResultSet resultSet = preparedStatement.executeQuery();
                    while (resultSet.next()) {
                        ResultSetMetaData rsmd = resultSet.getMetaData();
                        int columnCount = rsmd.getColumnCount();
                        Map map = new HashMap();
                        for (int i = 0; i < columnCount; i++) {
                            map.put(rsmd.getColumnName(i + 1).toLowerCase(), resultSet.getObject(i + 1));
                        }
                        System.out.println(map);
                    }
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
                x++;
            }
        }
    }

    Data metrik dari kedua instans menunjukkan bahwa jumlah koneksi dari kedua instans hampir sama. Untuk informasi lebih lanjut tentang cara melihat data metrik dari instans, lihat Lihat Metrik.

    • Metrik dari instans hgpostcn-cn-wxxxxxxxx04image..png

    • Metrik dari instans hgpostcn-cn-wxxxxxxxx05image..png