

在这次部署OpenTenbase的过程中,遇到了不少的问题,结合上一篇文章和后续实际使用中填坑的过程,看看我(一个看不懂源码的DBA)是如何解决这些问题的。
在前一期专门提到过,需要将虚拟机的CPU数量调到>2,如果CPU核心是1或者2,在启动GTM的时候,日志中会出现以下问题:

这是一个OpenTenbase 5.0对CPU数量的要求,即≥3。
首先在RHEL8中,LD_LIBRARY_PATH环境变量默认是空的:

因此按照官方文档的方式配置环境变量,会出现找不到库文件的问题:
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}
#这样配置其实就只配置了$OPENTENBASE_HOME/lib
如果手动指定为下面的方式,也会出现问题:
export LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:/lib:/var/lib:/usr/lib:/usr/lib64

因为LD_LIBRARY_PATH存在顺序问题,因此需要将$OPENTENBASE_HOME/lib放在最后,即:
export LD_LIBRARY_PATH=/lib:/var/lib:/usr/lib:/usr/lib64:$OPENTENBASE_HOME/lib
前文中另一个比较“莫名其妙”的问题则是psql调用libpq.so.5时出现的报错,这个是查遍国内网各大网站和LLM都不能有效解决的。我的思路则是检查$OPENTENBASE_HOME/lib下libpq.so.*文件的关系:

我们可以看到libpq.so.5其实是libpq.so.5.13的软连接,再关联在官方文档中psql登录后的反馈:

我的猜测是部署过程和psql调用需要使用不同版本的libpq.so库文件,结合上一节的处理,将libpq.so.5.10软连接到了/usr/lib64/libpq.so.5,解决了该问题。
psql -h 10.10.10.101 -p 30004 -d postgres -U opentenbase
create default node group default_group with (dn01,dn02,dn03);
create sharding group to group default_group;
按照之前的部署会报错:

检查报错信息和日志,个人猜测是数据库参数文件内存配置不足,因此进行了下面一些调整:
cat > /data/opentenbase/global/postgresql.conf.user <<EOF
listen_addresses = '0.0.0.0'
max_connections = 2000
max_pool_size = 65535
shared_buffers = 2GB
max_prepared_transactions = 2000
maintenance_work_mem = 512MB
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
然后按照dn03备->dn02备->dn01备->dn03主->dn02主->dn01主->cn02->cn01的顺序关闭对应组件,再按照部署顺序启动这些组件,在重启组件的过程中,otb01节点配置的/usr/lib64/libpq.so.5软连接并未对操作产生影响。然后就可以正常操作了:

select * from pgxc_group;

create user test with password 'test';
create database test;
alter database test owner to test;

psql -h 10.10.10.101 -p 30004 -d test -U test
create table test
(
id int not null,
name varchar(20),
primary key(id)
)
distribute by shard(id)
to group default_group;

insert into test values(1,'opentenbase');
insert into test values(2,'ace');
insert into test values(3,'yhw');
commit;

本期对前面处理的问题和实际使用过程中我的解决问题的思路与方法进行了总结,了解到在OpenTenbase 5.0中还新增了opentenbase_ctl可以实现快速部署,稍后再尝试一下。 老规矩,知道写了些啥。