数据库管理384期 2025-11-04
- 数据库管理-第384期 OpenTenBase 5.0部署V2(20251104)
数据库管理-第384期 OpenTenBase 5.0部署V2(20251104)
作者:胖头鱼的鱼缸(尹海文) Oracle ACE Pro: Database PostgreSQL ACE OpenTenbase ACE 10年数据库行业经验 拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证 墨天轮MVP,ITPUB认证专家 圈内拥有“总监”称号,非著名社恐(社交恐怖分子) 公众号:胖头鱼的鱼缸 CSDN:胖头鱼的鱼缸(尹海文) 墨天轮:胖头鱼的鱼缸 ITPUB:yhw1809 IFClub:胖头鱼的鱼缸 除授权转载并标明出处外,均为“非法”抄袭

没想到吧,前面刚刚吐槽了OpenTenBase 5.0的软件部署,今天我就又来了。在翻查OpenTenBase的Github时,发现最近更新了RPM包,虽然文档对这个RPM包没有任何说明,但还是尝试使用RPM包部署一下。
https://github.com/OpenTenBase/OpenTenBase/releases/tag/v5.0

1 RPM包部署
1.1 清理环境
直接重新克隆操作系统。这里做了个调整,把每台机器的CPU从2调整为3(低于3核,GTM将无法绑核)。
1.2 解读RPM包
安装RPM包之前,得先了解下这个包的安装内容与流程。
1.2.1 依赖
dnf deplist opentenbase-5.0-i.x86_64.rpm

从依赖可以看到,除了基本需求外,几乎没有外部依赖。
1.2.2 安装内容
rpm -qlp opentenbase-5.0-i.x86_64.rpm


RPM包会在/usr/local/install下生成软件路径,共生成2410个文件(包含目录)。从文件内容来看,需求的依赖基本包含在其中了。
1.2.3 RPM操作脚本
rpm -q --scripts opentenbase-5.0-i.x86_64.rpm

看起来RPM安装过程不会涉及用户创建操作。
1.3 安装RPM
dnf -y install opentenbase-5.0-i.x86_64.rpm

1.4 其他操作
主要是根据新生成的文件信息增加环境变量:
su - opentenbase vim ~/.bash_profile
添加/修改为以下内容:
export OPENTENBASE_HOME=/usr/local/install/opentenbase export PATH=$OPENTENBASE_HOME/bin:$PATH export LD_LIBRARY_PATH=/lib:/var/lib:/usr/lib:/usr/lib64:$OPENTENBASE_HOME/lib
1.5 一点疑惑
在2.6安装过程中,其他节点的软件是在数据库部署过程中自动分发的,但RPM包会怎样?后面摸索一下。(虚拟机先打个快照)
咨询了一下原厂研发,需要每个节点都部署软件
2 部署数据库组件
组件路径如下:

2.1 配置公共参数
mkdir -p /data/opentenbase/global/
cat > /data/opentenbase/global/postgresql.conf.user <<EOF
listen_addresses = '0.0.0.0'
max_connections = 500
max_pool_size = 65535
shared_buffers = 1GB
max_prepared_transactions = 2000
maintenance_work_mem = 256MB
wal_level = logical
max_wal_senders = 64
max_wal_size = 1GB
min_wal_size = 256MB
log_destination = 'csvlog'
logging_collector = on
log_directory = 'log'
log_filename = 'postgresql-%A-%H.log'
synchronous_commit = local
synchronous_standby_names = ''
EOF
2.2 部署GTM主
otb01节点执行:
2.2.1 初始化GTM
mkdir -p /data/opentenbase/data/gtm initgtm -Z gtm -D /data/opentenbase/data/gtm mkdir /data/opentenbase/data/gtm/gtm_xlog/archive_status

2.2.2 修改配置文件
vim /data/opentenbase/data/gtm/gtm.conf
内容如下:
#配置gtm节点名称 nodename = 'gtm_1' #允许服务监听范围,*允许监听所有 IP 地址 listen_addresses = '*' #监听端口号 port = 5001 #做为GTM主节点提供服务 startup = ACT
2.2.4 启动GTM
gtm_ctl -Z gtm -D /data/opentenbase/data/gtm start

