一、腾讯TBase数据库简介
TBase 是腾讯数据平台团队在开源的 PostgreSQL 基础上研发的企业级分布式 HTAP 数据库管理系统: 具备高性能可扩展的分布式事务能力。
TBase 集群采用无共享 share nothing 架构。由多个 Coordinator、Datanodes 和 GTM 节点组成。
- 协调节点(Coordinator,CN):是数据库服务的对外入口,负责数据的分发和查询规划,多个节点位置对等。
- 数据节点(Datanode,DN):负责执行协调节点分发的执行请求,实际存储业务数据,所有用户数据都存储在 DataNode 中。
- 全局事务管理器(GlobalTransactionManager,GTM):负责全局事务管理。
用户通过 CN 访问存储在 DN 中的数据。TBase数据库集群架构示意如下:

关于TBase更详细的情况介绍,请详见其官网:https://cloud.tencent.com/product/tbase
二、腾讯TBase v2.5.0 数据库集群部署过程
1、安装环境准备
通过“VMware Workstation”创建一台虚拟机。

虚拟机分配内存4GB,IP配置为192.168.20.25,并安装了CentOS 7.9,如下:


2、规划TBase集群各功能节点
由于资源有限,因此准备在一台虚拟机上,通过分端口的方式模拟多个逻辑功能节点。
各个功能节点及端口,规划如下:
| 功能节点 | 端口 |
| GTM | 50001 |
| CN | 30004 |
| DN1 | 40004 |
| DN2 | 40005 |
本次准备部署的TBase集群的各功能节点逻辑关系示意如下:

3、sshd配置
vi /etc/ssh/sshd_config
设置以下参数值:
MaxSessions 20
UseDNS no
4、关闭防火墙与selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
5、设置limits.conf参数
vi /etc/security/limits.conf
* soft nofile 131072
* hard nofile 131072
* soft nproc 131072
* hard nproc 131072
* soft core unlimited
* hard core unlimited
6、修改内核参数
vi /etc/sysctl.conf

7、TBase源码编译安装
(1)创建用户
mkdir /data
useradd -d /data/TBase TBase
passwd TBase(2)下载安装包
下载地址:https://github.com/Tencent/TBase
(3)上传安装包到/data/TBase并设置其属主为TBase
chown TBase: TBase-2.5.0.tar.gz(4)源代码编译
su - TBase
tar -xzvf TBase-2.5.0.tar.gz
cd TBase-2.5.0
SOURCECODE_PATH=/data/TBase/TBase-2.5.0
INSTALL_PATH=/data/TBase/install
cd ${SOURCECODE_PATH}
rm -rf ${INSTALL_PATH}/tbase_bin_v2.5
./configure --prefix=${INSTALL_PATH}/tbase_bin_v2.5 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g
make clean
make -sj
make install
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj
make install
(5)设置 TBase 用户各节点间的SSH互信
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub 192.168.20.25(6)设置环境变量
vi ~/.bashrc
export TBase_HOME=/data/TBase/install/tbase_bin_v2.5
export PATH=$TBase_HOME/bin:$PATH
export LD_LIBRARY_PATH=$TBase_HOME/lib:${LD_LIBRARY_PATH}
export LC_ALL=C
source ~/.bashrc
(7)设置集群配置文件
mkdir /data/TBase/pgxc_ctl
cd /data/TBase/pgxc_ctl
vi pgxc_ctl.conf#!/bin/bash
pgxcInstallDir=/data/TBase/install/tbase_bin_v2.5
pgxcOwner=TBase
defaultDatabase=postgres
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=n
configBackupHost=pgxc-linker
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak
#---- GTM ----------
gtmName=gtm
gtmMasterServer=192.168.20.25
gtmMasterPort=50001
gtmMasterDir=/data/TBase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=n
#---- Coordinators -------
coordMasterDir=/data/TBase/data/coord
coordArchLogDir=/data/TBase/data/coord_archlog
coordNames=(cn001 )
coordPorts=(30004 )
poolerPorts=(31110 )
coordPgHbaEntries=(0.0.0.0/0)
coordMasterServers=(192.168.20.25)
coordMasterDirs=($coordMasterDir)
coordMaxWALsernder=2
coordMaxWALSenders=($coordMaxWALsernder )
coordSlave=n
coordSlaveSync=n
coordArchLogDirs=($coordArchLogDir)
coordExtraConfig=coordExtraConfig
cat > $coordExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $coordExtraConfig
include_if_exists = '/data/TBase/global/global_TBase.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 = 128MB
max_pool_size = 200
log_statement = 'ddl'
log_destination = 'csvlog'
logging_collector = on
log_directory = 'pg_log'
listen_addresses = '*'
max_connections = 200
EOF
coordSpecificExtraConfig=(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)
coordAdditionalSlaves=n
cad1_Sync=n
#---- Datanodes ---------------------
dn1MstrDir=/data/TBase/data/dn001
dn2MstrDir=/data/TBase/data/dn002
dn1ALDir=/data/TBase/data/datanode_archlog1
dn2ALDir=/data/TBase/data/datanode_archlog2
primaryDatanode=dn001
datanodeNames=(dn001 dn002)
datanodePorts=(40004 40005)
datanodePoolerPorts=(41111 41112)
datanodePgHbaEntries=(0.0.0.0/0)
datanodeMasterServers=(192.168.20.25 192.168.20.25)
datanodeMasterDirs=($dn1MstrDir $dn2MstrDir)
dnWALSndr=4
datanodeMaxWALSenders=($dnWALSndr $dnWALSndr)
datanodeSlave=n
datanodeArchLogDirs=($dn1ALDir/dn001 $dn2ALDir/dn002)
datanodeExtraConfig=datanodeExtraConfig
cat > $datanodeExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $datanodeExtraConfig
include_if_exists = '/data/TBase/global/global_TBase.conf'
listen_addresses = '*'
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 = 128MB
max_connections = 200
max_pool_size = 200
log_statement = 'ddl'
log_destination = 'csvlog'
wal_buffers = 4MB
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
(8)分发二进制包

(9)检查集群各节点二进制包是否已分发

(10)集群初始化

(11)查看集群各节点的运行情况

(12)通过CN节点登录TBase数据库集群,查看数据库版本和各节点状态

三、开始使用TBase数据库
1、创建默认的分组和分片组
在使用TBase数据库之前,需要创建默认的分组和分片组
TBase的所有 datanode 节点都将添加到默认组中。另外,为了增加TBase数据分发的灵活性,增加了一个中间逻辑层来维护数据记录到物理节点的映射,这称为分片。
因此,需要提前创建分片。命令如下:

2、创建数据库、用户、表、插入表数据

3、通过DBeaver图形客户端访问TBase
(1)启动DBeaver图形客户端程序

(2)新建数据库连接
点击“数据库”菜单中的“新建数据库连接”,如下所示:

(3)在数据库驱动程序列表中,找到PostgreSQL,如下所示:

(4)输入TBase数据库的相关信息,如下所示:

(5)测试连接
点击左下层的“测试连接”按钮,成功连接,则显示如下提示框:

(6)点击完成
DBeaver成功连接到TBase数据库后,界面如下:

此时,就可以通过DBeaver图形客户端,对TBase数据库进行访问和操作了。




