ITPub博客

首页 > 数据库 > 国内数据库 > OpenTenBase安装部署速成指南(新手上路)

OpenTenBase安装部署速成指南(新手上路)

原创 国内数据库 作者:六月的雨在ITPUB 时间:2025-09-07 17:40:37 0 删除 编辑

在开始我们今天的 OpenTenBase 安装部署操作之前,我们先来了解一下我们的主角:OpenTenBase。那么什么是 OpenTenBase?

什么是OpenTenBase

OpenTenBase 是腾讯 云数据库 TDSQL 团队研发的企业级分布式 HTAP 开源 数据库,集高扩展性、高 SQL 兼容度、完整的分布式事务支持、多级 容灾能力以及多维度资源隔离等能力于一身,已经成功应用在金融、政府、电信、医疗等行业的核心业务系统。目前数据库拥有双内核,可以 100% 兼容  MySQL 和  PostgreSQL,部分场景兼容 Oracle,两个内核均可独立部署。

从OpenTenBase 的官网: https://www.opentenbase.org/ 我们可以看到OpenTenBase 的核心特性,这里我就不再单独描述,而是直接贴图了

三大模块

OpenTenBase主要包括以下三大模块:

  • Coordinator:协调节点(简称CN)

    业务访问入口,负责数据的分发和查询规划,多个节点位置对等,每个节点都提供相同的数据库视图;在功能上CN上只存储系统的全局元数据,并不存储实际的业务数据。

  • Datanode:数据节点(简称DN)

    每个节点还存储业务数据的分片在功能上,DN节点负责完成执行协调节点分发的执行请求。

  • GTM:全局事务管理器(Global Transaction Manager)

    负责管理集群事务信息,同时管理集群的全局对象,比如序列等。

    分布式集群架构如下

OpenTenBase下载地址: GitHub - OpenTenBase/OpenTenBase: OpenTenBase is an enterprise-level distributed HTAP open source database.

资源准备

系统要求

根据 OpenTenBase 源码编译安装系统要求:

Memory: 4G RAM minimum

OS: TencentOS 2, TencentOS 3, OpenCloudOS, CentOS 7, CentOS 8,  Ubuntu

这里我们可以考虑直接实用腾讯云 轻量应用服务器来作为载体部署OpenTenBase。

轻量应用服务器

那么为什么选择腾讯云轻量应用服务器呢?轻量应用服务器 TencentCloud Lighthouse 更聚焦于中小企业、开发者、 云计算入门者、学生等用户群体。相比 云服务器  CVM 更加简单易用,精简了云服务器 CVM 的高阶概念及功能,提供高带宽流量包并以高性价比的套餐形式整体售卖基础云资源,将热门开源软件融合打包实现一键构建应用,更适合于支撑中小型网站、Web 应用、博客、论坛、 小程序/小游戏、电商、专属游戏服、云盘/图床、云端开发测试和学习环境等轻量级、中低负载且访问量适中的应用场景。

通过控制台搜索【轻量应用服务器】打开轻量应用服务器控制台:https://console.cloud.tencent.com/lighthouse/instance/index?rid=8 点击【立即选购】

这里我们选择,应用创建方式为【基于操作系统镜像】创建,操作系统镜像选择为【OpenCloudOS 9】套餐规格选择【2核4G】,其他选项默认,勾选同意协议后选择【立即购买】

在确认订单信息页面确认完订单信息之后,完成支付,再次回到轻量应用服务器 控制台可以看到我们的 服务器已经正常运行

安装部署

在完成了资源准备之后,我们就可以登录我们的轻量应用服务器 进行我们的 OpenTenBase 部署安装操作了。

在腾讯云轻量应用服务器 控制台点击服务器信息右上角的【登录】

在登录弹窗页面选择默认的登录方式后,直接点击【登录】即可成功登录腾讯云轻量应用服务器,登录操作特别简单省心。

安装依赖

登录腾讯云TCL服务器之后,就可以执行命令安装依赖

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex cmake postgresql-devel git libssh2-devel sshpass

OpenTenBase 依赖安装成功如图展示

创建opentenbase用户

