

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

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

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


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

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

主要是根据新生成的文件信息增加环境变量:
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
在2.6安装过程中,其他节点的软件是在数据库部署过程中自动分发的,但RPM包会怎样?后面摸索一下。(虚拟机先打个快照)
咨询了一下原厂研发,需要每个节点都部署软件
组件路径如下:

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
otb01节点执行:
mkdir -p /data/opentenbase/data/gtm
initgtm -Z gtm -D /data/opentenbase/data/gtm
mkdir /data/opentenbase/data/gtm/gtm_xlog/archive_status

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

gtm_ctl -Z gtm -D /data/opentenbase/data/gtm status -H 127.0.0.1 -P 5001

otb02节点执行:
mkdir -p /data/opentenbase/data/gtm
initgtm -Z gtm -D /data/opentenbase/data/gtm
mkdir /data/opentenbase/data/gtm/gtm_xlog/archive_status

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
gtm_ctl -Z gtm -D /data/opentenbase/data/gtm start

gtm_ctl -Z gtm -D /data/opentenbase/data/gtm status -H 127.0.0.1 -P 5001

otb01节点执行:
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

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
pg_ctl -Z coordinator -D /data/opentenbase/data/cn01 start
pg_ctl -Z coordinator -D /data/opentenbase/data/cn01 status

otb02节点执行:
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

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
pg_ctl -Z coordinator -D /data/opentenbase/data/cn02 start
pg_ctl -Z coordinator -D /data/opentenbase/data/cn02 status

otb03节点执行:
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

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
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 start
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 status

otb04节点执行:
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

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
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 start
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 status

otb05节点执行:
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

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
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 start
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 status

otb04节点执行:
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

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'
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 start
pg_ctl -Z datanode -D /data/opentenbase/data/dn01 status

otb05节点执行:
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

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'
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 start
pg_ctl -Z datanode -D /data/opentenbase/data/dn02 status

otb03节点执行:
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

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'
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 start
pg_ctl -Z datanode -D /data/opentenbase/data/dn03 status

至此所有数据库组件部署完成。
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();

后续截图省略。
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();
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();
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();
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();
psql -h 10.10.10.101 -p 30004 -d postgres -U opentenbase
select * from pgxc_node;

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