OpenTenBase 5.0部署V2
数据库管理-第384期 OpenTenBase 5.0部署V2(20251104)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE
OpenTenbase ACE10年数据库行业经验
拥有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 trusthost 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 trusthost 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,而且用了比较麻烦的方式按组件部署,中间还是遇到一些小问题。目前还没有到使用阶段。
老规矩,知道写了些啥。