创建我们的 OpenTenBase 用户,这里需要注意的是,对于所有需要安装OpenTenBase集群的机器上都需要创建,这里我们只需要对我们当前的这台轻量应用服务器 创建即可

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
mkdir /data
useradd -d /data/opentenbase -s /bin/bash -m opentenbase
passwd opentenbase
# 将用户添加到wheel组
usermod -aG wheel opentenbase

执行命令并输入 opentenbase 用户密码,这里的密码需要 包含 大写字母,小写字母及数字

配置环境变量

这里我们需要先创建源码路径及源码编译后安装路径

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
mkdir /data/opentenbase/OpenTenBase    mkdir /data/opentenbase/install

创建完成后如图所示

下面我们就可以配置环境变量了,通过以下命令配置的环境变量临时有效

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
export SOURCECODE_PATH=/data/opentenbase/OpenTenBaseexport INSTALL_PATH=/data/opentenbase/install/

如果需要配置的环境变量一直有效,则可以通过如下操作

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
vim ~/.bashrc

在打开的文件末尾输入以下路径信息

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
export SOURCECODE_PATH=/data/opentenbase/OpenTenBase    export INSTALL_PATH=/data/opentenbase/install

完成后保存并退出,ESC键 退出编辑状态,输入 :wq 完成环境变量的保存,执行命令使更改生效

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
source ~/.bashrc

生效之后可以通过命令 来查看我们的环境变量是否生效

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
echo $SOURCECODE_PATH
echo $INSTALL_PATH

源码编译安装

首先我们需要获取 OpenTenBase 的源码,获取源码执行命令

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
# 切换用户
su - opentenbase
# 切换目录
cd /data/opentenbase/
# 下载源码
git clone https://github.com/OpenTenBase/OpenTenBase

执行下载源码如果提示没有权限的话,那么需要检查以下你当前用户是否有当前目录的操作权限

这时我们需要执行以下命令,执行命令前,如果是 opentenbase 用户,则需要 exit 切换用户到root 用户,执行以下命令

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
# 退出opentenbase 用户
exit
cd /data/opentenbase
chown opentenbase:opentenbase install/ OpenTenBase/

再次切换回 opentenbase 用户,执行下载 OpenTenBase 源码,等待源码下载完成

如果多次尝试仍然下载失败,那么可以通过手动下载 zip 后上传的方式来处理

手动下载成功后将下载zip 文件解压在 /data/opentenbase/OpenTenBase 路径下,解压后的文件目录层级如下

源码下载完成后,执行以下命令完成源码的编译安装

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
cd ${SOURCECODE_PATH}
rm -rf ${INSTALL_PATH}/opentenbase_bin_v2.0chmod +x configure*
./configure --prefix=${INSTALL_PATH}/opentenbase_bin_v2.0 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g
make clean
make -sj
make install
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj
make install

执行完成后继续进行后面的操作,上述命令执行结果如图

禁用SELinux和防火墙(可选)

执行如下命令禁用SELinux和 防火墙(可选)

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
# set SELINUX=disabled
vi /etc/selinux/config 
# Disable firewalld
systemctl disable firewalld
systemctl stop firewalld

安装 pgxc

安装pgxc之前,将pgxc安装包的路径导入到环境变量中,集群所有机器都需要配置

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
vim ~/.bashrcexport OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0export PATH=$OPENTENBASE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}export LC_ALL=C

初始化pgxc_ctl.conf文件

OpenTenBase提供了专用的配置和操作工具: pgxc_ctl来协助用户快速搭建并管理集群,首先需要将前文所述的节点的ip,端口,目录写入到配置文件 pgxc_ctl.conf 中

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
cd /data/opentenbase
mkdir /data/opentenbase/pgxc_ctl
cd /data/opentenbase/pgxc_ctl
vim pgxc_ctl.conf

