写在前边
很多学员想学习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 |
- 集群拓扑图
实验步骤
安装步骤简介:
- 申请CVM(略)
- 创建tbase用户
- 安装相关rpm依赖包
- 获取TBase开源安装包
- 配置环境变量
- 源码编译
- 初始化pgxc_ctl.conf文件
- 分发二进包
- 初始化集群
- 集群状态查看
- 集群访问和创建分布式表
具体安装过程:
- 申请CVM(略)
请登陆腾讯云官方网站自行申请CVM。 - 创建tbase用户
mkdir /data
useradd -d /data/tbase tbase
- 安装相关rpm依赖包
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 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_64
- 获取TBase开源安装包
TBase开源源码可以在GitHub上下载,但是国外的镜像源下载速度较慢,所以本次实验采用的是国内的镜像源,大家可以登陆腾讯工蜂(git.code.tencent.com)申请账号和密码。下载方式如下:
git clone https://用户名:密码@git.code.tencent.com/tencent_open_source/tbase.git
- 配置环境变量(使用root用户)
mkdir -p /data/tbase/install
chown -R tbase:tbase /data
export SOURCECODE_PATH=/data/tbase/TBase
export INSTALL_PATH=/data/tbase/install
- 源码编译
- configure配置。运行成功之后如图所示
cd ${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
- contrib安装
chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj 4
make install
- 初始化pgxc_ctl.conf文件(在编译的机器上执行)
注意这个文件行首不要出现空格!
[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
执行成功之后如图所示:
- 初始化集群
进入到pgxc_ctl命令交互工具,执行init all命令,执行成功之后截图如下(本次实验GTM slave节点没有拉起来,暂时未找到原因,后续找到原因会进行更新。GTM slave是备节点,不会影响数据库的使用,只是无法进行GTM组件容灾的演练)
[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);
错误处理
- 报错如下
Without Bison you will not be able to build PostgreSQL from Git nor
Without Flex you will not be able to build PostgreSQL from Git nor
yum install -y bison.x86_64 bison-devel.x86_64 flex.x86_64 flex-devel.x86_64
- configure: error: readline library not found
yum install -y readline readline-dev;
- configure: error: library 'crypto' is required for OpenSSL
解决方案
yum install -y openssl-devel
- configure: error: library 'ossp-uuid' or 'uuid' is required for OSSP UUID
解决方案
yum install -y uuid uuid-devel
- deploy all期间报错
...
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/
- /data/tbase/pgxc_ctl/pgxc_ctl.conf: line 169: warning: here-document at line 45 delimited by end-of-file (wanted `EOF')
解决方案
检查pgxc_ctl.conf文件,尤其注意行首空格问题。因为EOF前边有空格的时候,不会被识别为输入重定向的结束符。
- 在执行init db时,提示找不到pg_ctl命令。
解决方案
把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"