2.2.5 检查GTM状态
gtm_ctl -Z gtm -D /data/opentenbase/data/gtm status -H 127.0.0.1 -P 5001

2.3 部署GTM备
otb02节点执行:
2.3.1 初始化GTM
mkdir -p /data/opentenbase/data/gtm initgtm -Z gtm -D /data/opentenbase/data/gtm mkdir /data/opentenbase/data/gtm/gtm_xlog/archive_status

2.3.2 修改配置文件
vim /data/opentenbase/data/gtm/gtm.conf
内容如下:
#配置gtm节点名称 nodename = 'gtm_2' #允许服务监听范围,*允许监听所有 IP 地址 listen_addresses = '*' #监听端口号 port = 5001 #做为GTM备节点提供服务 startup = STANDBY #配置GTM主节点信息 active_host = '10.10.10.101' active_port = 5001
2.3.4 启动GTM
gtm_ctl -Z gtm -D /data/opentenbase/data/gtm start

2.3.5 检查GTM状态
gtm_ctl -Z gtm -D /data/opentenbase/data/gtm status -H 127.0.0.1 -P 5001

2.4 部署CN01
otb01节点执行:
2.4.1 初始化CN
mkdir -p /data/opentenbase/data/cn01 initdb --locale=zh_CN.UTF-8 -U opentenbase -E utf8 -D /data/opentenbase/data/cn01 --nodename=cn01 --nodetype=coordinator --master_gtm_nodename gtm_1 --master_gtm_ip 10.10.10.101 --master_gtm_port 5001

2.4.2 修改配置文件
vim /data/opentenbase/data/cn01/postgresql.conf
调整以下内容:
port = 30004 pooler_port=30005 include_if_exists ='/data/opentenbase/global/postgresql.conf.user'
vim /data/opentenbase/data/cn01/pg_hba.conf
添加以下内容,实际生产replication/all看配置CN节点IP地址:
host replication all 0.0.0.0/0 trust host all all 0.0.0.0/0 trust host all all 0.0.0.0/0 md5
2.4.3 启动CN
pg_ctl -Z coordinator -D /data/opentenbase/data/cn01 start
2.4.4 检查CN状态
pg_ctl -Z coordinator -D /data/opentenbase/data/cn01 status

2.5 部署CN02
otb02节点执行:
2.5.1 初始化CN
mkdir -p /data/opentenbase/data/cn02 initdb --locale=zh_CN.UTF-8 -U opentenbase -E utf8 -D /data/opentenbase/data/cn02 --nodename=cn02 --nodetype=coordinator --master_gtm_nodename gtm_1 --master_gtm_ip 10.10.10.101 --master_gtm_port 5001

2.5.2 修改配置文件
vim /data/opentenbase/data/cn02/postgresql.conf
调整以下内容:
port = 30004 pooler_port=30005 include_if_exists ='/data/opentenbase/global/postgresql.conf.user'
vim /data/opentenbase/data/cn02/pg_hba.conf
添加以下内容,实际生产replication/all看配置CN节点IP地址:
host replication all 0.0.0.0/0 trust host all all 0.0.0.0/0 trust host all all 0.0.0.0/0 md5
2.5.3 启动CN
pg_ctl -Z coordinator -D /data/opentenbase/data/cn02 start
2.5.4 检查CN状态
pg_ctl -Z coordinator -D /data/opentenbase/data/cn02 status

2.6 部署DN01主
otb03节点执行:
2.6.1 初始化DN
mkdir -p /data/opentenbase/data/dn01 initdb --locale=zh_CN.UTF-8 -U opentenbase -E utf8 -D /data/opentenbase/data/dn01 --nodename=dn01 --nodetype=datanode --master_gtm_nodename gtm_1 --master_gtm_ip 10.10.10.101 --master_gtm_port 5001

2.6.2 修改配置文件
vim /data/opentenbase/data/dn01/postgresql.conf
调整以下内容:
port = 40004 pooler_port=40005 include_if_exists ='/data/opentenbase/global/postgresql.conf.user'
vim /data/opentenbase/data/dn01/pg_hba.conf
添加以下内容,实际生产replication/all看配置DN节点IP地址:
host replication all 0.0.0.0/0 trust host all all 0.0.0.0/0 trust
2.6.3 启动DN
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 start
2.6.4 检查DN状态
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 status

