首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开源TBase编译部署详细步骤

开源TBase编译部署详细步骤

原创
作者头像
腾讯云数据库 TencentDB
发布2020-12-23 09:54:33
发布2020-12-23 09:54:33
3.1K0
举报

写在前边

很多学员想学习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

  • 集群规划
代码语言:txt
复制
 机器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

  • 集群拓扑图
集群拓扑图.png
集群拓扑图.png

实验步骤

安装步骤简介:

  • 申请CVM(略)
  • 创建tbase用户
  • 安装相关rpm依赖包
  • 获取TBase开源安装包
  • 配置环境变量
  • 源码编译
  • 初始化pgxc_ctl.conf文件
  • 分发二进包
  • 初始化集群
  • 集群状态查看
  • 集群访问和创建分布式表

具体安装过程:

  • 申请CVM(略) 请登陆腾讯云官方网站自行申请CVM。
  • 创建tbase用户
代码语言:txt
复制
mkdir /data
useradd -d /data/tbase tbase
  • 安装相关rpm依赖包
代码语言:txt
复制
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)申请账号和密码。下载方式如下:

代码语言:txt
复制
git clone https://用户名:密码@git.code.tencent.com/tencent_open_source/tbase.git
  • 配置环境变量(使用root用户)
代码语言:txt
复制
mkdir -p /data/tbase/install
chown -R tbase:tbase /data
export SOURCECODE_PATH=/data/tbase/TBase
export INSTALL_PATH=/data/tbase/install
  • 源码编译
  1. configure配置。运行成功之后如图所示
代码语言:txt
复制
cd ${SOURCECODE_PATH}
 chmod +x configure*
 ./configure --prefix=${INSTALL_PATH}/tbase_bin_v2.0  --enable-user-switch --with-openssl  --with-ossp-uuid CFLAGS=-g
configure配置.png
configure配置.png
  1. 安装 安装成功后如下图
代码语言:txt
复制
 make clean
 make -sj 4
 make install
安装.png
安装.png
  1. contrib安装
代码语言:txt
复制
 chmod +x contrib/pgxc_ctl/make_signature
 cd contrib
 make -sj 4
contrib_make.png
contrib_make.png
代码语言:txt
复制
make install
make_install.png
make_install.png
  • 初始化pgxc_ctl.conf文件(在编译的机器上执行) 注意这个文件行首不要出现空格!
代码语言:txt
复制
[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个节点都要执行)

代码语言:txt
复制
[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

代码语言:txt
复制
[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

执行成功之后如图所示:

deployall_成功.png
deployall_成功.png
  • 初始化集群 进入到pgxc_ctl命令交互工具,执行init all命令,执行成功之后截图如下(本次实验GTM slave节点没有拉起来,暂时未找到原因,后续找到原因会进行更新。GTM slave是备节点,不会影响数据库的使用,只是无法进行GTM组件容灾的演练)
代码语言:txt
复制
[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
image.png
image.png
  • 集群状态查看

进入pgxc_ctl命令交互界面,执行monitor all命令可以查看各个组件的运行情况。

代码语言:txt
复制
[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
  • 集群访问和创建分布式表
代码语言:txt
复制
[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);
create_table.png
create_table.png

错误处理

  1. 报错如下 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
代码语言:txt
复制
yum install -y bison.x86_64 bison-devel.x86_64 flex.x86_64 flex-devel.x86_64
image.png
image.png
  1. configure: error: readline library not found
代码语言:txt
复制
yum install -y readline readline-dev;
image.png
image.png
  1. configure: error: library 'crypto' is required for OpenSSL 解决方案
代码语言:txt
复制
yum install -y openssl-devel
  1. configure: error: library 'ossp-uuid' or 'uuid' is required for OSSP UUID 解决方案
代码语言:txt
复制
yum install -y uuid uuid-devel
  1. deploy all期间报错
代码语言:txt
复制
...
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/

image.png
image.png
  1. /data/tbase/pgxc_ctl/pgxc_ctl.conf: line 169: warning: here-document at line 45 delimited by end-of-file (wanted `EOF') 解决方案
代码语言:txt
复制
检查pgxc_ctl.conf文件,尤其注意行首空格问题。因为EOF前边有空格的时候,不会被识别为输入重定向的结束符。
  1. 在执行init db时,提示找不到pg_ctl命令。 解决方案
代码语言:txt
复制
把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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前边
  • 实验环境简介
  • 实验步骤
  • 错误处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档