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

news2025/2/5 11:00:42

数据库管理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
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
# 在下面地址下载最新安装包
# https://github.com/OpenTenBase/OpenTenBase/tags
tar -xvf OpenTenBase-2.6.0.tar.gz

cd /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 Configuration

IP_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=$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_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

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/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

EOF

datanodeSpecificExtraConfig=(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


EOF


datanodeSpecificExtraPgHba=(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.coloradmin.cn/o/2056761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java并发常见面试题总结

文章目录 1 多线程1.1 进程、线程和协程的区别&#xff1f;&#x1f525;1.2 Java 线程和操作系统的线程有啥区别&#xff1f;1.3 如何创建线程&#xff1f;&#x1f525;1.4 runnable 和 callable 两个接口创建线程有什么不同呢&#xff1f;&#x1f525;1.5 如何停止一个正在…

2024.8.20

思维导图 C语言中指针数组和数组指针的区别 数组指针本质上是一个指针变量&#xff0c;用于存储整个数组的起始地址&#xff0c;指针每偏移一个单位&#xff0c;内存就会偏移整个数组的容量的大小&#xff0c;一般用于二维数组&#xff0c;二维数组的数组名&#xff0c;本质上是…

【可视化】封装滚动菜单列表组件

源码及源码分析 <template><!-- 滚动菜单的主要容器 --><div class"scrolling-menu"><!-- 如果headers数组有内容&#xff0c;就渲染表头 --><divclass"table-header"v-if"headers.length":style"{ backgroundC…

LLM向量嵌入知多少

向量嵌入是机器学习领域中一项引人入胜且极具实用性的技术。它们构成了众多自然语言处理&#xff08;NLP&#xff09;、推荐系统和搜索算法的基础。如果您曾经使用过推荐引擎、语音助手或语言翻译工具&#xff0c;那么您已经体验过嵌入技术的强大功能。 机器学习算法&#xff0…

如何为您的专用IP地址选择正确的IP SSL证书

随着互联网的不断发展&#xff0c;网站安全变得越来越重要。SSL证书不仅为网站提供了加密通道&#xff0c;还增强了用户对网站的信任感。对于那些使用专用IP地址的网站来说&#xff0c;选择合适的IP SSL证书至关重要。本文将为您详细介绍如何挑选最适合您网站需求的IP SSL证书。…

Cocos Creator2D游戏开发(14)---CocosCreator常用组件详解

Canvas RenderRoot2D 组件所在的节点是 2D 渲染组件数据收集的入口,而 Canvas&#xff08;画布&#xff09; 组件继承自 RenderRoot2D 组件&#xff0c;所以 Canvas 组件也是数据收集入口。所有 2D 渲染元素都必须作为 RenderRoot2D 的子节点才能被渲染。 Canvas还作为屏幕适配…

Web基础、http协议、源码编译构建LAMP

目录 一、DNS与域名 1.1域名概述 1.2域名小结 1.3DNS域名解析 1.4域名 二、网页的概念 1.网页的基本概念 三、web 1.1web概述 1.2渲染过程 1.3web1.0和web2.0 1.4静态页面和动态页面 四、http协议 1.http协议简介 2.cookie和session 2.1cookie 2.2session 3.c…

React学习笔记(一)——react基础

1. React 介绍 1.1 React是什么 React由Meta公司研发&#xff0c;是一个用于 构建Web和原生交互界面的库 1.2 React的优势 相较于传统基于DOM开发的优势&#xff1a; 组件化的开发方式不错的性能 相较于其它前端框架的优势&#xff1a; 丰富的生态跨平台支持 1.3 React的市场…

国内知名电器集团售后服务系统被黑!损失1.2亿!

两款软件入侵 近期&#xff0c;一款名为“A助手”的软件和另一款“B配置工具”被揭露存在严重的非法活动。 这两款软件被不法分子利用&#xff0c;并成功侵入了某知名企业的电器售后服务系统。通过技术手段&#xff0c;伪造了电器安装服务的工单&#xff0c;并以此骗取了大量的…

24年银行从业资格考试报名照规格要求

24年银行从业资格考试报名照规格要求 #银行从业 #银行从业资格证 #银行从业考试 #银行从业资格考试 #银行从业资格证报名照片 #银从

Unity 波函数坍缩算法随机地图生成

Unity 波函数坍缩算法随机地图生成 波函数波函数基本概念位置空间波函数动量空间波函数两种波函数之间的关系波函数的本征值和本征态波函数坍缩 熵是什么熵作为状态函数时间之箭 实现原理举个例子&#xff1a;2D迷宫地图生成 Unity 如何实现前期准备单元格代码瓦片地图代码波函…

使用亮数据爬虫工具解锁复杂爬虫场景

在当今数据驱动型时代&#xff0c;数据采集和分析能力算是个人和企业的核心竞争力。然而&#xff0c;手动采集数据耗时费力且效率低下&#xff0c;而且容易被网站封禁。 我之前使用过一个爬虫工具&#xff0c;亮数据&#xff08;Bright Data&#xff09; &#xff0c;是一款低…

PCIe学习笔记(25)

数据完整性 PCI Express的基本数据可靠性机制包含在数据链路层(data Link Layer)中&#xff0c;它使用32位的LCRC (CRC)码逐链路检测TLP中的错误&#xff0c;并采用逐链路重传机制进行错误恢复。TLP是一个数据和事务控制单元&#xff0c;由位于PCI Express域“边缘”的数据源(…

重大发现!看Apache与nginx工作模型,享web服务幸福人生

文章目录 文章相关连接如下&#xff1a; Web 服务基础介绍ApacheApache prefork 模型 Apache worker 模型Apache event模型 Nginx-高性能的 Web 服务端nginx源码安装平滑升级和回滚平滑升级步骤&#xff1a;回滚步骤 nginx启动文件 文章相关连接如下&#xff1a; 如果想更多了…

【GH】【EXCEL】P4: Chart

文章目录 data and chartdonut chart (radial chart)Radial Chart bar chartBar Chart line chartLine Chart Scatter ChartScatter Chart Surface ChartSurface Chart Chart DecoratorsChart Decorators Chart GraphicsChart Graphics data and chart donut chart (radial cha…

《面板变系数模型及 Stata 具体操作步骤》

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 在经济和社会科学研究领域&#xff0c;面板数据模型因其能够同时考虑个体和时间维度的信息而被广泛应用。传统的面板数据模型通常假设系数是固定的&#…

1.初识redis

文章目录 1.认识redis1.1 mysql和redis 对比1.2分布式系统1.2.1单机架构与分布式架构1.2.2数据库分离(应用服务器和存储服务器分离)与负载均衡1.2.3负载均衡器1.2.4 数据库读写分离1.2.5 数据库服务器引入缓存1.2.6数据库分库分表1.2.7 引入微服务 2.常见概念解释2.1 应用(Appl…

GoModule

GOPATH 最早的就是GOPATH构建模式&#xff0c; go get下载的包都在path中的src目录下 src目录是源代码存放目录。 package mainimport ("net/http""github.com/gorilla/mux" )func main() {r : mux.NewRouter()r.HandleFunc("/hello", func(w h…

iptables流量走向图

关联教学 https://www.bilibili.com/video/BV1dw411J7Qk/?spm_id_from333.337.search-card.all.click

7.2 算法设计与分析

分治法&#xff08;考的概率较低&#xff09; 回溯法&#xff08;考的概率较低&#xff09; 动态规划法&#xff08;考的概率较高&#xff09; 1