支持空间数据库插件PostGIS,OpenTenBase V2.6.0 正式发布

在现已发布的OpenTenBase v2.6.0 版本中,我们引入了多个重要的新特性和改进,旨在提升用户体验和系统性能。以下是本次更新的详细内容。

OpenTenBase v2.6.0 新特性介绍

1. 功能增强

1.1 支持空间数据库插件PostGIS

新增了对PostGIS插件的支持,用户现在可以在OpenTenBase中使用PostGIS插件进行空间数据的存储和查询。

使用场景:适用于需要处理地理空间数据的应用,如地图服务、地理信息系统(GIS)等。

1.2 支持RPM包部署

增加了对RPM包的支持,用户可以更方便地在基于RPM包管理的Linux发行版上部署OpenTenBase。

使用场景:适用于企业级应用的快速部署和版本管理。

1.3 新增插件slowquery

引入了slowquery插件,可以记录执行时间超过设定阈值的SQL查询,帮助用户识别性能瓶颈和优化性能。

使用场景:需要进行SQL性能调优。

2. 已知Bug修复

2.1 操作系统支持问题修复

修复了多个操作系统上的兼容性问题,提高了系统的稳定性和兼容性。

使用场景:适用于多操作系统环境下的应用部署。

2.2 make html编译问题修复

修复了由于/doc/src/sgml/func.sgml引起的编译问题,确保文档编译的顺利进行。

使用场景:适用于需要生成HTML文档的用户。

3. 周边生态

3.1 容器化部署指南及文档

新增了容器化部署案例的指南及文档,用户可以更轻松地在容器环境中部署OpenTenBase。

使用场景:适用于Docker和Kubernetes环境。

3.2 KubeBlock插件支持及文档

添加了对KubeBlock插件的支持,并提供了相应的文档。

使用场景:在Kubernetes集群中更高效地部署和管理OpenTenBase。

3.3 Grafana/Prometheus监控指南及文档

新增了基于Grafana/Prometheus的监控部署案例指南及文档,用户可以通过Grafana和Prometheus对系统进行全面的监控和告警。

使用场景:适用于需要实时监控和告警的企业级应用。

OpenTenBase v2.6.0 新特性的价值

这些新特性和改进主要面向以下几类用户和场景:

● 地理信息系统开发者:通过支持PostGIS插件,OpenTenBase为GIS开发者提供了强大的空间数据处理能力,解决了过去需要额外配置空间数据库的痛点。

● 企业级用户:RPM包支持和操作系统兼容性问题的修复,简化了在企业环境中的部署和维护工作。

● 性能调优工程师:slowquery插件帮助用户识别和优化SQL查询的性能瓶颈,提高系统的响应速度和稳定性。

● 容器化和集群管理用户:新增的容器化部署指南、KubeBlock插件支持以及Grafana/Prometheus监控指南,为用户提供了全面的文档和工具支持,简化了在容器和集群环境中的部署和管理流程。

OpenTenBase v2.6.0 安装部署步骤

1. 前置准备

安装依赖包:用户根据包管理工具的不同选用不同的指令

yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex

or

aptinstall -y gcc make libreadline-dev zlib1g-dev libssl-dev libossp-uuid-dev bison flex

2. 使用dnf工具安装OpenTenBase

当前OpenTenBase v2.6.0已经支持rpm包部署,用户既可以直接使用rpm安装可用的OpenTenBase版本,也可以直接从OpenCloudOS的yum源中直接安装

dnf install OpenTenBase*

安装完毕,检查 OpenTenBase 版本

[opentenbase@node1~]$ pg_ctl -V
pg_ctl (PostgreSQL)10.0OpenTenBaseV2

[opentenbase@node1~]$ pgxc_ctl -V
/usr/bin/bash Pgxc_ctl10.0OpenTenBaseV2

这种方法安装之后的OpenTenBase的二进制文件位于/usr/bin/目录之下。

3. 创建用户,设定 SSH 秘钥,并创建数据目录

useradd opentenbase
echo'opentenbase:opentenbase'| chpasswd
su -l opentenbase -c "mkdir home/opentenbase/.ssh -p"
su -l opentenbase -c "ssh-keygen -t rsa -f home/opentenbase/.ssh/id_rsa -N ''"
mkdir -p data/opentenbase
chown -R opentenbase:opentenbase data/opentenbase

*上述操作在每一个节点上都要进行

4. 配置节点间的ssh免密登陆

要求节点之间可以使用ssh免输密码认证登陆,将每个节点的~/.ssh/id_rsa.pub 复制到其他节点的~/.ssh/authorized_keys中。

5. 使用pgxc_ctl构建集群

接下来我们介绍用pgxc_ctl方便构建OpenTenBase集群的方法。

我们采用1gtm1c2d的示例进行演示,更多的细节可以参照 https://www.opentenbase.org/

我们假定两个物理机的ip地址分别为192.168.56.101和192.168.56.102。

各个节点的配置方案如下


*接下来的操作在单个节点192.168.56.101上即可

