TBase开源版V2.1.0 集群搭建部署完整版

一、闲扯

公司有项目要用到TBase数据库集群,本来是我们组一个前辈搭好的,然后dn1和dn2总是没法同步,或者说是同步不完全(dn1建的表写入数据,dn2里会有不完整的表结构,但是没有其他的,后来找到原因是最大连接数的配置问题),一直找不到原因,项目经理大笔一挥,重新部署一套。然而我们组那个前辈去重保某个重要项目了,我赶鸭子上架,以前用都不会用,现在要两天内搭一套集群出来,还得带负载均衡。
其实说起来并不困难,主要是难在我经验过少,又是踩坑无数的学习过程,现在我搭的集群已经开始正常运行了,这篇文章拿来做个记录。

二、前期准备

1. 什么是TBase

TBase是腾讯基于postgresql数据库二次开发的,其他的大家自行百度或谷歌,大把大把的资料。

2. 集群规划

使用两台虚拟机搭建1GTM主+1GTM备+2CN主(CN主之间对等,因此无需备CN)+2DN主+2DN备的集群,该集群为具备容灾能力的最小配置。机器IP规划为

测试机01:172.16.8.247 tbase01
测试机02:172.16.8.248 tbase02

官方文档和腾讯内部文档要求资源给8C16G+50G系统盘+CentOS 7.3最小化+3.10内核,我自己的测试环境里还有TDSQL集群,资源确实不够,于是开了两台2C16G的虚拟机,其他都一样。各节点规划为:
在这里插入图片描述

3. 基本配置

PS:虚拟机安装及基本网络配置等过程略。

3.1 安装基本依赖包及简单优化

更换国内yum源参考:
CentOS-7系统配置华为云yum源

由于是CentOS 7.3最小化安装,所以需要补充安装一些依赖包

yum -y install gcc gcc-c++ pcre-devel openssl-devel #基本环境依赖
yum -y install net-tools vim unzip wget lrzsz #部分常用工具

tbase所需依赖包

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

ssh连接优化:

vim /etc/ssh/sshd_config
:set nu #使vim编辑器显示文件行数
修改以下内容:
GSSAPIAuthentication no
UseDNS no

3.2 修改主机名,配置账号

为了方便,我把247改成tbase01,把248改成tbase02

hostname #查看当前主机名
hostnamectl set-hostname tbase01 #修改主机名为tbase01
hostname #查看当前主机名

修改好后xshell重新连接,显示的机器名就是你刚刚修改的了。
在这里插入图片描述
为了方便看,可以改一下字体颜色,具体操作移步这篇:https://blog.csdn.net/aidream1239/article/details/107810095

3.3 创建tbase用户并配置权限

创建tbase用户及用户目录,并添加密码(必须有,而且两台都要)

mkdir /data #新建文件夹
useradd -d /data/tbase tbase #添加新用户并指向/data/tbase
passwd tbase #给tbase用户添加密码
chown -R tbase:tbase /data #这一步权限涉及后面分发二进制包等,很重要

3.4 配置虚拟机互信

