踩坑指南:入門OpenTenBase之部署篇

努力的小雨發表於2024-04-10

引言

OpenTenBase 企業級分散式HTAP開源資料庫,具備高擴充套件性、商業資料庫語法相容、分散式HTAP引擎、多級容災和多維度資源隔離等能力,成功應用在金融、醫療、航天等行業的核心業務系統。

image

這是我第一次參與開源專案,所以感到有些摸不著頭腦。我看了一下原始碼,發現它是用C語言開發的,這讓我更加頭疼。不過,不管是哪個開源專案,都會存在各種問題(issue)。選擇一些簡單或中級的開發任務來練習還是一個不錯的主意。畢竟,這是一個鍛鍊自己的機會。在現實工作中,沒有任何公司會容忍一個缺乏基礎的開發人員去練習,因為那可能導致生產事故。因此,開源專案是一個快速提升自己能力的途徑。

如果你也對此感興趣,可以參考這個連結:https://competition.atomgit.com/?utm_source=atomgit

要開始參與專案,首先要從部署和啟動開始。如果沒有本地的開發環境,是不可能真正加入其中的。

開始踩坑

官方原始碼地址:git clone https://github.com/OpenTenBase/OpenTenBase

在這篇文章中,我以Centos 8為例展示瞭如何進行部署。如果你需要了解基本的安裝操作步驟,可以參考這個連結:https://docs.opentenbase.org/guide/01-quickstart

我就不再一一演示這些基本步驟了,而是想分享一些官方文件中沒有提及的各種奇葩問題的解決方法。

uuid-devel匹配不到

上來第一步就發現了問題,當執行環境依賴安裝時yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git

在Centos 8系統上,可能會遇到一個錯誤提示:找不到 uuid-devel 軟體包。這是因為在Centos 8的預設軟體倉庫中找不到 uuid-devel 軟體包,儘管 uuid-devel 實際上是一個必需的依賴項。此外,安裝類似uuid依賴包也無法解決問題,否則在執行configure命令時可能會出現錯誤提示:configure: error: library 'ossp-uuid' or 'uuid' is required for OSSP UUID

幸運的是,CentOS的“PowerTools”軟體庫中包含了 uuid-devel 軟體包,但預設情況下未啟用。要啟用該軟體庫,可以使用以下命令dnf config-manager --set-enabled powertools,如果沒有dnf命令,則執行一下:yum install dnf-plugins-core

configure: error: readline library not found

在執行configure命令時報錯:configure: error: readline library not found

如果遇到這個問題,可以嘗試執行以下命令來安裝必要的依賴包:yum -y install gcc make readline-devel即可

確保所有的依賴環境都已安裝完畢後,再執行make -sj命令。在執行這一步之前,請確保剩餘可用記憶體大於等於4G,以避免記憶體溢位問題。儘管官方文件建議最低記憶體為4G,但我建議你將記憶體擴大至8G,以確保後續執行init all命令時不會遇到各種奇怪的問題。切記,不要將記憶體設定得過低,否則可能會導致後續命令的異常行為。

環境及ssh

執行vim ~/.bashrc編輯系統環境變數後記得source ~/.bashrc,要不然無法找到命令pgxc_ctl

在叢集部署過程中,只有一臺伺服器需要進行編譯操作,其他伺服器只需進行環境變數配置、使用者及目錄設定以及SSH連線的配置。這樣設計的原因是因為在執行deploy all命令時,已經編譯好的安裝包會被髮送到其他機器上。

為了實現叢集節點機器之間的SSH無密碼登入,首先需要在各個節點機器上配置好SSH金鑰認證。這樣一來,在部署和初始化過程中,可以透過SSH連線到每個節點的機器而無需輸入密碼。在這個過程中,需要確保已經打通了第二臺及其IP的SSH連線,並且也打通了自己機器的SSH連線。

ssh-copy-id -i ~/.ssh/id_rsa.pub destination-user@destination-server

啟動和節點排查

在進行叢集部署時,接下來的步驟是使用pgxc_ctl進行部署。如果對pgxc_ctl的命令不熟悉,可以透過使用help命令來檢視幫助文件。在我的機器上,當我執行monitor all命令時,只能顯示一個資訊然後程式強制退出,這表明肯定有節點啟動失敗了。因此,建議單獨使用monitor命令來檢視各個節點的狀態,以便更清楚地瞭解每個節點的執行情況。

image

如果某一個一直無法正常啟動,比如顯示gtm_ctl: another server might be running; trying to start server anyway,那麼可能會是你沒有正常關閉,通常需要你手動去刪除對應的pid檔案,

本次以gtm為例,如果不知道的pid檔案位置在哪裡,那麼可以使用find / -name '*gtm*.pid',找到後刪除對應的檔案即可。然後再次啟動start all。

如果還是無法啟動,那麼則可以去看下對應日誌,還以gtm為例。cd /data/opentenbase/data/gtm/slave/gtm_log進入對應日誌目錄,然後檢視日誌。我這裡顯示的最後是

image

建議考慮進行擴容操作。顯然這裡資源不足。如果你的記憶體已經達到了8GB,那麼可以考慮進一步擴充套件CPU資源至2核心。我目前的系統只有1核心的CPU,顯然已經不夠用了,擴容後系統效能應該會恢復正常。

image

總結

透過本次經歷,我瞭解了OpenTenBase開源專案的基本情況以及參與該專案的一些經驗和技巧。作為一個初次參與開源專案的成員,建議選擇簡單或中級的開發任務來練習,因此,透過參與開源專案,我們不僅可以提升自己的技術能力,還可以學習到解決問題的方法,為未來的工作和學習打下堅實的基礎。

相關文章