ITPub博客

首页 > 数据库 > 国内数据库 > 数据库管理-第232期 初探OpenTenBase(20240819)

数据库管理-第232期 初探OpenTenBase(20240819)

原创 国内数据库 作者:yhw1809 时间:2024-08-19 16:45:42 0 删除 编辑

数据库管理-第232期 初探OpenTenBase(20240819)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著 名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

1 OpenTenBase简介

image.png
OpenTenBase是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的一款开源、开放中立的企业级分布式HTAP开源数据库,具备高扩展性、商业数据库语法兼容、分布式HTAP引擎、多级容灾和多维度资源隔离等能力,已成功应用在金融、医疗、航天等多个行业的核心业务系统。
OpenTenBase 源于腾讯云自研的数据库内核TBase,填补了业内基于PostgreSQL的开源分布式 OLTP 系统空白,具有高扩展性、商业数据库语法兼容、分布式 HTAP 引擎、多级容灾和多维度资源隔离等能力。
2023年12月16日,在2023开放原子开发者大会上,腾讯云将企业级分布式数据库TDSQL的社区发行版 OpenTenBase 正式捐赠给开放原子基金会。
目前OpenTenBase在墨天轮
image.png

2 架构介绍

OpenTenBase使用典型的share-nothing分布式数据库架构,节点之间相应独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转,各处理单元之间通过网络协议进行通信,并行处理和扩展能力更好:
image.png
主要有三大模块:

  • Coordinator:协调节点(简称CN)
    业务访问入口,负责数据的分发和查询规划,多个节点位置对等,每个节点都提供相同的数据库视图;在功能上CN上只存储系统的全局元数据,并不存储实际的业务数据。
  • Datanode:数据节点(简称DN)
    每个节点还存储业务数据的分片在功能上,DN节点负责完成执行协调节点分发的执行请求。
  • GTM:全局事务管理器(Global Transaction Manager)
    负责管理集群事务信息,同时管理集群的全局对象,比如序列等。

3 集群规划

接下来我们按照下面的规划搭建一个OpenTenBase,本次使用的操作系统是CentOS 7.9:
image.png
模块交互关系如下:
演示文稿1_01.png

4 部署集群

4.1 操作系统配置

配置HOSTS*

cat >> /etc/hosts <<EOF
10.10.10.101 opt01
10.10.10.102 opt02
10.10.10.103 opt03
10.10.10.104 opt04
10.10.10.105 opt05
EOF

关闭防火墙

systemctl stop firewalld.service 
systemctl disable firewalld.service

关闭SELinux

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0

创建用户

mkdir /data
useradd -d /data/opentenbase -s /bin/bash -m opentenbase
passwd opentenbase

配置ssh互信

su - opentenbase
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub opt01
ssh-copy-id -i ~/.ssh/id_rsa.pub opt02
ssh-copy-id -i ~/.ssh/id_rsa.pub opt03
ssh-copy-id -i ~/.ssh/id_rsa.pub opt04
ssh-copy-id -i ~/.ssh/id_rsa.pub opt05

安装依赖软件

rm -rf /etc/yum.repos.d/CentOS-*
cat > /etc/yum.repos.d/redhat.repo <<EOF
[CentOS]
name=CentOS
baseurl=https://mirrors.aliyun.com/centos-vault/centos/7/os/x86_64
enabled=1
gpgcheck=0
EOF
yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git

4.2 数据库软件下载与安装

仅需在一个节点执行即可

su - opentenbase
git clone  
# 在下面地址下载最新安装包
# https://github.com/OpenTenBase/OpenTenBase/tagstar -xvf OpenTenBase-2.6.0.tar.gzcd /data/opentenbase/OpenTenBase-2.6.0/
chmod +x configure*
./configure --prefix=/data/opentenbase/install/opentenbase_bin_v2.0 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g
make clean
make -sj
make install
chmod +x contrib/pgxc_ctl/make_signaturecd contrib
make -sj
make install
# 配置环境变量(每个节点都需要执行)cat >> ~/.bashrc <<EOF
export OPENTENBASE_HOME=/data/opentenbase/install/opentenbase_bin_v2.0
export PATH=\$OPENTENBASE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$OPENTENBASE_HOME/lib:\$LD_LIBRARY_PATH
export LC_ALL=C
EOF

4.3 配置集群

