站長阿川

站長阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

站長精心設計,帶你實作 63 個小專案,得到作品集!

立即開始免費試讀!

騰訊雲OpenCloudOS 9系統部署OpenTenBase資料庫詳細教程

OpenTenBase

OpenTenBase簡介

OpenTenBase是一個關係型資料庫集群平台,提供寫入可靠性和多節點資料同步功能。可以在一台或多台主機上配置OpenTenBase,並將資料存儲在多個物理主機上。

OpenTenBase

OpenTenBase架構元件:

  • 協調節點 (Coordinator Node, CN) :應用程式存取入口,負責資料分布和查詢計劃。多個節點位於同一位置,每個節點提供相同的資料庫視圖
  • 資料節點 (Datanode Node, DN) :每個DN存儲用戶資料的分區。在功能上,DN節點負責完成CN分發的執行請求
  • GTM節點 (全域交易管理器, Global Transaction Manager) :負責集群事務信息的管理,以及集群的全域物件(如序列)

系統要求

硬體要求:

  • 記憶體:最低4GB RAM
  • 作業系統:OpenCloudOS 9
  • 伺服器:騰訊雲CVM實例

系統要求

軟體依賴:

gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git

環境準備

1. 更新系統並安裝依賴包

由於OpenCloudOS支持dnf和yum兩種包管理軟體,強烈推薦用戶更多地使用dnf,我們使用dnf來安裝依賴:

# 更新系統
sudo dnf update -y

更新系統

# 安裝OpenTenBase編譯依賴
sudo dnf install -y \
    gcc \
    gcc-c++ \
    make \
    cmake \
    readline-devel \
    zlib-devel \
    openssl-devel \
    uuid-devel \
    bison \
    flex \
    git \
    libcurl-devel \
    libxml2-devel \
    libxslt-devel \
    perl-IPC-Run \
    perl-Test-Simple \
    tcl-devel \
    python3-devel \
    rpm-build \
    pkgconfig \
    krb5-devel \
    openldap-devel

安裝依賴

# 下載zstd原始碼
cd /tmp
wget https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz
tar -xzf zstd-1.5.2.tar.gz
cd zstd-1.5.2

# 編譯安裝
make
sudo make install PREFIX=/usr/local

# 更新庫路徑
sudo ldconfig

# 設置環境變數
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
# 下載lz4原始碼
cd /tmp
wget https://github.com/lz4/lz4/archive/v1.9.4.tar.gz
tar -xzf v1.9.4.tar.gz
cd lz4-1.9.4

# 編譯安裝
make
sudo make install PREFIX=/usr/local

# 更新庫路徑
sudo ldconfig

# 設置環境變數
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
# 首先檢查當前的包管理器狀態
sudo dnf clean all

# 安裝libxml2-devel及其依賴包
sudo dnf install -y \
    libxml2-devel \
    libxml2 \
    cmake-filesystem \
    xz-devel \
    zlib-devel \
    pkgconfig

# 驗證安裝
rpm -qa | grep libxml2
# 檢查xml2-config命令是否可用
which xml2-config

# 檢查pkg-config是否能找到libxml-2.0
pkg-config --exists libxml-2.0 && echo "libxml2 found" || echo "libxml2 NOT found"

# 查看libxml2的配置信息
xml2-config --version
xml2-config --cflags
xml2-config --libs
sudo dnf search cli11
sudo dnf install -y cli11-devel

2. 創建專用用戶

所有需要安裝OpenTenBase集群的機器都需要創建專用用戶:

# 創建數據目錄
sudo mkdir /data

# 創建opentenbase用戶
sudo useradd -d /data/opentenbase -s /bin/bash -m opentenbase

# 設置密碼
sudo passwd opentenbase

3. 切換到opentenbase用戶

su - opentenbase

原始碼編譯安裝

1. 獲取原始碼

cd /data/opentenbase
git clone https://gitee.com/mirrors/OpenTenBase.git

2. 編譯原始碼

# 設置環境變數
export SOURCECODE_PATH=/data/opentenbase/OpenTenBase
export INSTALL_PATH=/data/opentenbase/install
# 進入原始碼目錄
cd ${SOURCECODE_PATH}

# 配置編譯選項
chmod +x configure*
# 編譯和安裝
make distclean 2>/dev/null || true
rm -rf /data/opentenbase/install/opentenbase_bin_v2.0
rm -f config.status config.log
# 重新配置,添加SSE4.2支持
CFLAGS="-g -O2 -w -msse4.2 -mcrc32" \
CXXFLAGS="-g -O2 -w -msse4.2 -mcrc32" \
./configure --prefix=/data/opentenbase/install/opentenbase_bin_v2.0 \
    --enable-user-switch \
    --with-openssl \
    --with-ossp-uuid \
    --with-libxml

