故障分析 | OceanBase Proxy 无法连接 OBserver 集群
作者:賁紹華
愛可生研發(fā)中心工程師,負(fù)責(zé)項目的需求與維護工作。其他身份:柯基鏟屎官。
本文來源:原創(chuàng)投稿
*愛可生開源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請聯(lián)系小編并注明來源。
一、問題現(xiàn)象:
使用RPM的方式部署proxy實例,部署之后使用OBclient進行連接,報錯提示:
ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 11
二、介紹:
2.1 OceanBase介紹:
OceanBase是企業(yè)級開源分布式 HTAP(Hybrid Transaction/Analytical Processing)數(shù)據(jù)庫,具有原生分布式架構(gòu),支持金融級高可用、透明水平擴展、分布式事務(wù)、多租戶和語法兼容等企業(yè)級特性。
OceanBase 數(shù)據(jù)庫采用 Shared-Nothing 架構(gòu),各個節(jié)點之間完全對等,每個節(jié)點都有自己的 SQL 引擎、存儲引擎,運行在普通PC服務(wù)器組成的集群之上,具備可擴展、高可用、高性能、低成本、云原生等核心特性。
2.2 OBproxy介紹:
OceanBase Database Proxy(簡稱 ODP)是 OceanBase 數(shù)據(jù)庫專用的代理服務(wù)器。OceanBase 數(shù)據(jù)庫的用戶數(shù)據(jù)以多副本的形式存放在各個 OBServer 上,ODP 接收用戶發(fā)出的 SQL 請求,并將 SQL 請求轉(zhuǎn)發(fā)至最佳目標(biāo) OBServer,最后將執(zhí)行結(jié)果返回給用戶。
三、相關(guān)說明:
3.1 版本與架構(gòu):
OceanBase:3.1.4
OceanBase proxy:3.2.3.5
OceanBase實例數(shù):1 臺(10.186.60.96)
OceanBase proxy實例數(shù):1臺 (172.20.134.5)
3.2 OBproxy的兩種啟動模式:
OBproxy配置代理的數(shù)據(jù)庫集群是通過啟動參數(shù)來設(shè)置的,目前支持如下兩種形式進行指定數(shù)據(jù)庫集群:
-
ConfigURL(代理多個數(shù)據(jù)庫集群):
多集群啟動方式,即該 OBProxy 集群可訪問多個 OceanBase 集群。OCP管理平臺自身已集成該服務(wù),
如果是開源版的可以參考該倉庫進行ConfigURL服務(wù)的部署:https://github.com/oceanbase/oceanbase/tree/master/tools/ob-configserver
-
RSList(僅代理單個數(shù)據(jù)庫集群):
單集群啟動方式,即該 OBProxy 集群僅可訪問創(chuàng)建 OBProxy 集群時指定的那個 OceanBase 集群,OBProxy 實例啟動成功后不可動態(tài)追加可連接的 OceabBase 數(shù)據(jù)庫集群。配置形式為,OceanBase數(shù)據(jù)庫集群的root service列表:192.168.0.1:2881,192.168.0.2:2881
四、操作流程:
以下操作均使用開源版本RPM手動部署部署的方式進行,未使用OBD與OCP。
1.登錄OceanBase數(shù)據(jù)庫內(nèi),新建proxyro用戶并設(shè)置密碼為123456,添加授權(quán):
$ obclient -h10.186.60.96 -uroot@sys -P2881 -p -c -A Enter password: obclient> CREATE USER proxyro IDENTIFIED BY '123456'; Query OK, 0 rows affectedobclient> GRANT SELECT ON *.* TO proxyro; Query OK, 0 rows affectedobclient> SHOW GRANTS FOR proxyro; +----------------------------------+ | Grants for proxyro@% | +----------------------------------+ | GRANT SELECT ON *.* TO 'proxyro' | +----------------------------------+ 1 row in set2.使用RPM安裝proxy:
SUDO rpm -ivh --force /tmp/obproxy-ce-3.2.3.5-2.el7.x86_64.rpm3.啟動proxy實例:
cd /home/admin/obproxy-3.2.3.5 && ./bin/obproxy -p 2883 -l 2884 -n test-proxy -o observer_sys_password=7c4a8d09ca3762af61e59520943dc26494f8941b -c ‘ob_xxxxxxxx’ -r “10.186.60.96:2882”4.啟動OBproxy進程,并為其增加守護進程:
# 返回當(dāng)前proxy實例的進程數(shù),如果為1則代表已啟動 [root@localhost]# pgrep -c obproxy | xargs --no-run-if-empty # 啟動proxy守護進程shell,使用RPM的形式進行安裝時。會在bin目錄提供管理用的shell文件 [root@localhost]# bin/obproxyd.sh -c checkalive -r -n test-proxy -p 2883 -t 10.186.60.96:2882 -s ob_xxxxxxxx & # 再次檢測proxy實例進程數(shù),如果為2則代表符合預(yù)期:實例進程 + checkealive守護進程 [root@localhost]# pgrep -c obproxy | xargs --no-run-if-empty5.登入OBproxy查看配置是否正確,嘗試通過proxy實例連接數(shù)據(jù)庫集群,連接失敗:
五、診斷過程:
5.1 檢查實例進程:
進程運行正常,符合預(yù)期。且運行用戶為admin(根據(jù)官方手冊說明,如果在非部署目錄或使用非admin用戶運行會導(dǎo)致一些奇怪的問題出現(xiàn))
5.2 root service list參數(shù)檢查:
proxy要代理那臺數(shù)據(jù)庫實例是通過RSlist參數(shù)決定的,登入proxy實例,查看proxy內(nèi)的root service list參數(shù),存在10.186.90.63
5.3 日志檢查
觀察obproxy.log發(fā)現(xiàn)兩條警告信息,意思為無法通過RSlist找到集群名為XXXX的數(shù)據(jù)庫集群
5.4 確認(rèn)數(shù)據(jù)庫集群名稱
登入OceanBase數(shù)據(jù)庫集群,查看集群名稱,確認(rèn)與啟動參數(shù)中指定的名稱一致
SELECT * FROM `v$ob_cluster`5.5 檢查proxy連接賬號:
檢查OceanBase數(shù)據(jù)庫集群內(nèi)是否存在proxyro的連接賬號(用戶名必須為這個),且密碼是否符合預(yù)期;
六、結(jié)論:
最后經(jīng)過官方大佬——序風(fēng)遠程支持,定位到問題原因:
啟動參數(shù)中root service list的IP:Port中的端口,應(yīng)為OceanBase數(shù)據(jù)庫的SQL port端口2881,而不是2882(RPC端口)
這次的問題引起的原因其實很好理解,但是排查起來比較費勁兒(進程能正常啟動運行、日志只有找不到數(shù)據(jù)庫集群名的錯誤、各項數(shù)據(jù)源確認(rèn)也都符合預(yù)期),回頭來看排查過程中遺漏了一個確認(rèn)點,就是沒有在數(shù)據(jù)庫集群上驗證RSlist參數(shù)的正確性。
七、其他:
使用過程中發(fā)現(xiàn)了兩處缺陷,分別是:
a. obproxyd.sh腳本的啟動參數(shù)說明有誤
b. obproxyd.sh腳本結(jié)束符存在錯誤導(dǎo)致無法運行
已向官方提交了PR,感興趣的可以關(guān)注一下:https://github.com/oceanbase/obproxy/pull/28
另外提一點建議:
在RSlist模式下,當(dāng)啟動參數(shù)出現(xiàn)錯誤時可以嘗試在啟動實例進程時嘗試與數(shù)據(jù)庫實例建立連接并校驗參數(shù)正確性。如不符合預(yù)期可以退出進程將錯誤輸出至STD上。或者在detail日志內(nèi)增加一些描述,如:為什么找不到集群的cluster_name。這樣會更方便定位問題。
最后祝OceanBase開源社區(qū)越辦越紅火,給你們的響應(yīng)速度點贊!(社區(qū)工單有專人輪值,一般三小時內(nèi)都有回復(fù))
總結(jié)
以上是生活随笔為你收集整理的故障分析 | OceanBase Proxy 无法连接 OBserver 集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部署asp.net mvc_在ASP.N
- 下一篇: Cadence Allegro学习之铜皮