在当今数据驱动的时代,企业面临着海量数据存储、高并发访问及线性扩展的严峻挑战。传统集中式数据库在应对这些挑战时往往力不从心,分布式数据库因此成为构建现代化应用架构的核心基石。OpenTenBase,作为一款源自Postgres-XL、深度融合了PostgreSQL强大生态的企业级分布式数据库,以其优异的分布式事务处理、水平扩展能力和与标准SQL的良好兼容性,为企业关键业务提供了理想的数据库解决方案。
然而,分布式系统的强大功能往往伴随着部署与运维复杂度的提升。手动配置与管理一个包含全局事务管理器(GTM)、协调节点(CN)和数据节点(DN)的集群是一项繁琐且易错的任务。正因如此,OpenTenBase提供了开箱即用的自动化集群管理工具——opentenbase_ctl
。本指南将全面详解如何从零开始,利用opentenbase_ctl
工具高效完成OpenTenBase集群的编译、部署、配置与日常管理,助您轻松驾驭企业级分布式数据库集群。
OpenTenBase 是一个基于 Postgres-XL 项目发展而来的高级企业级分布式数据库管理系统,它支持 SQL 标准的扩展子集,包括事务、外键、用户定义的类型和函数,并增加了并行计算、安全、管理、审计等企业级功能。
一个完整的 OpenTenBase 集群由三个核心组件协同工作:
在数据访问流程中,客户端首先连接到协调节点提交SQL查询,协调节点解析SQL并生成分布式执行计划,然后将计划分发给相关的数据节点,各数据节点并行执行查询片段后将结果返回给协调节点,最终由协调节点汇总结果返回给客户端。
pgxc_ctl 是 Postgres-XL 原生的集群管理工具,它需要通过复杂的配置文件(pgxc_ctl.conf)定义所有节点参数,虽然提供精细化的控制,但配置过程相对繁琐,适合深入了解集群架构的高级用户使用。
opentenbase_ctl 则是 OpenTenBase 提供的自动化封装工具,它使用简化的配置文件(opentenbase_config.ini),能够自动生成底层复杂的 pgxc_ctl 配置,并自动处理软件包分发和节点初始化流程,大大简化了部署流程,适合大多数用户快速部署和管理集群。
特性 | opentenbase_ctl | pgxc_ctl |
---|---|---|
配置复杂度 | 低(单一简化配置文件) | 高(复杂多参数配置) |
自动化程度 | 高(全自动包分发、初始化) | 低(需多步骤手动部署) |
部署效率 | 高(一键式部署) | 低(多步骤手动部署) |
适用场景 | 标准环境快速部署 | 定制化特殊需求部署 |
维护难度 | 简单(集中化管理) | 复杂(分散化配置) |
配置文件 | opentenbase_config.ini | pgxc_ctl.conf |
学习成本 | 低(快速上手) | 高(需深入理解架构) |
# 使用 root 用户操作
sudo mkdir -p /data
sudo useradd -m -d /data/opentenbase -s /bin/bash opentenbase
sudo passwd opentenbase # 为 opentenbase 用户设置密码
# 将用户添加到 sudoers
sudo usermod -aG wheel opentenbase
echo "opentenbase ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
# 创建数据存储目录
sudo mkdir -p /home/opentenbase/data/{gtm,coord,dn_m,dn_s}
sudo chown -R opentenbase:opentenbase /home/opentenbase/data
sudo chown -R opentenbase:opentenbase /data/opentenbase
# 切换到 opentenbase 用户
su - opentenbase
# 更新系统
sudo dnf update -y
# 安装基础依赖
sudo dnf install -y \
gcc \
gcc-c++ \
make \
cmake \
readline-devel \
zlib-devel \
openssl-devel \
uuid-devel \
bison \
flex \
git \
libcurl-devel \
libxml2-devel \
libxslt-devel \
perl-IPC-Run \
perl-Test-Simple \
tcl-devel \
python3-devel \
rpm-build \
pkgconfig \
krb5-devel \
openldap-devel \
vim \
libssh2-devel \
sshpass
1. 下载并编译安装 zstd (高性能压缩库)
cd /tmp
wget https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz
tar -xzf zstd-1.5.2.tar.gz
cd zstd-1.5.2
# 编译安装到 /usr/local 目录
make -j$(nproc)
sudo make install PREFIX=/usr/local
# 更新系统的库缓存路径
sudo ldconfig
2. 下载并编译安装 lz4 (高速压缩库)
cd /tmp
wget https://github.com/lz4/lz4/archive/v1.9.4.tar.gz
tar -xzf v1.9.4.tar.gz
cd lz4-1.9.4
# 编译安装到 /usr/local 目录
make -j$(nproc)
sudo make install PREFIX=/usr/local
# 更新系统的库缓存路径
sudo ldconfig
3. 确保 libxml2 开发包正确安装
sudo dnf install -y libxml2-devel libxml2
# 验证安装是否成功
xml2-config --version
xml2-config --cflags
xml2-config --libs
4. 下载并编译安装 CLI11 (命令行解析库)
cd /tmp
git clone https://github.com/CLIUtils/CLI11.git
cd CLI11
mkdir build && cd build
cmake .. -DCLI11_TESTING=OFF -DCLI11_EXAMPLES=OFF
make -j$(nproc)
sudo make install
echo 'export SOURCECODE_PATH=/data/opentenbase/OpenTenBase' >> ~/.bashrc
echo 'export INSTALL_PATH=/data/opentenbase/install' >> ~/.bashrc
echo 'export PG_HOME=$INSTALL_PATH/opentenbase_bin_v5.0' >> ~/.bashrc
echo 'export PATH=$PG_HOME/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$PG_HOME/lib:/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export LC_ALL=C' >> ~/.bashrc
source ~/.bashrc
# 生成 SSH 密钥对
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# 将公钥添加到 authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 测试本地免密登录
ssh localhost date
# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 关闭 SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
mkdir -p $SOURCECODE_PATH
cd /data/opentenbase/
git clone https://github.com/OpenTenBase/OpenTenBase
cd ${SOURCECODE_PATH}
rm -rf ${INSTALL_PATH}/opentenbase_bin_v5.0
chmod +x configure*
./configure --prefix=${INSTALL_PATH}/opentenbase_bin_v5.0 --enable-user-switch --with-libxml --disable-license --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
cd ${INSTALL_PATH}/opentenbase_bin_v5.0
tar -zcf ${INSTALL_PATH}/opentenbase-5.21.8-i.x86_64.tar.gz *
创建配置文件 $INSTALL_PATH/opentenbase_config.ini
:
# 实例配置
[instance]
name=opentenbase_cluster
type=distributed
package=/data/opentenbase/install/opentenbase-5.21.8-i.x86_64.tar.gz
# GTM 配置
[gtm]
master=192.168.1.101
slave=192.168.1.102
# 协调节点配置
[coordinators]
master=192.168.1.101,192.168.1.102
slave=192.168.1.103
nodes-per-server=1
# 数据节点配置
[datanodes]
primary=192.168.1.101,192.168.1.102
standby=192.168.1.103,192.168.1.104
nodes-per-server=1
# 服务器访问配置
[server]
ssh-user=opentenbase
ssh-password=your_password
ssh-port=22
# 端口配置
[port]
gtm=6666
coord=5432,5433
datanode=5434,5435,5436,5437
# 数据目录配置
[dir]
gtm=/home/opentenbase/data/gtm
coord=/home/opentenbase/data/coord
datanode=/home/opentenbase/data/dn_m,/home/opentenbase/data/dn_s
# 日志配置
[log]
level=INFO
name
: 集群标识名称,支持字母、数字、下划线type
: 集群类型,分布式(distributed
)或集中式(centralized
)package
: OpenTenBase安装包的绝对路径master
: GTM主节点IP地址,只能配置一个slave
: GTM备节点IP地址,可配置多个(逗号分隔)master
: CN主节点IP地址列表slave
: CN备节点IP地址列表nodes-per-server
: 每台服务器部署的CN实例数(默认1)primary
: DN主节点IP地址列表standby
: DN备节点IP地址列表nodes-per-server
: 每台服务器部署的DN实例数(默认1)ssh-user
: 用于集群部署的系统用户名ssh-password
: 对应用户的密码ssh-port
: SSH服务端口号gtm
: GTM服务端口coord
: 协调节点端口列表datanode
: 数据节点端口列表gtm
: GTM数据目录coord
: 协调节点数据目录datanode
: 数据节点数据目录列表cd $INSTALL_PATH
opentenbase_ctl generate -c opentenbase_config.ini
此命令会根据简化的 opentenbase_config.ini
生成详细的 pgxc_ctl.conf
配置文件。
opentenbase_ctl install -c opentenbase_config.ini
安装过程包含以下步骤:
opentenbase_ctl status -c opentenbase_config.ini
该命令显示集群的详细状态信息,包括实例名称、版本号、各个节点的运行状态,以及主CN节点的连接信息。
# 启动集群
opentenbase_ctl start -c opentenbase_config.ini
# 停止集群
opentenbase_ctl stop -c opentenbase_config.ini
# 重启集群
opentenbase_ctl restart -c opentenbase_config.ini
# 清理集群(删除数据文件)
opentenbase_ctl clean -c opentenbase_config.ini
# 重新初始化集群
opentenbase_ctl reinit -c opentenbase_config.ini
export LD_LIBRARY_PATH=$PG_HOME/lib
export PATH=$PG_HOME/bin:$PATH
psql -h 127.0.0.1 -p 30004
-- 查看集群节点信息
SELECT * FROM pgxc_node;
-- 创建默认节点组和分片组
CREATE DEFAULT NODE GROUP default_group WITH (dn001);
CREATE SHARDING GROUP TO GROUP default_group;
-- 创建测试数据库和分布式表
CREATE DATABASE testdb;
\c testdb
CREATE TABLE dist_table (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
create_time TIMESTAMP DEFAULT NOW()
) DISTRIBUTE BY SHARD(id) TO GROUP default_group;
-- 插入和查询测试数据
INSERT INTO dist_table (name) VALUES ('测试数据1'), ('测试数据2'), ('测试数据3');
SELECT * FROM dist_table;
-- 查看数据分布情况
SELECT xc_node_id, COUNT(*) FROM dist_table GROUP BY xc_node_id;
通过本文的详细阐述,我们系统地完成了从系统准备、依赖配置、源码编译到使用opentenbase_ctl
工具一键部署和管理OpenTenBase分布式集群的全过程。正如所见,opentenbase_ctl
工具极大地简化了集群管理的复杂度,将用户从繁琐的多节点配置中解放出来,使企业能够快速、可靠地搭建起高性能的分布式数据库平台。
祝您部署顺利,尽情享受分布式数据库带来的强大能力!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。