2.7 部署DN02主
otb04节点执行:
2.7.1 初始化DN
mkdir -p /data/opentenbase/data/dn02 initdb --locale=zh_CN.UTF-8 -U opentenbase -E utf8 -D /data/opentenbase/data/dn02 --nodename=dn02 --nodetype=datanode --master_gtm_nodename gtm_1 --master_gtm_ip 10.10.10.101 --master_gtm_port 5001

2.7.2 修改配置文件
vim /data/opentenbase/data/dn02/postgresql.conf
调整以下内容:
port = 40004 pooler_port=40005 include_if_exists ='/data/opentenbase/global/postgresql.conf.user'
vim /data/opentenbase/data/dn02/pg_hba.conf
添加以下内容,实际生产replication/all看配置DN节点IP地址:
host replication all 0.0.0.0/0 trust host all all 0.0.0.0/0 trust
2.7.3 启动DN
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 start
2.7.4 检查DN状态
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 status

2.8 部署DN03主
otb05节点执行:
2.8.1 初始化DN
mkdir -p /data/opentenbase/data/dn03 initdb --locale=zh_CN.UTF-8 -U opentenbase -E utf8 -D /data/opentenbase/data/dn03 --nodename=dn03 --nodetype=datanode --master_gtm_nodename gtm_1 --master_gtm_ip 10.10.10.101 --master_gtm_port 5001

2.8.2 修改配置文件
vim /data/opentenbase/data/dn03/postgresql.conf
调整以下内容:
port = 40004 pooler_port=40005 include_if_exists ='/data/opentenbase/global/postgresql.conf.user'
vim /data/opentenbase/data/dn03/pg_hba.conf
添加以下内容,实际生产replication/all看配置DN节点IP地址:
host replication all 0.0.0.0/0 trust host all all 0.0.0.0/0 trust
2.8.3 启动DN
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 start
2.8.4 检查DN状态
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 status

2.9 部署DN01备
otb04节点执行:
2.9.1 生成备DN
mkdir -p /data/opentenbase/data/dn01 pg_basebackup -p 40004 -h 10.10.10.103 -U opentenbase -D /data/opentenbase/data/dn01 -X f -P -v chmod 700 /data/opentenbase/data/dn01

2.9.2 修改配置文件
vim /data/opentenbase/data/dn01/postgresql.conf
调整以下内容:
port = 50004 pooler_port=50005
vim /data/opentenbase/data/dn01/recovery.conf
调整以下内容:
standby_mode = on primary_conninfo = 'host = 10.10.10.103 port = 40004 user = opentenbase application_name = s1'
2.9.3 启动DN
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 start
2.9.4 检查DN状态
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 status

2.10 部署DN02备
otb05节点执行:
2.10.1 生成备DN
mkdir -p /data/opentenbase/data/dn02 pg_basebackup -p 40004 -h 10.10.10.104 -U opentenbase -D /data/opentenbase/data/dn02 -X f -P -v chmod 700 /data/opentenbase/data/dn02

2.10.2 修改配置文件
vim /data/opentenbase/data/dn02/postgresql.conf
调整以下内容:
port = 50004 pooler_port=50005
vim /data/opentenbase/data/dn02/recovery.conf
调整以下内容:
standby_mode = on primary_conninfo = 'host = 10.10.10.104 port = 40004 user = opentenbase application_name = s1'
2.10.3 启动DN
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 start
2.10.4 检查DN状态
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 status

2.11 部署DN03备
otb03节点执行:
2.11.1 生成备DN
mkdir -p /data/opentenbase/data/dn03 pg_basebackup -p 40004 -h 10.10.10.105 -U opentenbase -D /data/opentenbase/data/dn03 -X f -P -v chmod 700 /data/opentenbase/data/dn03

