【GaussDB數據庫----連接】

1. 確認連接信息

客戶端工具通過CN連接數據庫。因此連接前,需獲取CN所在服務器的IP地址及CN的端口號信息。客戶端工具可以通過任何一個CN連接數據庫。

  1. 以操作系統用戶omm登錄安裝有MPPDB服務的任一主機。執行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令啓動環境變量。

  2. 使用“gs_om -t status --detail”命令查詢集羣各實例情況。

gs_om -t status --detail
[ Coordinator State ]

node        node_ip         instance                                  state
-----------------------------------------------------------------------------
1  plat1 192.168.0.11  5001 /srv/BigData/mppdb/data1/coordinator Normal
2  plat2 192.168.0.12  5002 /srv/BigData/mppdb/data1/coordinator Normal
3  plat3 192.168.0.13  5003 /srv/BigData/mppdb/data1/coordinator Normal
  1. 確認端口號。
    在數據路徑下的postgresql.conf文件中查看端口號信息(步驟2中獲取到的路徑)
cat /srv/BigData/mppdb/data1/coordinator/postgresql.conf | grep port
port = 25308    # (change requires restart)

2. 配置服務端遠程連接

進行遠程連接前,需要在所有部署了CN的機器上設置允許客戶端訪問數據庫,並配置遠程連接。

以下步驟需要在集羣的每個CN所在主機上執行。

以操作系統用戶omm登錄CN所在主機,執行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令啓動環境變量。

1. 配置客戶端接入認證

如果主機需要遠程連接數據庫,必須在數據庫系統的配置文件中增加此主機的信息,並且進行客戶端接入認證。配置文件(默認名稱爲pg_hba.conf)存放在數據庫的數據目錄裏。GaussDB支持如下三種認證方式:

基於主機的認證:服務器端根據客戶端的IP地址、用戶名及要訪問的數據庫來查看配置文件從而判斷用戶是否通過認證。
口令認證:包括遠程連接的加密口令認證和本地連接的非加密口令認證。
SSL加密:使用VPP(通用協議平臺)提供服務器端和客戶端安全連接的環境。

配置客戶端認證方式,允許客戶端以“jack”用戶連接到本機,此處遠程連接禁止使用“omm”用戶。例如,下面示例中配置允許IP地址爲10.10.0.30的客戶端訪問本機。

gs_guc set -Z coordinator -N all -I all -h "host all jack 10.10.0.30/32 sha256"

參數說明

使用“jack”用戶前,需先本地連接數據庫,並在數據庫中使用如下語句建立“jack”用戶:
  CREATE USER jack PASSWORD 'Gaussdba@Mpp';
-Z coordinator表示實例類型爲coordinator。
-N all表示集羣的所有主機。
-I all表示主機的所有實例。
-h表示指定需要在“pg_hba.conf”增加的語句。
all表示允許客戶端連接到任意的數據庫。
jack表示連接數據庫的用戶。
10.10.0.30/32表示只允許IP地址爲10.10.0.30的主機連接。此處的IP地址不能爲集羣內的IP,在使用過程中,請根據用戶的網絡進行配置修改。32表示子網掩碼爲1的位數,即255.255.255.255
sha256表示連接時jack用戶的密碼使用sha256算法加密。

這條命令在所有CN實例對應的“pg_hba.conf”文件中添加了一條規則,用於對連接CN的客戶端進行鑑定。pg_hba.conf文件中的每條記錄可以是下面四種格式之一

local     DATABASE USER METHOD [OPTIONS]
host      DATABASE USER ADDRESS METHOD [OPTIONS]
hostssl   DATABASE USER ADDRESS METHOD [OPTIONS]
hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]

因爲認證時系統是爲每個連接請求順序檢查pg_hba.conf裏的記錄的,所以這些記錄的順序是非常關鍵的

a.在配置“pg_hba.conf”文件時,請依據通訊需求按照格式內容從上至下配置記錄,優先級高的需求需要配置在前面。GaussDB 集羣和擴容配置的IP優先級最高,用戶手動配置的IP請放在這二者之後,如果已經進行的客戶配置和擴容節點的IP在同一網段,請在擴容前刪除,擴容成功後再進行配置。

b.若服務端pg_hba.conf文件配置了hostssl,postgresql.conf中必須開啓SSL認證模式。

c.靠前的記錄有比較嚴格的連接參數和比較弱的認證方法。靠後的記錄有比較寬鬆的連接參數和比較強的認證方法。

d.一個用戶要想成功連接到特定的數據庫,不僅需要通過pg_hba.conf中的規則檢查,還必須要有該數據庫上的CONNECT權限。如果希望控制某些用戶只能連接到指定數據庫,賦予/撤銷CONNECT權限通常比在pg_hba.conf中設置規則更爲簡單。

e.對應集羣外部客戶端連接,trust爲不安全的認證方式,請將認證方式設置爲sha256。

常見異常
在這裏插入圖片描述
示例

TYPE  DATABASE        USER            ADDRESS                 METHOD

"local" is for Unix domain socket connections only
#表示只允許以安裝時-U參數指定的用戶從服務器本機進行連接。
local   all             all                                     trust
IPv4 local connections:
#表示允許omm用戶從10.10.0.50主機上連接到任意數據庫,使用sha256算法對密碼進行加密。
host    all           omm             10.10.0.50/32            sha256
#表示允許任何用戶從10.10.0.0/24網段的主機上連接到任意數據庫,使用sha256算法對密碼進行加密,並且經過SSL加密傳輸。
hostssl    all             all             10.10.0.0/24            sha256
#表示允許任何用戶從10.10.0.0/24網段的主機上連接到任意數據庫,使用Kerberos認證方式。
host    all             all             10.10.0.0/24            gss         include_realm=1        krb_realm=HADOOP.COM

