暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 胖头鱼的鱼缸 2024-08-19
644

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

数据库管理-第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中,安装有点点麻烦

老规矩,知道写了些啥。

最后修改时间:2024-08-20 10:09:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论