# 編譯
make
make install

# 編譯contrib模組
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make
make install

集中式單節點集群配置

1. 配置環境變數

# 編輯bashrc文件
vim ~/.bashrc

# 添加以下內容:
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=$OPENTENBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C

# 生效環境變數
source ~/.bashrc

2. 創建集群配置目錄

mkdir /data/opentenbase/pgxc_ctl
cd /data/opentenbase/pgxc_ctl

3. 創建集中式配置文件

cat > /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf << 'EOF'
#!/usr/bin/env bash

#---- OVERALL -----------------------------------------------------------------------------
pgxcOwner=opentenbase
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=y
configBackupHost=localhost
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak

#---- GTM --------------------------------------------------------------------------------
gtmName=gtm
gtmMasterServer=localhost
gtmMasterPort=6666
gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none

# GTM Slave - disabled
gtmSlave=n
gtmSlaveName=gtmSlave
gtmSlaveServer=none
gtmSlavePort=20001
gtmSlaveDir=none
gtmSlaveSpecificExtraConfig=none

# GTM Proxy - disabled  
gtmProxy=n
gtmProxyNames=()
gtmProxyServers=()
gtmProxyPorts=()
gtmProxyDirs=()
gtmPxyExtraConfig=none
gtmPxySpecificExtraConfig=()

#---- Coordinators --------------------------------------------------------------------
coordMasterDir=/data/opentenbase/data/coord_master
coordSlaveDir=/data/opentenbase/data/coord_slave
coordArchLogDir=/data/opentenbase/data/coord_archlog

# 協調器配置數組 - 所有數組必須有相同數量的元素
coordNames=(cn001)
coordPorts=(30004)
poolerPorts=(30014)
coordForwardPorts=(30024)
coordPgHbaEntries=(0.0.0.0/0)

# Master Coordinators
coordMasterServers=(localhost)  
coordMasterDirs=(/data/opentenbase/data/coord_master/cn001)
coordMaxWALsender=5
coordMaxWALSenders=(5)

# Coordinator Slave - disabled
coordSlave=n
coordSlaveSync=n
coordSlaveServers=(none)
coordSlavePorts=(30005)
coordSlavePoolerPorts=(30015)
coordSlaveForwardPorts=(30025)
coordSlaveDirs=(none)
coordArchLogDirs=(none)

# 配置文件
coordExtraConfig=none
coordSpecificExtraConfig=(none)
coordSpecificExtraPgHba=(none)

#---- Datanodes -----------------------------------------------------------------------  
datanodeMasterDir=/data/opentenbase/data/dn_master
datanodeSlaveDir=/data/opentenbase/data/dn_slave
datanodeArchLogDir=/data/opentenbase/data/datanode_archlog

# 資料節點配置數組 - 所有數組必須有相同數量的元素
primaryDatanode=dn001
datanodeNames=(dn001)
datanodePorts=(20008)
datanodePoolerPorts=(20018)
datanodeForwardPorts=(20028)
datanodePgHbaEntries=(0.0.0.0/0)

# Master Datanodes
datanodeMasterServers=(localhost)
datanodeMasterDirs=(/data/opentenbase/data/dn_master/dn001)
datanodeMaxWalSender=5
datanodeMaxWALSenders=(5)

# Datanode Slave - disabled
datanodeSlave=n
datanodeSlaveServers=(none)
datanodeSlavePorts=(20009)
datanodeSlavePoolerPorts=(20019)
datanodeSlaveForwardPorts=(20029)
datanodeSlaveDirs=(none)
datanodeArchLogDirs=(none)

# 配置文件
datanodeExtraConfig=none  
datanodeSpecificExtraConfig=(none)
datanodeSpecificExtraPgHba=(none)

# WAL Archive - disabled
walArchive=n
EOF
# 檢查配置文件語法
bash -n /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
echo "配置文件語法檢查結果: $?"

# 查看文件內容確認
head -20 /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
# 檢查當前環境變數
echo $PATH
echo $OPENTENBASE_HOME
which initdb
which gtm_ctl
# 退出pgxc_ctl
quit

# 重新設置環境變數
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=$OPENTENBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C

