PostgreSQL分布式解决方案-Citus
·
PostgreSQL分布式解决方案-Citus
文章目录
前言
本文我们介绍基于 PostgreSQL 的分布式解决方案 Citus,分布式数据库是指物理上不在一起,逻辑上是一个整体的数据库集群系统。
Citus 的系统架构中包含协调者节点和工作者节点,SQL语句经过语法解析后,在协调者节点的分析阶段被Citus扩展所替换,并转换为并行的SQL语句分发到后端的工作节点上执行。
一、安装和配置 Citus
Citus 既可以在单机环境部署,也可以在多机环境部署。下面,我们使用单机环境部署。
1.1 节点规划
| 端口 | 功能 |
|---|---|
| 6666 | CN |
| 7777 | WN1 |
| 8888 | WN2 |
1.2 部署安装 PostgreSQL
参考之前的文档 先部署好 PostgreSQL ,不用初始化。
1.3 创建目录
mkdir /dbs/pg14/data_cn
mkdir /dbs/pg14/data_vn01
mkdir /dbs/pg14/data_vn02
配置cn环境变量
cat >/home/postgres/pg6666.env<<EOF
export PGHOME=/pg14/soft
export PGDATA=/dbs/pg14/data_cn
export PGUSER=postgres
export PGPORT=6666
export LD_LIBRARY_PATH=\${PGHOME}/lib:/lib:/lib64:/usr/lib:/usr/lib64
export PATH=\${PGHOME}/bin:/usr/bin:/usr/sbin:/sbin:\$PATH
export MANPATH=/dbs/pg14/data_cn/share/man/:\$MANPATH
EOF
配置vn01 环境变量
cat >/home/postgres/pg7777.env<<EOF
export PGHOME=/pg14/soft
export PGDATA=/dbs/pg14/data_vn01
export PGUSER=postgres
export PGPORT=7777
export LD_LIBRARY_PATH=\${PGHOME}/lib:/lib:/lib64:/usr/lib:/usr/lib64
export PATH=\${PGHOME}/bin:/usr/bin:/usr/sbin:/sbin:\$PATH
export MANPATH=/dbs/pg14/data_vn01/share/man/:\$MANPATH
EOF
配置vn02 环境变量
cat >/home/postgres/pg8888.env<<EOF
export PGHOME=/pg14/soft
export PGDATA=/dbs/pg14/data_vn02
export PGUSER=postgres
export PGPORT=8888
export LD_LIBRARY_PATH=\${PGHOME}/lib:/lib:/lib64:/usr/lib:/usr/lib64
export PATH=\${PGHOME}/bin:/usr/bin:/usr/sbin:/sbin:\$PATH
export MANPATH=/dbs/pg14/data_vn02/share/man/:\$MANPATH
EOF
ll /home/postgres/
总用量 12
-rw-rw-r–. 1 postgres postgres 278 12月 5 16:36 pg6666.env
-rw-rw-r–. 1 postgres postgres 282 12月 5 16:36 pg7777.env
-rw-rw-r–. 1 postgres postgres 282 12月 5 16:36 pg8888.env
二、初始化数据库
2.1 初始化 coordinate 协调节点
source /home/postgres/pg6666.env
echo $PGDATA
initdb -D $PGDATA

cat > $PGDATA/pg_hba.conf << EOF
host all all 192.168.43.0/24 trust
EOF
echo "listen_addresses = '*'" | tee -a $PGDATA/postgresql.conf listen_addresses = '*'
echo "port = '6666'" |tee -a $PGDATA/postgresql.conf port = '6666'
启动服务6666
pg_ctl -D /dbs/pg14/data_cn -l logfile start
2.3 初始化 work 工作节点01
source /home/postgres/pg7777.env
echo $PGDATA
initdb -D $PGDATA
cat > $PGDATA/pg_hba.conf << EOF
host all all 192.168.43.0/24 trust
EOF
echo "listen_addresses = '*'" | tee -a $PGDATA/postgresql.conf listen_addresses = '*'
echo "port = '7777'" |tee -a $PGDATA/postgresql.conf port = '7777'
启动服务7777
pg_ctl -D /dbs/pg14/data_vn01 -l logfile start
2.4 初始化 work 工作节点02
source /home/postgres/pg8888.env
echo $PGDATA
initdb -D $PGDATA
cat >> $PGDATA/pg_hba.conf << EOF
host all all 192.168.43.0/24 trust
EOF
echo "listen_addresses = '*'" | tee -a $PGDATA/postgresql.conf listen_addresses = '*'
echo "port = '8888'" |tee -a $PGDATA/postgresql.conf port = '8888'
启动服务8888
pg_ctl -D /dbs/pg14/data_vn02 -l logfile start
三、安装Citus
通过链接下载安装包
3.1 安装依赖
退到root权限下下载并安装依赖
yum install -y libcurl libcurl-devel lz4 lz4-devel zstd epel-release libzstd-devel
yum install autoconf automake libtool
yum -y install epel-release
yum -y install libzstd-devel
3.2 CN 节点安装Citus
su - postgres
cd /opt
wget https://api.pgxn.org/dist/citus/11.3.0/citus-11.3.0.zip
unzip citus-11.3.0.zip
cd /opt/citus-11.3.0
source /home/opstgres/pg6666.env
./autogen.sh
./configure
make -j4 && make install
3.3 CN 添加 citus 预在扩展库
su - postgres
source /home/opstgres/pg6666.env
pg_ctl -D $PGDATA -l logfile start
psql
create database clusterdb;
\c clusterdb
alter system set shared_preload_libraries='citus';
3.4 重启CN节点 检查一下
pg_ctl -D $PGDATA -l logfile restart
##查看CN 节点 实例端口监听情况
netstat -anlp |grep 6666
3.5 客户端创建 citus扩展
psql -U postgres -d clusterdb
create extension citus;
以上 CN节点操作完
3.6 work 节点上安装citus
通过 source 控制 worker 节点切换
source /home/postgres/pg7777.env
source /home/postgres/pg8888.env
两个 worker 节点上分别执行以下操作
echo "shared_preload_libraries = 'citus'" | tee -a $PGDATA/postgresql.conf
pg_ctl -D $PGDATA -l /tmp/logfile restart
psql
postgres=# create database clusterdb;
postgres=# \c clusterdb
postgres=# \c clusterdb
3.7 新增worker节点
source /home/postgres/pg6666.env
psql -d clusterdb
##增加节点
select * from master_add_node('192.168.43.141 , 7777');
select * from master_add_node('192.168.43.141 , 8888');
##删除节点
select * from master_remove_node('192.168.43.141 , 7777');
## 查看节点信息
select * from master_get_active_worker_nodes();
select * from pg_dist_node;
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)