当前位置: 首页 > news >正文

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

数据库管理232期 2024-08-19

  • 数据库管理-第232期 初探OpenTenBase(20240819)
    • 1 OpenTenBase简介
    • 2 架构介绍
    • 3 集群规划
    • 4 部署集群
      • 4.1 操作系统配置
      • 4.2 数据库软件下载与安装
      • 4.3 配置集群
      • 4.4 分发软件
      • 4.5 启动数据库
      • 4.6 查看集群状态
    • 5 访问数据库
    • 总结

数据库管理-第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
EOFyum -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
# 在下面地址下载最新安装包
# https://github.com/OpenTenBase/OpenTenBase/tags
tar -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_signature
cd 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_ctl
cd /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.105pgxcInstallDir=/data/opentenbase/install/opentenbase_bin_v2.0
pgxcOwner=opentenbase
defaultDatabase=postgres
pgxcUser=$pgxcOwner
tmpDir=/tmp
localTmpDir=$tmpDir
configBackup=n
configBackupHost=pgxc-linker
configBackupDir=$HOME/pgxc
configBackupFile=pgxc_ctl.bak#---- GTM ----------
gtmName=gtm
gtmMasterServer=$IP_1
gtmMasterPort=50001
gtmMasterDir=/data/opentenbase/data/gtm
gtmExtraConfig=none
gtmMasterSpecificExtraConfig=none
gtmSlave=y
gtmSlaveServer=$IP_2
gtmSlavePort=50001
gtmSlaveDir=/data/opentenbase/data/gtm
gtmSlaveSpecificExtraConfig=none#---- Coordinators -------
coordMasterDir=/data/opentenbase/data/coord
coordArchLogDir=/data/opentenbase/data/coord_archlogcoordNames=(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: $coordExtraConfiginclude_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 = 2000EOFcoordSpecificExtraConfig=(none none)
coordExtraPgHba=coordExtraPgHba
cat > $coordExtraPgHba <<EOFlocal   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                 trustEOFcoordSpecificExtraPgHba=(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_archlogprimaryDatanode=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: $datanodeExtraConfiginclude_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 = 1GBEOFdatanodeSpecificExtraConfig=(none none none)
datanodeExtraPgHba=datanodeExtraPgHba
cat > $datanodeExtraPgHba <<EOFlocal   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                 trustEOFdatanodeSpecificExtraPgHba=(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中,安装有点点麻烦

老规矩,知道写了些啥。


http://www.mrgr.cn/news/6324.html

相关文章:

  • 计算机视觉与视觉大模型对板书检测效果对比
  • 1089:数字反转
  • Spring Boot中使用SA-Token的全面指南
  • 打卡学习Python爬虫第四天|bs4爬取优美图库的小清新图片
  • Python与React结合:构建高效前端与后端的综合性技术探索
  • git错误fatal: Unpack error, check server log
  • wpf datagrid 设置自动新增行后 避免行内没有内容也会新增行处理
  • 江协科技STM32学习- P5 GPIO输出
  • 动手实现基于Reactor模型的高并发Web服务器(一):epoll+多线程版本
  • 解码极氪汽车的短期成效与长期定力
  • World of Warcraft [CLASSIC] Engineering 335-420
  • vue3 Props的用法(父传子)
  • SSL/TLS协议信息泄露漏洞修复
  • Java List 和 ArrayList
  • 移动云电脑手机端3.0全新升级,畅享个人便捷管理,筑牢安全管控防线
  • CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models
  • MySQL——为表和字段取别名(1)为表取别名
  • C语言-将n个数输入时顺序的逆序排列,用指针函数实现
  • 【项目】仿mudo库实现高并发服务器
  • 分治算法的介绍与原理解析