作者:胖头鱼的鱼缸(尹海文)
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。
除授权转载并标明出处外,均为“非法”抄袭
OpenTenBase是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的一款开源、开放中立的企业级分布式HTAP开源数据库,具备高扩展性、商业数据库语法兼容、分布式HTAP引擎、多级容灾和多维度资源隔离等能力,已成功应用在金融、医疗、航天等多个行业的核心业务系统。
OpenTenBase 源于腾讯云自研的数据库内核TBase,填补了业内基于PostgreSQL的开源分布式 OLTP 系统空白,具有高扩展性、商业数据库语法兼容、分布式 HTAP 引擎、多级容灾和多维度资源隔离等能力。
2023年12月16日,在2023开放原子开发者大会上,腾讯云将企业级分布式数据库TDSQL的社区发行版 OpenTenBase 正式捐赠给开放原子基金会。
目前OpenTenBase在墨天轮

OpenTenBase使用典型的share-nothing分布式数据库架构,节点之间相应独立,各自处理自己的数据,处理后的结果可能向上层汇总或在节点间流转,各处理单元之间通过网络协议进行通信,并行处理和扩展能力更好:
主要有三大模块:
接下来我们按照下面的规划搭建一个OpenTenBase,本次使用的操作系统是CentOS 7.9:
模块交互关系如下:

配置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
仅需在一个节点执行即可
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
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
pgxc_ctl > deploy all

pgxc_ctl > init all
pgxc_ctl > monitor all

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

整体来说OpenTenBase的安装过程还是比较快捷的。
但是有几点需要记录一下:
老规矩,知道写了些啥。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31466763/viewspace-3025397/ ,如需转载,请注明出处,否则将追究法律责任。