# 驗證命令是否可用
which initdb
which gtm_ctl
which pg_ctl
# 編輯 .bashrc 文件
vim ~/.bashrc

# 添加以下內容到文件末尾:
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=$OPENTENBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C

# 重新加載環境變數
source ~/.bashrc
# 刪除不完整的配置文件
rm /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf

# 重新創建完整配置文件
cat > /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf << 'EOF'
#!/usr/bin/env bash

#---- OVERALL -----------------------------------------------------------------------------
pgxcOwner=opentenbase
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=y
configBackupHost=localhost
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak

#---- GTM --------------------------------------------------------------------------------
gtmName=gtm
gtmMasterServer=localhost
gtmMasterPort=6666
gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none

# GTM Slave - disabled
gtmSlave=n
gtmSlaveName=gtmSlave
gtmSlaveServer=none
gtmSlavePort=20001
gtmSlaveDir=none
gtmSlaveSpecificExtraConfig=none

# GTM Proxy - disabled  
gtmProxy=n
gtmProxyNames=()
gtmProxyServers=()
gtmProxyPorts=()
gtmProxyDirs=()
gtmPxyExtraConfig=none
gtmPxySpecificExtraConfig=()

#---- Coordinators --------------------------------------------------------------------
coordMasterDir=/data/opentenbase/data/coord_master
coordSlaveDir=/data/opentenbase/data/coord_slave
coordArchLogDir=/data/opentenbase/data/coord_archlog

# 協調器配置數組 - 所有數組必須有相同數量的元素
coordNames=(cn001)
coordPorts=(30004)
poolerPorts=(30014)
coordForwardPorts=(30024)
coordPgHbaEntries=(0.0.0.0/0)

# Master Coordinators
coordMasterServers=(localhost)  
coordMasterDirs=(/data/opentenbase/data/coord_master/cn001)
coordMaxWALsender=5
coordMaxWALSenders=(5)

# Coordinator Slave - disabled
coordSlave=n
coordSlaveSync=n
coordSlaveServers=(none)
coordSlavePorts=(30005)
coordSlavePoolerPorts=(30015)
coordSlaveForwardPorts=(30025)
coordSlaveDirs=(none)
coordArchLogDirs=(none)

# 配置文件
coordExtraConfig=none
coordSpecificExtraConfig=(none)
coordSpecificExtraPgHba=(none)

#---- Datanodes -----------------------------------------------------------------------  
datanodeMasterDir=/data/opentenbase/data/dn_master
datanodeSlaveDir=/data/opentenbase/data/dn_slave
datanodeArchLogDir=/data/opentenbase/data/datanode_archlog

# 資料節點配置數組 - 所有數組必須有相同數量的元素
primaryDatanode=dn001
datanodeNames=(dn001)
datanodePorts=(20008)
datanodePoolerPorts=(20018)
datanodeForwardPorts=(20028)
datanodePgHbaEntries=(0.0.0.0/0)

# Master Datanodes
datanodeMasterServers=(localhost)
datanodeMasterDirs=(/data/opentenbase/data/dn_master/dn001)
datanodeMaxWalSender=5
datanodeMaxWALSenders=(5)

# Datanode Slave - disabled
datanodeSlave=n
datanodeSlaveServers=(none)
datanodeSlavePorts=(20009)
datanodeSlavePoolerPorts=(20019)
datanodeSlaveForwardPorts=(20029)
datanodeSlaveDirs=(none)
datanodeArchLogDirs=(none)

# 配置文件
datanodeExtraConfig=none  
datanodeSpecificExtraConfig=(none)
datanodeSpecificExtraPgHba=(none)

# WAL Archive - disabled
walArchive=n
EOF
# 檢查配置文件語法
bash -n /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
echo "語法檢查結果: $?"

# 查看文件完整性
wc -l /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf
tail -10 /data/opentenbase/install/opentenbase_bin_v2.0/pgxc_ctl.conf

配置SSH免密登錄

# 生成SSH密鑰(如果還沒有)
if [ ! -f ~/.ssh/id_rsa ]; then
    ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
fi

# 配置本地免密登錄
ssh-copy-id opentenbase@localhost
# 或者手動添加
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

測試SSH連接

# 測試SSH連接是否正常
ssh opentenbase@localhost "echo 'SSH connection test successful'"
# 重新運行pgxc_ctl

原文出處:https://juejin.cn/post/7544388006721257526


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
站長阿川

站長阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

站長精心設計,帶你實作 63 個小專案,得到作品集!

立即開始免費試讀!