● 创建pgxc_ctl_cluster.conf文件,保存到/home/opentenbase/pgxc_ctl_cluster.conf

#!/bin/bash
# Cluster Configuration

IP_1=192.168.56.101
IP_2=192.168.56.102

pgxcInstallDir=/opt/opentenbase
pgxcOwner=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=5000
gtmMasterDir=/data/opentenbase/cluster/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=y
# 新增,否则slave配置中为null
gtmSlaveName=gtm-slave
gtmSlaveServer=$IP_2
gtmSlavePort=5000
gtmSlaveDir=/data/opentenbase/cluster/gtm
gtmSlaveSpecificExtraConfig=none

#---- Coordinators -------
coordMasterDir=/data/opentenbase/cluster/cn
coordArchLogDir=/data/opentenbase/cluster/cn_archlog

coordNames=(cn01 cn02)
coordPorts=(30000 30000)
poolerPorts=(31110 31110)
coordPgHbaEntries=(0.0.0.0/0)
coordMasterServers=($IP_1 $IP_2)
coordMasterDirs=($coordMasterDir $coordMasterDir)
coordMaxWALsernder=2
coordMaxWALSenders=($coordMaxWALsernder $coordMaxWALsernder )
coordSlave=y
coordSlaveSync=y
coordArchLogDirs=($coordArchLogDir $coordArchLogDir)

coordExtraConfig=coordExtraConfig
cat > $coordExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $coordExtraConfig

# include_if_exists = '/data/cerdb/db/cerdata/1.0/cluster/global/global_cerdb.conf'

wal_level = replica
wal_keep_segments = 256 
max_wal_senders = 4
archive_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 = 2000
max_pool_size = 65535
log_statement = 'ddl'
log_destination = 'csvlog'
logging_collector = on
log_directory = 'pg_log'
#listen_addresses = '*'
listen_addresses = '0.0.0.0'
max_connections = 2000

EOF

coordSpecificExtraConfig=(none none)
coordExtraPgHba=coordExtraPgHba
cat > $coordExtraPgHba <<EOF

local   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                 trust

EOF

coordSpecificExtraPgHba=(none none)
coordAdditionalSlaves=n 
cad1_Sync=n

#---- Datanodes ---------------------
dn1MstrDir=/data/opentenbase/cluster/dn01
dn2MstrDir=/data/opentenbase/cluster/dn02

dn1SlvDir=/data/opentenbase/cluster/dn01-slave
dn2SlvDir=/data/opentenbase/cluster/dn02-slave

dn1ALDir=/data/opentenbase/cluster/dn_archlog
dn2ALDir=/data/opentenbase/cluster/dn_archlog

primaryDatanode=dn01
datanodeNames=(dn01 dn02 )
datanodePorts=(40000 40000 )
datanodePoolerPorts=(41110 41110 )
datanodePgHbaEntries=(0.0.0.0/0)
datanodeMasterServers=($IP_1 $IP_2 )
datanodeMasterDirs=($dn1MstrDir $dn2MstrDir )
dnWALSndr=4
datanodeMaxWALSenders=($dnWALSndr $dnWALSndr )

datanodeSlave=y
datanodeSlaveServers=($IP_2 $IP_1 )
datanodeSlavePorts=(50000 50000 )
datanodeSlavePoolerPorts=(51110 51110 )
datanodeSlaveSync=y
datanodeSlaveDirs=($dn1SlvDir $dn2SlvDir )
datanodeArchLogDirs=($dn1ALDir/dn01 $dn2ALDir/dn02 )

datanodeExtraConfig=datanodeExtraConfig
cat > $datanodeExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $datanodeExtraConfig

# include_if_exists = '/data/cerdb/db/cerdata/1.0/cluster/global/global_cerdb.conf'
#listen_addresses = '*' 
listen_addresses = '0.0.0.0'
wal_level = replica 
wal_keep_segments = 256 
max_wal_senders = 4
archive_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 = 4000
max_pool_size = 65535
log_statement = 'ddl'
log_destination = 'csvlog'
wal_buffers = 1GB

EOF

datanodeSpecificExtraConfig=(none none )
datanodeExtraPgHba=datanodeExtraPgHba
cat > $datanodeExtraPgHba <<EOF

local   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                 trust

EOF

datanodeSpecificExtraPgHba=(none none )

datanodeAdditionalSlaves=n
walArchive=n

在节点192.168.56.101上运行

pgxc_ctl -c home/opentenbase/pgxc_ctl_cluster.conf init all  
pgxc_ctl -c home/opentenbase/pgxc_ctl_cluster.conf start all

测试数据库连接

psql -h 192.168.56.101 -p 30000 -d postgres -U opentenbase  
select * from pgxc_node;


我们目前正在积极征集OpenTenBase的用户使用案例,如果您有相关使用经验,欢迎提交给我们。也期待您加入OpenTenBase社区,跟我们共同推动项目发展!


官网: https://www.opentenbase.org/

贡献代码