2. [可選]配置listen_addresses

如果是雙平面部署,GaussDB 部署在數據庫業務平面,遠程連接的客戶端在客戶的業務網絡。必須使GaussDB 的CN監聽CN所在服務器的客戶業務網絡IP(由於部署在數據庫業務平面,默認只監聽數據庫業務平面IP),遠程客戶端才能夠連接GaussDB 的CN。使用如下命令查看CN目前的listen_addresses配置。

gs_guc check -Z coordinator -I all -c “listen_addresses”

expected guc information: plat1: listen_addresses=NULL: [/gaussdb/data/data_cn/postgresql.conf]
gs_guc check: plat1: listen_addresses='localhost, 192.168.0.100': [/gaussdb/data/data_cn/postgresql.conf]

Total GUC values: 1. Failed GUC values: 0.
The value of parameter listen_addresses is same on all instances.
    listen_addresses='localhost, 192.168.0.100'

使用如下命令把要添加的IP追加到listen_addresses後面,多個配置項之間用英文逗號分隔。例如,追加IP地址10.11.12.13

gs_guc set -I all -Z coordinator -c "listen_addresses='localhost,192.168.0.100,10.11.12.13'"

執行如下命令重啓集羣

gs_om -t stop && gs_om -t start

3. 使用gsql連接

1. 本地連接數據庫

  1. 以操作系統用戶omm登錄CN所在主機,執行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令啓動環境變量。

  2. 數據庫安裝完成後,默認生成名稱爲postgres的數據庫。第一次連接數據庫時可以連接到此數據庫。

執行如下命令連接數據庫。

gsql -d postgres -p 25308

其中postgres爲需要連接的數據庫名稱,25308爲CN的端口號。請根據實際情況替換。連接成功後,系統顯示類似如下信息:

gsql ((GaussDB Kernel V300R002C00 build 50dc16a6) compiled at 2019-01-29 05:49:21 commit 1071 last mr 1373)
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

postgres=#

a. omm用戶是管理員用戶,因此係統顯示“DBNAME=#”。若使用普通用戶身份登錄和連接數據庫,系統顯示“DBNAME=>”。

b. “Non-SSL connection”表示未使用SSL方式連接數據庫。如果需要高安全性時,請使用用SSL進行安全的TCP/IP連接。

退出數據庫。

\q

2. 遠程連接數據庫

1.完成遠程連接配置,操作步驟參見配置服務端遠程連接。
2.安裝並配置GaussDB 200客戶端工具。
3.數據庫安裝完成後,默認生成名稱爲postgres的數據庫。第一次連接數據庫時可以連接到此數據庫。

gsql -d postgres -h 10.10.0.11 -U jack -p 25308 -W Gaussdba@Mpp

postgres爲需要連接的數據庫名稱,10.10.0.11爲CN所在的服務器IP地址,jack爲連接數據庫的用戶,25308爲CN的端口號,Gaussdba@Mpp爲連接數據庫用戶jack的密碼。

注意:不在同一網段時,-h指定的IP地址應爲Manager界面上所設的“mppdb.coo.cooListenIp2”(應用訪問IP)的取值。禁止使用omm用戶進行遠程連接數據庫。

4. 使用psql連接

當前數據庫支持使用開源PostgreSQL的客戶端psql連接,連接參數與gsql類似。使用psql連接前請確認完成以下步驟:

export PATH=/opt/pgsql/bin:$PATH
/opt/pgsql爲PostgreSQL的安裝目錄,psql存放在其安裝目錄下的bin文件夾。

添加PostgreSQL的lib庫目錄到環境變量LD_LIBRARY_PATH,確保psql執行時使用的是PostgreSQL的動態庫。

export LD_LIBRARY_PATH=/opt/pgsql/lib:$LD_LIBRARY_PATH
/opt/pgsql/lib爲PostgreSQL的lib庫目錄。

本地連接數據庫時,需添加環境變量PGHOST,指向數據庫guc參數unix_socket_directory的值。

a.確保執行psql的本地用戶對該路徑下的文件有讀寫權限。
b.如果沒有讀寫權限,可使用-h 127.0.0.1連接數據庫。

psql -h 127.0.0.1 -p 25308 -d postgres -U jack

postgres爲需要連接的數據庫名稱,jack爲連接數據庫的用戶,25308爲CN的端口號。
注意:遠程連接數據庫時,在確認以上步驟的同時請確保完成遠程連接配置
在這裏插入圖片描述
常見問題處理
authentication method 10 not supported
使用開源客戶端碰到此問題,可能原因:數據庫中存儲的口令校驗只存儲了SHA256格式哈希,而開源客戶端只識別MD5校驗,雙方校驗方法不匹配報錯。或者,是因爲遠程連接時-U傳入的用戶不存在。

a.數據庫並不存儲用戶口令,只存儲用戶口令的哈希碼。
b.早期版本(V100R002C80SPC300之前的版本)的數據庫只存儲了SHA256格式的哈希,並未存儲MD5的哈希,所以無法使用MD5做用戶口令校驗。
c.新版本(V100R002C80SPC300及之後版本)的數據庫當用戶更新用戶口令或者新建用戶時,會同時存儲兩種格式的哈希碼,這時將兼容開源的認證協議。
d.但是當老版本升級到新版本時,由於哈希的不可逆性,所以數據庫無法還原用戶口令,進而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,導致仍然無法使用MD5做口令認證。

要解決該問題,可以更新用戶口令(ALTER USER);或者新建一個用戶(CREATE USER),賦於同等權限,使用新用戶連接數據庫。

undefined symbol: pqsignal
使用客戶端碰到此問題,可能原因:未將PostgreSQL的lib庫目錄添加到環境變量LD_LIBRARY_PATH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章