配置文件内容中输入单实例的ip地址,或者也可以通过命令的方式来逐行添加。输入“prepare config”命令后,会在 pgxc_ctl 目录中生成可直接修改的配置文件模板

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
#!/bin/bash
# Single Node ConfigIP_1=10.2.24.16IP_2=
pgxcInstallDir=/data/opentenbase/install/opentenbase_bin_v2.0pgxcOwner=opentenbase
defaultDatabase=postgres
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=n
configBackupHost=pgxc-linker
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak#---- GTM ----------
gtmName=gtm
gtmMasterServer=$IP_1
gtmMasterPort=50001gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=n
#gtmSlaveServer=$IP_2
#gtmSlavePort=50001#gtmSlaveDir=/data/opentenbase/data/gtm
#gtmSlaveSpecificExtraConfig=none
#---- Coordinators -------
coordMasterDir=/data/opentenbase/data/coord
coordArchLogDir=/data/opentenbase/data/coord_archlog
coordNames=(cn001 )
coordPorts=(30004 )
poolerPorts=(31110 )
coordPgHbaEntries=(0.0.0.0/0)
coordMasterServers=($IP_1 )
coordMasterDirs=($coordMasterDir )
coordMaxWALsernder=1coordMaxWALSenders=($coordMaxWALsernder )
coordSlave=n
coordSlaveSync=n
coordArchLogDirs=($coordArchLogDir )
coordExtraConfig=coordExtraConfig
cat > $coordExtraConfig <<EOF#================================================
# Added to all the coordinator postgresql.conf# Original: $coordExtraConfig
include_if_exists = '/data/opentenbase/global/global_opentenbase.conf'wal_level = replica
wal_keep_segments = 256 max_wal_senders = 4archive_mode = on 
archive_timeout = 1800 archive_command = 'echo 0' log_truncate_on_rotation = on 
log_filename = 'postgresql-%M.log' log_rotation_age = 4h 
log_rotation_size = 100MB
hot_standby = on 
wal_sender_timeout = 30min 
wal_receiver_timeout = 30min 
shared_buffers = 1024MB 
max_pool_size = 2000log_statement = 'ddl'log_destination = 'csvlog'logging_collector = on
log_directory = 'pg_log'listen_addresses = '*'max_connections = 2000EOFcoordSpecificExtraConfig=(none none)
coordExtraPgHba=coordExtraPgHba
cat > $coordExtraPgHba <<EOFlocal   all             all                                     trust
host    all             all             0.0.0.0/0               trust
host    replication     all             0.0.0.0/0               trust
host    all             all             ::1/128                 trust
host    replication     all             ::1/128                 trustEOFcoordSpecificExtraPgHba=(none none)
coordAdditionalSlaves=n	
cad1_Sync=n
#---- Datanodes ---------------------
dn1MstrDir=/data/opentenbase/data/dn001
#dn2MstrDir=/data/opentenbase/data/dn002
dn1SlvDir=/data/opentenbase/data/dn001
#dn2SlvDir=/data/opentenbase/data/dn002
dn1ALDir=/data/opentenbase/data/datanode_archlog
#dn2ALDir=/data/opentenbase/data/datanode_archlog
primaryDatanode=dn001
datanodeNames=(dn001 )
datanodePorts=(40004 )
datanodePoolerPorts=(41110 )
datanodePgHbaEntries=(0.0.0.0/0)
datanodeMasterServers=($IP_1 )
datanodeMasterDirs=($dn1MstrDir )
dnWALSndr=2datanodeMaxWALSenders=($dnWALSndr )
datanodeSlave=n
#datanodeSlaveServers=($IP_2 $IP_1)
#datanodeSlavePorts=(50004 54004)
#datanodeSlavePoolerPorts=(51110 51110)
#datanodeSlaveSync=n
#datanodeSlaveDirs=($dn1SlvDir $dn2SlvDir)
datanodeArchLogDirs=($dn1ALDir/dn001 )
datanodeExtraConfig=datanodeExtraConfig
cat > $datanodeExtraConfig <<EOF#================================================
# Added to all the coordinator postgresql.conf# Original: $datanodeExtraConfig
include_if_exists = '/data/opentenbase/global/global_opentenbase.conf'listen_addresses = '*' wal_level = replica 
wal_keep_segments = 256 max_wal_senders = 4archive_mode = on 
archive_timeout = 1800 archive_command = 'echo 0' log_directory = 'pg_log' logging_collector = on 
log_truncate_on_rotation = on 
log_filename = 'postgresql-%M.log' log_rotation_age = 4h 
log_rotation_size = 100MB
hot_standby = on 
wal_sender_timeout = 30min 
wal_receiver_timeout = 30min 
shared_buffers = 1024MB 
max_connections = 4000 max_pool_size = 4000log_statement = 'ddl'log_destination = 'csvlog'wal_buffers = 1GBEOFdatanodeSpecificExtraConfig=(none )
datanodeExtraPgHba=datanodeExtraPgHba
cat > $datanodeExtraPgHba <<EOFlocal   all             all                                     trust
host    all             all             0.0.0.0/0               trust
host    replication     all             0.0.0.0/0               trust
host    all             all             ::1/128                 trust
host    replication     all             ::1/128                 trustEOFdatanodeSpecificExtraPgHba=(none )
datanodeAdditionalSlaves=n
walArchive=n