2.11.2 修改配置文件
vim /data/opentenbase/data/dn03/postgresql.conf
调整以下内容:
port = 50004 pooler_port=50005
vim /data/opentenbase/data/dn03/recovery.conf
调整以下内容:
standby_mode = on primary_conninfo = 'host = 10.10.10.105 port = 40004 user = opentenbase application_name = s1'
2.11.3 启动DN
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 start
2.11.4 检查DN状态
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 status

至此所有数据库组件部署完成。
3 配置路由
3.1 配置CN01
psql -h 10.10.10.101 -p 30004 -d postgres -U opentenbase
这里需要注意的是,如果直接将lib库指定到/usr/local/install/opentenbase/lib下,会直接调用其中的libpq.so.5库文件,会有以下的报错:

需要在root用户下执行,psql才能正常执行:
ln -s /usr/local/install/opentenbase/lib/libpq.so.5.10 /usr/lib64/libpq.so.5

alter node cn01 with (host='10.10.10.101',port=30004);
create node cn02 with (type=coordinator,host='10.10.10.102',port=30004,primary=false,preferred=false);
create node dn01 with (type=datanode,host='10.10.10.103',port=40004,primary=false,preferred=false);
create node dn02 with (type=datanode,host='10.10.10.104',port=40004,primary=false,preferred=false);
create node dn03 with (type=datanode,host='10.10.10.105',port=40004,primary=false,preferred=false);
select pgxc_pool_reload();

后续截图省略。
3.2 配置CN02
psql -h 10.10.10.102 -p 30004 -d postgres -U opentenbase
alter node cn02 with (host='10.10.10.102',port=30004);
create node cn01 with (type=coordinator,host='10.10.10.101',port=30004,primary=false,preferred=false);
create node dn01 with (type=datanode,host='10.10.10.103',port=40004,primary=false,preferred=false);
create node dn02 with (type=datanode,host='10.10.10.104',port=40004,primary=false,preferred=false);
create node dn03 with (type=datanode,host='10.10.10.105',port=40004,primary=false,preferred=false);
select pgxc_pool_reload();
3.3 配置DN01
psql -h 10.10.10.103 -p 40004 -d postgres -U opentenbase
alter node dn01 with (host='10.10.10.103',port=40004);
create node cn01 with (type=coordinator,host='10.10.10.101',port=30004,primary=false,preferred=false);
create node cn02 with (type=coordinator,host='10.10.10.102',port=30004,primary=false,preferred=false);
create node dn02 with (type=datanode,host='10.10.10.104',port=40004,primary=false,preferred=false);
create node dn03 with (type=datanode,host='10.10.10.105',port=40004,primary=false,preferred=false);
select pgxc_pool_reload();
3.4 配置DN02
psql -h 10.10.10.104 -p 40004 -d postgres -U opentenbase
alter node dn02 with (host='10.10.10.104',port=40004);
create node cn01 with (type=coordinator,host='10.10.10.101',port=30004,primary=false,preferred=false);
create node cn02 with (type=coordinator,host='10.10.10.102',port=30004,primary=false,preferred=false);
create node dn01 with (type=datanode,host='10.10.10.103',port=40004,primary=false,preferred=false);
create node dn03 with (type=datanode,host='10.10.10.105',port=40004,primary=false,preferred=false);
select pgxc_pool_reload();
3.5 配置DN03
psql -h 10.10.10.105 -p 40004 -d postgres -U opentenbase
alter node dn03 with (host='10.10.10.105',port=40004);
create node cn01 with (type=coordinator,host='10.10.10.101',port=30004,primary=false,preferred=false);
create node cn02 with (type=coordinator,host='10.10.10.102',port=30004,primary=false,preferred=false);
create node dn01 with (type=datanode,host='10.10.10.103',port=40004,primary=false,preferred=false);
create node dn02 with (type=datanode,host='10.10.10.104',port=40004,primary=false,preferred=false);
select pgxc_pool_reload();
3.6 路由信息查询
psql -h 10.10.10.101 -p 30004 -d postgres -U opentenbase
select * from pgxc_node;

总结
本期用RPM的方式部署了OpenTenbase 5.0,而且用了比较麻烦的方式按组件部署,中间还是遇到一些小问题。目前还没有到使用阶段。
老规矩,知道写了些啥。




