很多学员想学习TBase数据库,但是苦于没有企业版的授权文件,在编译部署开源版本的时候又遇到诸多问题,因此我写下这篇文章供大家参考。
title | value |
|---|---|
机器数量 | 2台腾讯CVM |
操作系统版本 | CentOS Linux release 7.8.2003 (Core) |
内核信息 | Linux VM-16-17-centos 3.10.0-1127.13.1.el7.x86_64 #1 SMP Tue Jun 23 15:46:38 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux |
CPU | 8 core |
RAM | 16GB |
DISK | 50GB |
机器1:172.21.16.17
机器2:172.21.16.25节点名称 | IP | 数据目录 |
|---|---|---|
GTM master | 172.21.16.17 | /data/tbase/data/gtm |
GTM slave | 172.21.16.25 | /data/tbase/data/gtm |
CN1 | 172.21.16.17 | /data/tbase/data/coord |
CN2 | 172.21.16.25 | /data/tbase/data/coord |
DN1 master | 172.21.16.17 | /data/tbase/data/dn001 |
DN1 slave | 172.21.16.25 | /data/tbase/data/dn001 |
DN2 master | 172.21.16.25 | /data/tbase/data/dn002 |
DN2 slave | 172.21.16.17 | /data/tbase/data/dn002 |

