首页 > 数据库 > 国内数据库 > 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服务器之后,就可以执行命令安装依赖
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集群的机器上都需要创建,这里我们只需要对我们当前的这台轻量应用服务器 创建即可
mkdir /data useradd -d /data/opentenbase -s /bin/bash -m opentenbase passwd opentenbase # 将用户添加到wheel组 usermod -aG wheel opentenbase
执行命令并输入 opentenbase 用户密码,这里的密码需要 包含 大写字母,小写字母及数字

这里我们需要先创建源码路径及源码编译后安装路径
mkdir /data/opentenbase/OpenTenBase mkdir /data/opentenbase/install
创建完成后如图所示

下面我们就可以配置环境变量了,通过以下命令配置的环境变量临时有效
export SOURCECODE_PATH=/data/opentenbase/OpenTenBaseexport INSTALL_PATH=/data/opentenbase/install/
如果需要配置的环境变量一直有效,则可以通过如下操作
vim ~/.bashrc
在打开的文件末尾输入以下路径信息
export SOURCECODE_PATH=/data/opentenbase/OpenTenBase export INSTALL_PATH=/data/opentenbase/install

完成后保存并退出,ESC键 退出编辑状态,输入 :wq 完成环境变量的保存,执行命令使更改生效
source ~/.bashrc
生效之后可以通过命令 来查看我们的环境变量是否生效
echo $SOURCECODE_PATH echo $INSTALL_PATH

首先我们需要获取 OpenTenBase 的源码,获取源码执行命令
# 切换用户 su - opentenbase # 切换目录 cd /data/opentenbase/ # 下载源码 git clone https://github.com/OpenTenBase/OpenTenBase
执行下载源码如果提示没有权限的话,那么需要检查以下你当前用户是否有当前目录的操作权限

这时我们需要执行以下命令,执行命令前,如果是 opentenbase 用户,则需要 exit 切换用户到root 用户,执行以下命令
# 退出opentenbase 用户 exit cd /data/opentenbase chown opentenbase:opentenbase install/ OpenTenBase/

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

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

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

源码下载完成后,执行以下命令完成源码的编译安装
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和 防火墙(可选)
# set SELINUX=disabled vi /etc/selinux/config # Disable firewalld systemctl disable firewalld systemctl stop firewalld
安装pgxc之前,将pgxc安装包的路径导入到环境变量中,集群所有机器都需要配置
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=COpenTenBase提供了专用的配置和操作工具: pgxc_ctl来协助用户快速搭建并管理集群,首先需要将前文所述的节点的ip,端口,目录写入到配置文件 pgxc_ctl.conf 中
cd /data/opentenbase mkdir /data/opentenbase/pgxc_ctl cd /data/opentenbase/pgxc_ctl vim pgxc_ctl.conf
配置文件内容中输入单实例的ip地址,或者也可以通过命令的方式来逐行添加。输入“prepare config”命令后,会在 pgxc_ctl 目录中生成可直接修改的配置文件模板
#!/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命令来完成
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(最大连接数)的配置值
[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来启动集群,启动成功之后可以看到如下的情况
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访问 数据库集群
psql -h 10.215.147.158 -p 30004 -d postgres -U opentenbase
使用数据库前需要 创建default group以及sharding表
postgres=# create default node group default_group with (dn001);CREATE NODE GROUPpostgres=# create sharding group to group default_group;CREATE SHARDING GROUP
随后就可以进行创建数据库,用户,创建表,增删查改等操作
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 的环境准备,源码下载,编译,安装需要耗费一定的时间,这里我将我上面用到的命令做了一个简单的整理,可能会有遗漏的清理,大家在参考的过程中根据自己的情况调整即可
# 安装依赖
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/ ,如需转载,请注明出处,否则将追究法律责任。