集群初始化

在一个节点配置好配置文件后,需要预先将二进制包部署到所有节点所在的机器上,这个可以使用pgxc_ctl工具,执行 deploy all命令来完成

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
cd /data/opentenbase/install/opentenbase_bin_v2.0/bin
 ./pgxc_ctl   
# 执行 deploy all 命令

等待deploy all 发布结束后如图

执行 init all命令,完成集群初始化命令。这里需要注意的时,由于当前服务器的设置,这里需要输入多次服务器密码的情况,就像上面出现的情况一样。 大家在安装部署时出现多次输入密码的情况,请保持耐心,保证每次密码输入正确。多次输入密码不是因为你的密码输入的不对,而是每执行一步可能就需要一次密码验证。

如果安装出现错误,通过运行 pgxc_ctl 工具,执行 clean all命令删除已经初始化的文件,修改pgxc_ctl.conf文件,重新执行 init all命令重新发起初始化。

如果遇到如下的错误,意味着PostgreSQL请求的共享内存段超出了可用内存、交换空间或大页的限制。要减少当前请求的大小(当前为5500862692字节),可尝试降低PostgreSQL的共享内存使用量,例如通过减少shared_buffers(共享缓冲区)或max_connections(最大连接数)的配置值

找到我们的pgxc_ctl.conf 文件,修改其中 shared_buffers(共享缓冲区)或max_connections(最大连接数)的配置值

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
[opentenbase@VM-24-16-centos pgxc_ctl]$ cd /data/opentenbase/pgxc_ctl
[opentenbase@VM-24-16-centos pgxc_ctl]$ vim pgxc_ctl.conf

修改完配置文件之后,回到我们的 pgxc_ctl工具页面,使用命令 start all来启动集群,启动成功之后可以看到如下的情况

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
Current directory: /data/opentenbase/pgxc_ctlPGXC monitor allRunning: gtm masterNot running: gtm slaveRunning: coordinator master cn001Running: datanode master dn001Running: datanode slave dn001

访问集群

访问OpenTenBase集群和访问单机的PostgreSQL基本上无差别,我们可以通过任意一个CN访问 数据库集群

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
psql -h 10.215.147.158 -p 30004 -d postgres -U opentenbase

使用数据库前需要 创建default group以及sharding表

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
postgres=# create default node group default_group  with (dn001);CREATE NODE GROUPpostgres=# create sharding group to group default_group;CREATE SHARDING GROUP

随后就可以进行创建数据库,用户,创建表,增删查改等操作

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
postgres=# create database test;CREATE DATABASEpostgres=# create user test with password 'test';CREATE ROLEpostgres=# alter database test owner to test;ALTER DATABASEpostgres=# \c test testYou are now connected to database "test" as user "test".
test=> create table foo(id bigint, str text) distribute by shard(id);CREATE TABLEtest=> insert into foo values(1, 'tencent'), (2, 'shenzhen');COPY 2test=> select * from foo;
 id |   str    
----+----------  1 | tencent  2 | shenzhen(2 rows)

命令整理

整个OpenTenBase 的环境准备,源码下载,编译,安装需要耗费一定的时间,这里我将我上面用到的命令做了一个简单的整理,可能会有遗漏的清理,大家在参考的过程中根据自己的情况调整即可

