通過HTTPS協(xié)議連接ClickHouse
您可以通過HTTPS協(xié)議訪問云數(shù)據(jù)庫ClickHouse。本文介紹如何通過HTTPS協(xié)議連接云數(shù)據(jù)庫ClickHouse集群。
前提條件
僅云數(shù)據(jù)庫ClickHouse集群的20.8及以上版本支持通過HTTPS協(xié)議連接。
已開通HTTPS協(xié)議并下載SSL CA證書。如何開通和下載,請參見開通HTTPS協(xié)議。
已將連接源的IP地址添加到云數(shù)據(jù)庫ClickHouse集群的白名單中。如何添加,請參見設置白名單。
如果連接源和云數(shù)據(jù)庫ClickHouse集群不屬于同一個VPC,請先為云數(shù)據(jù)庫ClickHouse集群申請外網(wǎng)地址。
注意事項
通過HTTPS協(xié)議連接云數(shù)據(jù)庫ClickHouse集群會增加網(wǎng)絡連接響應時間。
通過HTTPS協(xié)議連接云數(shù)據(jù)庫ClickHouse集群會顯著增加CPU使用率,建議您在使用外網(wǎng)且有加密需求時,使用HTTPS協(xié)議訪問云數(shù)據(jù)庫ClickHouse。使用VPC網(wǎng)絡相對安全,一般無需使用HTTPS協(xié)議訪問云數(shù)據(jù)庫ClickHouse。
Java JDBC方式連接
使用Eclipse或其他IDE工具創(chuàng)建Maven項目并引入ClickHouse驅(qū)動依賴包。
<dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>0.3.1</version> </dependency>
編寫應用程序代碼。獲取Clickhouse連接對象。
語法如下。
public void run() throws InterruptedException { final ClickHouseProperties clickHouseProperties = new ClickHouseProperties(); clickHouseProperties.setSslRootCertificate("<證書路徑>"); clickHouseProperties.setSsl(true); clickHouseProperties.setSslMode("<SSL Mode,取值:strict、none>"); clickHouseProperties.setUser("<數(shù)據(jù)庫賬號>"); clickHouseProperties.setPassword("<數(shù)據(jù)庫賬號的密碼>"); clickHouseProperties.setSocketTimeout(<超時時間,單位:毫秒>); ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://<外網(wǎng)地址、VPC地址或IP地址>:<HTTPS端口號>/<數(shù)據(jù)庫名稱>?ssl=true", clickHouseProperties); try { final ClickHouseConnection conn = dataSource.getConnection(); conn.createStatement().executeQuery("select now()"); } catch (Throwable e) { e.printStackTrace(); } }
說明如果通過IP地址連接,連接源和云數(shù)據(jù)庫ClickHouse集群需屬于同一個VPC且
SSL Mode
取值為none
。示例如下。
public void run() throws InterruptedException { final ClickHouseProperties clickHouseProperties = new ClickHouseProperties(); clickHouseProperties.setSslRootCertificate("/user/ck-root-ClickHouse-CA-Chain.pem"); clickHouseProperties.setSsl(true); clickHouseProperties.setSslMode("strict"); clickHouseProperties.setUser("test"); clickHouseProperties.setPassword("123456Aa"); clickHouseProperties.setSocketTimeout(2 * 3600 * 1000); ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://cc-****.public.clickhouse.ads.aliyuncs.com:8443/test01?ssl=true", clickHouseProperties); try { final ClickHouseConnection conn = dataSource.getConnection(); conn.createStatement().executeQuery("select now()"); } catch (Throwable e) { e.printStackTrace(); } }
curl命令行方式連接
語法如下。
curl --cacert <證書路徑> https://<外網(wǎng)地址或VPC地址>:<HTTPS端口號>/ping
示例如下。
curl --cacert ./ck-root-ClickHouse-CA-Chain.pem https://cc-bp163l724nkf****.clickhouse.ads.aliyuncs.com:8443/ping