安装步骤简介:
具体安装过程:
mkdir /data
useradd -d /data/tbase tbaseyum install -y bison.x86_64 bison-devel.x86_64 flex.x86_64 flex-devel.x86_64
yum install -y readline readline-dev
yum install -y readline.x86_64 readline-devel.x86_64
yum install -y zlib.x86_64 zlib-devel.x86_64
yum install -y openssl-devel
yum install -y uuid uuid-devel
yum install -y git.x86_64TBase开源源码可以在GitHub上下载,但是国外的镜像源下载速度较慢,所以本次实验采用的是国内的镜像源,大家可以登陆腾讯工蜂(git.code.tencent.com)申请账号和密码。下载方式如下:
git clone https://用户名:密码@git.code.tencent.com/tencent_open_source/tbase.gitmkdir -p /data/tbase/install
chown -R tbase:tbase /data
export SOURCECODE_PATH=/data/tbase/TBase
export INSTALL_PATH=/data/tbase/installcd ${SOURCECODE_PATH}
chmod +x configure*
./configure --prefix=${INSTALL_PATH}/tbase_bin_v2.0 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g
make clean
make -sj 4
make install
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj 4
make install
[root@VM-16-17-centos ~]# chown tbase:tbase -R /data
[root@VM-16-17-centos ~]# su - tbase
[tbase@VM-16-17-centos pgxc_ctl]$ cat pgxc_ctl.conf
#!/bin/bash
pgxcInstallDir=/data/tbase/install/tbase_bin_v2.0
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=172.21.16.17
gtmMasterPort=50001
gtmMasterDir=/data/tbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=y
gtmSlaveServer=172.21.16.25
gtmSlavePort=50001
gtmSlaveDir=/data/tbase/data/gtm
gtmSlaveSpecificExtraConfig=none
#---- Coordinators -------
coordMasterDir=/data/tbase/data/coord
coordArchLogDir=/data/tbase/data/coord_archlog
coordNames=(cn001 cn002 )
coordPorts=(30004 30004 )
poolerPorts=(31110 31110 )
coordPgHbaEntries=(0.0.0.0/0)
coordMasterServers=(172.21.16.17 172.21.16.25)
coordMasterDirs=($coordMasterDir $coordMasterDir)
coordMaxWALsernder=2
coordMaxWALSenders=($coordMaxWALsernder $coordMaxWALsernder )
coordSlave=n
coordSlaveSync=n
coordArchLogDirs=($coordArchLogDir $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 = 1024MB
max_pool_size = 2000
log_statement = 'ddl'
log_destination = 'csvlog'
logging_collector = on
log_directory = 'pg_log'
listen_addresses = '*'
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/tbase/data/dn001
dn2MstrDir=/data/tbase/data/dn002
dn1SlvDir=/data/tbase/data/dn001
dn2SlvDir=/data/tbase/data/dn002
dn1ALDir=/data/tbase/data/datanode_archlog
dn2ALDir=/data/tbase/data/datanode_archlog
primaryDatanode=dn001
datanodeNames=(dn001 dn002)
datanodePorts=(40004 40004)
datanodePoolerPorts=(41110 41110)
datanodePgHbaEntries=(0.0.0.0/0)
datanodeMasterServers=(172.21.16.17 172.21.16.25)
datanodeMasterDirs=($dn1MstrDir $dn2MstrDir)
dnWALSndr=4
datanodeMaxWALSenders=($dnWALSndr $dnWALSndr)
datanodeSlave=y
datanodeSlaveServers=(172.21.16.25 172.21.16.17)
datanodeSlavePorts=(50004 54004)
datanodeSlavePoolerPorts=(51110 51110)
datanodeSlaveSync=n
datanodeSlaveDirs=($dn1SlvDir $dn2SlvDir)
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 = 1024MB
max_connections = 4000
max_pool_size = 4000
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配置tbase用户环境变量(2个节点都要执行)
[tbase@VM-16-17-centos pgxc_ctl]$ cat ~/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# Use rspecific aliases and functions
export TBASE_HOME=/data/tbase/install/tbase_bin_v2.0
export PATH=$TBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$TBASE_HOME/lib:${LD_LIBRARY_PATH}
[tbase@VM-16-17-centos pgxc_ctl]$ cat /etc/environment
PATH="/data/tbase/install/tbase_bin_v2.0/bin:/data/tbase/install/tbase_bin_v2.0/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/data/tbase/.local/bin:/data/tbase/bin"进入到pgxc_ctl交互工具,然后执行deploy all
[tbase@VM-16-17-centos pgxc_ctl]$ pgxc_ctl
/bin/bash
Installing pgxc_ctl_bash script as /data/tbase/pgxc_ctl/pgxc_ctl_bash.
Installing pgxc_ctl_bash script as /data/tbase/pgxc_ctl/pgxc_ctl_bash.
Reading configuration using /data/tbase/pgxc_ctl/pgxc_ctl_bash --home /data/tbase/pgxc_ctl --configuration /data/tbase/pgxc_ctl/pgxc_ctl.conf
Finished reading configuration.
******** PGXC_CTL START ***************
Current directory: /data/tbase/pgxc_ctl
PGXC deploy all执行成功之后如图所示:

[tbase@VM-16-17-centos pgxc_ctl]$ pgxc_ctl
/bin/bash
Installing pgxc_ctl_bash script as /data/tbase/pgxc_ctl/pgxc_ctl_bash.
Installing pgxc_ctl_bash script as /data/tbase/pgxc_ctl/pgxc_ctl_bash.
Reading configuration using /data/tbase/pgxc_ctl/pgxc_ctl_bash --home /data/tbase/pgxc_ctl --configuration /data/tbase/pgxc_ctl/pgxc_ctl.conf
Finished reading configuration.
******** PGXC_CTL START ***************
Current directory: /data/tbase/pgxc_ctl
PGXC init all
进入pgxc_ctl命令交互界面,执行monitor all命令可以查看各个组件的运行情况。
[tbase@VM-16-17-centos pgxc_ctl]$ pgxc_ctl
/bin/bash
Installing pgxc_ctl_bash script as /data/tbase/pgxc_ctl/pgxc_ctl_bash.
Installing pgxc_ctl_bash script as /data/tbase/pgxc_ctl/pgxc_ctl_bash.
Reading configuration using /data/tbase/pgxc_ctl/pgxc_ctl_bash --home /data/tbase/pgxc_ctl --configuration /data/tbase/pgxc_ctl/pgxc_ctl.conf
Finished reading configuration.
******** PGXC_CTL START ***************
Current directory: /data/tbase/pgxc_ctl
PGXC monitor all[tbase@VM-16-17-centos pgxc_ctl]$ psql -h172.21.16.17 -p 30004 -d postgres -U tbase
postgres=# create default node group default_group with (dn001,dn002);
postgres=# create sharding group to group default_group;
postgres=# create table t1(id int primary key,name varchar(20));
postgres=# insert into t1 select generate_series(1,100);
yum install -y bison.x86_64 bison-devel.x86_64 flex.x86_64 flex-devel.x86_64
yum install -y readline readline-dev;
yum install -y openssl-develyum install -y uuid uuid-devel...
tar: share/doc/postgresql/extension/autoinc.example: Cannot open: File exists
tar: share/doc/postgresql/extension/insert_username.example: Cannot open: File exists
tar: share/doc/postgresql/extension/moddatetime.example: Cannot open: File exists
tar: share/doc/postgresql/extension/refint.example: Cannot open: File exists
tar: share/doc/postgresql/extension/timetravel.example: Cannot open: File exists
tar: share/doc/postgresql/extension: Cannot utime: Operation not permitted
tar: share/doc/postgresql: Cannot utime: Operation not permitted
tar: share/doc: Cannot utime: Operation not permitted
tar: share: Cannot utime: Operation not permitted
tar: Exiting with failure status due to previous errors
Deployment done.解决方案: 修改目录权限:chown tbase:tbase -R /data/

检查pgxc_ctl.conf文件,尤其注意行首空格问题。因为EOF前边有空格的时候,不会被识别为输入重定向的结束符。把tbase用户的$PATH环境变量添加到 /etc/environment
cat /etc/environment
PATH="/data/tbase/install/tbase_bin_v2.0/bin:/data/tbase/install/tbase_bin_v2.0/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/data/tbase/.local/bin:/data/tbase/bin"原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。