(注意:除第①和第②步在root下进行,其他操作均在tbase用户下进行,且需提前关闭firewalld和selinux

① root下,两台机器分别编辑/etc/ssh/sshd_config文件:

vim /etc/ssh/sshd_config
:set nu #使vim编辑器显示文件行数
修改以下内容:
RSAAuthentication yes  #启用rsa认证,如果sshd_config里没有这一项可以忽略
PubkeyAuthentication yes  #启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys  #公钥文件路径,一般默认不需修改

② 然后两台机器分别重启sshd服务:

systemctl restart sshd

③ 两台机器分别切换到tbase用户下,查看~下有没有.ssh目录,没有就新建一个,注意权限问题。

su tbase
cd ~
mkdir .ssh
chmod 700 .ssh #.ssh需要700权限
ssh-keygen -t rsa #生成公钥私钥

注意提示的密钥保存路径。
在这里插入图片描述
④ 247与248,247与247互相分发密钥(主节点也需要给自己配置互信),执行命令后需要输入一次目标机器tbase用户的密码:

ssh-copy-id -i /data/tbase/.ssh/id_rsa.pub tbase@172.16.8.248  #在247上执行,密钥路径建议使用绝对路径
ssh-copy-id -i /data/tbase/.ssh/id_rsa.pub tbase@172.16.8.247  #在248上执行,密钥路径建议使用绝对路径
ssh-copy-id -i /data/tbase/.ssh/id_rsa.pub tbase@172.16.8.247  #在247上执行,密钥路径建议使用绝对路径

大小写问题我输错了好几次~~
在这里插入图片描述
⑤ 配置权限
分发密钥后,.ssh下会有一个authorized_keys文件,需要添加600或644权限

cd ~/.ssh
chmod 644 authorized_keys

在这里插入图片描述
⑥测试互信

ssh 'tbase@172.16.8.248'  #247上执行
ssh 'tbase@172.16.8.247'  #248上执行
ssh 'tbase@172.16.8.247'  #247上执行

两台机器能够互相免密,则互信配置成功。
在这里插入图片描述

三、安装部署

1. 获取TBase安装包

① 可以从git或腾讯工蜂直接wget,我直接用之前的V2.1.0版本。

cd /data/tbase
任选一个:
wget https://git clone https://用户名:密码@git.code.tencent.com/Tencent_Open_Source/TBase.git #腾讯工蜂
wget git clone https://github.com/Tencent/TBase #GIT,可能会慢一些
https://pan.baidu.com/s/1FTRykAe0D_UEw9x7bKXhgA 提取码: z31m  #我的网盘,TBase版本V2.1.0

② 解压

cd /data/tbase
unzip mirrors-tbase-v2.1.0-release.zip 
mv mirrors-tbase-v2.1.0-release.zip /opt  #个人习惯把原始安装包统一放在/opt下面

2. 源码编译安装configure

2.1 编译configure

cd /data/tbase/tbase  #进入刚刚解压的安装包
chmod +x configure* 
./configure --prefix=/data/tbase/tbase_bin_v2.1 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g  #执行脚本编译

大量刷屏后执行完毕。
在这里插入图片描述

2.2 安装configure

make clean
make && make install

出现下图时第一步成功了。
在这里插入图片描述

3. 安装contrib:

chmod +x contrib/pgxc_ctl/make_signature
cd contrib
make -sj
make install

出现下图则成功。
在这里插入图片描述

4. 配置环境变量

tbase用户下的~/.bashrc添加下列配置(所有机器都需要,注意根据自己实际配置添加)

export TBASE_HOME=/data/tbase/tbase_bin_v2.1
export PATH=$TBASE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$TBASE_HOME/lib:${LD_LIBRARY_PATH}

在这里插入图片描述
使配置生效:

source ~/.bashrc

截至目前,所有所需基本环境已配置完毕,进入集群初始化阶段。

5. 生成pgxc_ctl模板配置文件

主节点进入pgxc_ctl工具,此时会提醒缺少配置文件,使用命令自动生成模板文件:
在这里插入图片描述

pgxc_ctl  #进入pgxc_ctl工具
prepare config  #生成模板文件
exit  #退出pgxc_ctl工具

根据自己实际情况修改pgxc_ctl模板配置文件:

cd /data/tbase/pgxc_ctl
vim pgxc_ctl.conf
:set nu  #vim中显示行数

6. 分发二进制包并初始化集群

主节点下,进入pgxc_ctl工具,使用deploy all分发二进制包,使用init all初始化集群:
在这里插入图片描述

pgxc_ctl #进入pgxc工具
deploy all  #分发二进制包
init all  #初始化集群

初始化集群会产生大量刷屏的数据,刷屏结束后,可以使用monitor all 命令查看集群情况。
本次有节点没起来,后面再研究哪里出的问题,估计是pgxc_ctl.conf。
在这里插入图片描述

monitor all #查看集群状态

7. 集群访问,创建分布式表

psql -h 172.28.16.239 -p 30004 -d postgres -U tbase
create default node group default_group  with (dn001,dn002);
create sharding group to group default_group;
create table t1(id int primary key,name varchar(20));
insert into t1 select generate_series(1,100);

TBase集群起来后,需要创建分布式表才能够使用。

----------2023.7.7 新增一下pgxc_ctl.conf,刚发现以前没放上来。。。。。。
PS:上面文章里的集群已经停止使用了,毕竟三年过去了,所以这份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
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
TBase DataX是一个开源的数据传输工具,用于在不同数据源之间进行数据的传输和同步。它可以支持包括关系型数据库、大数据存储系统、文件系统等多种数据源之间的数据传输。 TBase DataX的工作原理是通过插件化的方式,将不同数据源的读取和写入过程抽象成不同的插件,以实现数据的源端读取和目标端写入。用户可以通过配置文件来指定读取和写入的数据源,并定义数据的转换规则和筛选条件。 相对于传统的数据传输工具,TBase DataX具有以下几个特点: 1. 插件化架构:TBase DataX采用了插件化的架构设计,使得它可以灵活地支持不同数据源的读取和写入操作。用户可以根据实际需求选择不同的插件,无需修改核心代码。 2. 分布式传输:TBase DataX支持将数据传输任务分发到多台机器上进行并发处理,提高了传输的效率和速度。同时,它还提供了故障转移和容错机制,保证数据传输的可靠性。 3. 简单易用:TBase DataX提供了简洁的配置文件格式,用户可以通过简单的配置来完成数据传输任务。同时,它还提供了丰富的日志和监控功能,方便用户进行任务的管理和监控。 总的来说,TBase DataX是一个功能强大、灵活易用的数据传输工具,可以帮助用户快速实现不同数据源之间的数据传输和同步。无论是大数据环境下的数据迁移,还是数据仓库的数据同步,TBase DataX都能提供稳定可靠的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值