代码语言: JavaScript
代码运行次数:0
自动换行
运行 AI代码解释
# 安装依赖
yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex cmake postgresql-devel git libssh2-devel sshpass
## 创建用户
mkdir /data
useradd -d /data/opentenbase -s /bin/bash -m opentenbase
passwd opentenbase
# 将用户添加到wheel组
usermod -aG wheel opentenbase
# 创建文件夹
mkdir /data/opentenbase/OpenTenBase    mkdir /data/opentenbase/install
# 切换用户
su - opentenbase
# 切换目录
cd /data/opentenbase/
# 下载源码
git clone https://github.com/OpenTenBase/OpenTenBase# 临时环境变量export SOURCECODE_PATH=/data/opentenbase/OpenTenBaseexport INSTALL_PATH=/data/opentenbase/install/
echo $SOURCECODE_PATH
echo $INSTALL_PATH
## 编译安装
cd ${SOURCECODE_PATH}
rm -rf ${INSTALL_PATH}/opentenbase_bin_v2.0chmod +x configure*
./configure --prefix=${INSTALL_PATH}/opentenbase_bin_v2.0 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g
make clean
make -sj
make install
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj
make install
# 环境变量
vim ~/.bashrcexport OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0export PATH=$OPENTENBASE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}export LC_ALL=C
#初始化pgxc_ctl.confcd /data/opentenbase
mkdir /data/opentenbase/pgxc_ctl
cd /data/opentenbase/pgxc_ctl
vim pgxc_ctl.conf# 切换目录
cd /data/opentenbase/install/opentenbase_bin_v2.0/bin
# 使用 pgxc_ctl工具,执行deploy all命令 分发二进制包
# 执行init all命令,完成集群初始化命令
#执行clean all命令删除已经初始化的文件,修改pgxc_ctl.conf文件,重新执行init all命令重新发起初始化
# 执行 monitor all命令来查看集群状态
# 执行  stop all 命令来停止集群,stop all 后面可以加上参数 -m fast 或者是 -m immediate 来决定如何停止各个节点
#执行 start all命令来启动集群
# 访问数据库
psql -h 10.2.24.16 -p 30004 -d postgres -U opentenbase
psql -h 101.43.245.198 -p 30004 -d postgres -U opentenbase
postgres=# create default node group default_group  with (dn001,dn002);CREATE NODE GROUPpostgres=# create sharding group to group default_group;CREATE SHARDING GROUPpostgres=# create database test;
postgres=# create user test with password 'test';
postgres=# alter database test owner to test;
postgres=# \c test test
test=> create table foo(id bigint, str text) distribute by shard(id);test=> insert into foo values(1, 'tencent'), (2, 'shenzhen');test=> select * from foo;

写在最后

本文从安装部署 OpenTenBase集群 的资源准备到下载源码、编译、安装、启动、访问,整个流程。在部署的过程中,遇到一些问题,也解决了一些问题。但是目前遇到的OpenTenBase集群起不来的情况还没有解决,更改配置文件也没效果。这里记录一下错误信息

还有一点就是,通过 命令 git clone https://github.com/OpenTenBase/OpenTenBase 克隆的源码到服务器可能不太好用,我这边是克隆了三次,安装的时候还是会有问题。后来通过下载zip 文件并上传解压的方式获取源码文件后,再执行后续的安装才没有问题了。这里是我的服务器上传的源码zip 包截图

这里需要注意的是,解压之后会在当前文件夹下生成一个 OpenTenBase-2.6.0 的文件夹,这里需要将 OpenTenBase-2.6.0 文件夹下的文件都 cp 到和 OpenTenBase-2.6.0.zip 同级的目录下,执行后续安装的时候才可以找到。

对于新手小白,需要的话可以参考本文的部署流程。本文详细阐述了基于腾讯云轻量应用服务器从系统准备、环境配置、源码编译到集群初始化的完整部署流程,并对安装过程中可能出现的典型问题(如共享内存不足)提供了具体解决方案。最后通过实际连接集群并创建库、表及数据操作的示例,验证了OpenTenBase 分布式数据库的可用性与易用性,为相关业务场景的落地实践提供了清晰的技术参考。

最后希望 OpenTenBase 团队可以尽快开发出 OpenTenBase 服务器镜像版,这样就可以通过命令一键安装了,像安装Mysql 一样简单,源码编译部署安装的方式,确实比较费时费力,还容易出错。另外关于系统的 4G内存要求,个人理解4G内存可能不够,应该8G 内存起步才可以。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047464/viewspace-3095119/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2025-09-07

  • 博文量
    3
  • 访问量
    2663