本文介紹DBGateway的目錄結構、基本操作和常見問題處理。
DBGateway目錄結構
dbgateway
|-- bin
| |-- dbgateway
| \-- dbgateway-manager
|-- conf
| |-- dbgateway.conf
| \-- server.crt
\-- log
|-- dbgateway.err
|-- dbgateway.log
\-- dbgateway_manager.log
bin目錄下包含dbgateway(主程序)和dbgateway-manager(DBGateway管理腳本,用于維護DBGateway)。
conf目錄下包含dbgateway.conf(DBGateway配置文件)和server.crt(通信公鑰)。
log目錄下包含dbgateway.err(DBGateway錯誤輸出)、dbgateway.log(DBGateway的日志)和dbgateway_manager.log(DBGateway管理腳本日志)。
DBGateway的基本操作
查看DBGateway日志
DBGateway日志文件全路徑為:/opt/dbgateway/log/dbgateway.log。
日志文件以文本格式存儲,因此可以用vim、tail、cat和less等常規工具查看日志。
當DAS產品客服或技術人員需要您提供DBGateway日志輔助排查問題時,可以登錄部署DBGateway的服務器使用以下命令,查看最近200條日志,并將這些日志提供給產品客服或技術人員。
tail -n 200 /opt/dbgateway/log/dbgateway.log
判斷DBGateway進程是否正在運行
登錄DAS控制臺。
在左側導航欄中,單擊DBGateway管理。
在DBGateway管理界面,查看目標DBGateway的當前狀態。
當前狀態顯示正常時,表示DBGateway進程正在運行,否則請在部署DBGateway的服務器上執行以下命令:
/opt/dbgateway/bin/dbgateway-manager -d status
當DBGateway進程正在運行時,返回:
DBGateway is running.
DBGateway進程不存在時,返回:
DBGateway is dead.
說明本步驟只用于判斷DBGateway進程是否正在運行,無法判斷其是否正常工作。
重啟DBGateway
依照上述步驟,判斷DBGateway進程是否正在運行。
重啟DBGateway。
DBGateway進程正在運行時:
在DBGateway管理界面,單擊目標DBGateway操作列的
。在部署DBGateway的服務器上執行以下命令:
/opt/dbgateway/bin/dbgateway-manager -d restart
DBGateway進程不存在時:
此時無法在DAS控制臺界面上操作,僅支持使用命令重啟。在部署DBGateway的服務器上執行以下命令:
/opt/dbgateway/bin/dbgateway-manager -d restart
升級DBGateway
在DBGateway管理界面,單擊目標DBGateway操作列的
。停止DBGateway
在DBGateway管理界面,單擊目標DBGateway操作列的
。在部署DBGateway的服務器上執行以下命令:
/opt/dbgateway/bin/dbgateway-manager -d stop
刪除DBGateway
說明刪除DBGateway后,與之相關的數據庫實例的DAS所有功能將無法使用。
當前狀態為正常的DBGateway無法直接刪除,請先停止該DBGateway后再進行刪除。
在DBGateway管理界面,單擊目標DBGateway操作列的
。可選:在部署DBGateway的服務器上執行如下命令刪除DBGateway安裝目錄。
rm -rf /opt/dbgateway
重裝DBGateway
刪除DBGateway后,使用接入數據庫實例時由DAS控制臺獲取的部署命令,在目標服務器重新部署DBGateway。
DBGateway部署問題排查
使用集中模式的數據庫網關或者使用主機模式的數據庫網關接入數據庫實例時,可以獲取部署DBGateway的命令。本文以如下部署命令為例,其中vpcID及token僅用于舉例,實際使用中請以獲取的部署命令為準。
無法下載DBGateway部署腳本
如果出現
wget command not found
提示,說明當前系統中缺少wget
命令,請使用以下命令安裝wget
:sudo apt-get install wget
或
yum -y install wget
檢查當前服務器的網絡是否與阿里云OSS網絡連通。
在當前服務器中
ping
阿里云OSS的域名。本文中,以hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com
為例,實際使用中請以獲取的部署命令為準。ping hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com
如果返回如下內容,說明域名無法解析,請檢查您的DNS解析服務器設置是否正確,且其域名解析是否正常工作。
ping: unknown host hdm-dbgateway-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com
如果
ping
域名后長時間沒有任何輸出及返回,說明網絡無法連通,請檢查:服務器的網絡配置是否正常。
服務器所在網絡接入類型(公網或專有網絡)是否選擇正確。
網絡接入類型為專有網絡時,是否選擇了正確的地域。
測試當前服務器是否與DAS服務器連通
在需要部署DBGateway的服務器執行如下命令。本文中,以DAS服務器域名為
master-hdm-cn-hangzhou.aliyuncs.com
舉例,實際使用中請以獲取的部署命令為準。telnet master-hdm-cn-hangzhou.aliyuncs.com 80
如果返回
Name or service not known
,說明域名無法解析,請檢查您的DNS解析服務器設置是否正確,且其域名解析正常工作。如果返回
Trying
IP地址,例如Trying 10.0.XX.XX
,則表示網絡不通,請檢查:服務器的網絡配置是否正常。
服務器所在網絡接入類型(公網或專有網絡)是否選擇正確。
網絡接入類型為專有網絡時,是否選擇了正確的地域。
如果返回如下內容:
Connected to master-hdm-cn-hangzhou.aliyuncs.com. Escape character is '^]'.
表示已經與DAS服務器正常連通。如果DBGateway仍然無法啟動,需要參考上文,查看 DBGateway日志進行進一步排查。
DBGateway運行異常排查
驗證失敗或權限不足
確保創建授權賬號及密碼時,具有以下權限。本文以授權賬號為das_test舉例。
MySQL
CREATE USER 'das_test'@'%' IDENTIFIED BY 'password'; GRANT SHOW DATABASES, PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'das_test'@'%'; GRANT SELECT ON *.* TO 'das_test'@'%';
PostgreSQL
CREATE USER das_test PASSWORD 'password'; GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO das_test; /* 可選執行,用于采集慢日志和SQL */ ALTER USER das_test WITH SUPERUSER;
MongoDB
use admin; db.createUser({user:'das_test',pwd:'password',roles:[{role:'readAnyDatabase', db:'admin'}, {role:'clusterMonitor', db:'admin'}, {role: 'hostManager', db: 'admin'}]})
如果出現
(Unauthorized) not authorized on admin to execute command
報錯,可再賦予授權賬號如下權限:db.grantRolesToUser("das_test", [{db: "local", role: "dbAdmin"},{db: "config", role: "dbAdmin"},{db: "admin", role: "dbAdminAnyDatabase"}])
Redis
Redis沒有賬號概念,因此僅需要保證密碼正確。修改Redis密碼時,需要修改其配置文件中requirepass選項并重啟Redis服務。請參考Redis configuration。
確保授權的賬號及密碼正確,建議在DBGateway所在服務器上以授權賬號及密碼遠程連接數據庫實例排查。
重啟DBGateway并觀察實例授權是否成功。
推薦升級到DBGateway最新版。
無法連接
無法連接是由于DBGateway無法連接數據庫實例導致,請按照以下可能的原因逐一排查:
檢查數據庫實例是否正常運行。
數據庫實例(MySQL、PostgreSQL、MongoDB和Redis等)如果未正常運行,請檢查這些實例的進程是否存在。
檢查DBGateway所在服務器與數據庫實例(MySQL、PostgreSQL、MongoDB和Redis等)間網絡是否連通。請執行以下命令確認:
telnet 數據庫實例IP或域名 數據庫實例服務端口號
例如:
telnet 192.168.XX.XX 3306
如出現以下提示,表示網絡連接正常,需要參考上文,查看DBGateway日志進行進一步排查。
Connected to 192.168.XX.XX Escape character is '^]'.
如沒有出現以上提示,則說明為網絡連通性問題,通常由服務器之間網絡隔離、路由設置、防火墻或數據庫實例拒絕非本地連接導致的。
監控異常
檢查DBGateway的運行狀態。
嘗試重啟DBGateway,并觀察監控是否恢復。
推薦升級到DBGateway最新版。
長時間
已授權,驗證中
一般情況下,正確授權1~2分鐘后,實例接入狀態會變為連接正常。如長時間(超過2分鐘)顯示
已授權,驗證中
:檢查DBGateway的運行狀態。
嘗試重啟DBGateway并觀察實例授權是否成功。
推薦升級到DBGateway最新版。