mkdir /data/opentenbase/pgxc_ctlcd /data/opentenbase/pgxc_ctl#根据官方文档配置文件进行调整:vim pgxc_ctl.conf#!/bin/bash# Haiwen Yin's OpenTenBase Cluster ConfigurationIP_1=10.10.10.101
IP_2=10.10.10.102
IP_3=10.10.10.103
IP_4=10.10.10.104
IP_5=10.10.10.105
pgxcInstallDir=/data/opentenbase/install/opentenbase_bin_v2.0
pgxcOwner=opentenbase
defaultDatabase=postgres
pgxcUser=$pgxcOwnertmpDir=/tmp
localTmpDir=$tmpDirconfigBackup=n
configBackupHost=pgxc-linker
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak
#---- GTM ----------gtmName=gtm
gtmMasterServer=$IP_1gtmMasterPort=50001
gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=y
gtmSlaveServer=$IP_2gtmSlavePort=50001
gtmSlaveDir=/data/opentenbase/data/gtm
gtmSlaveSpecificExtraConfig=none
#---- Coordinators -------coordMasterDir=/data/opentenbase/data/coord
coordArchLogDir=/data/opentenbase/data/coord_archlog
coordNames=(cn01 cn02)
coordPorts=(30004 30004)
poolerPorts=(31110 31110)
coordPgHbaEntries=(0.0.0.0/0)
coordMasterServers=($IP_1 $IP_2)
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/opentenbase/global/global_opentenbase.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
EOFcoordSpecificExtraConfig=(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
EOFcoordSpecificExtraPgHba=(none none)
coordAdditionalSlaves=n	
cad1_Sync=n
#---- Datanodes ---------------------dn1MstrDir=/data/opentenbase/data/dn001
dn2MstrDir=/data/opentenbase/data/dn002
dn3MstrDir=/data/opentenbase/data/dn003
dn1SlvDir=/data/opentenbase/data/dn001
dn2SlvDir=/data/opentenbase/data/dn002
dn3SlvDir=/data/opentenbase/data/dn003
dn1ALDir=/data/opentenbase/data/datanode_archlog
dn2ALDir=/data/opentenbase/data/datanode_archlog
dn3ALDir=/data/opentenbase/data/datanode_archlog
primaryDatanode=dn01
datanodeNames=(dn01 dn02 dn03)
datanodePorts=(40004 40004 40004)
datanodePoolerPorts=(41110 41110 41110)
datanodePgHbaEntries=(0.0.0.0/0)
datanodeMasterServers=($IP_3 $IP_4 $IP_5)
datanodeMasterDirs=($dn1MstrDir $dn2MstrDir $dn3MstrDir)
dnWALSndr=4
datanodeMaxWALSenders=($dnWALSndr $dnWALSndr $dnWALSndr)
datanodeSlave=y
datanodeSlaveServers=($IP_4 $IP_5 $IP_3)
datanodeSlavePorts=(50004 50004 50004)
datanodeSlavePoolerPorts=(51110 51110 51110)
datanodeSlaveSync=n
datanodeSlaveDirs=($dn1SlvDir $dn2SlvDir $dn3SlvDir)
datanodeArchLogDirs=($dn1ALDir/dn001 $dn2ALDir/dn002 $dn3ALDir/dn003)
datanodeExtraConfig=datanodeExtraConfig
cat > $datanodeExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $datanodeExtraConfig
include_if_exists = '/data/opentenbase/global/global_opentenbase.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
EOFdatanodeSpecificExtraConfig=(none 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
EOFdatanodeSpecificExtraPgHba=(none none none)
datanodeAdditionalSlaves=n
walArchive=n

4.4 分发软件

pgxc_ctl
> deploy all

image.png

4.5 启动数据库

pgxc_ctl
> init all

4.6 查看集群状态

pgxc_ctl
> monitor all

image.png

5 访问数据库

psql -h 10.10.10.101 -p 30004 -d postgres -U opentenbase
select * from pgxc_node;

image.png

总结

整体来说OpenTenBase的安装过程还是比较快捷的。
但是有几点需要记录一下:

  1. 使用RHEL8.10安装有点问题,不知道是操作还是其他的原因,回头再整一次
  2. uuid-devel没有在标准iso和epel中,安装有点点麻烦

老规矩,知道写了些啥。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3025397/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-06-07

  • 博文量
    383
  • 访问量
    403241