PostgreSQL基于Citus的分布式搭建

前言

yum快速安装

官方介绍

Citus简介

Citus以插件的方式扩展到postgresql中,独立于postgresql内核,所以能很快的跟上pg主版本的更新,部署也比较简单,是现在非常流行的分布式方案。Citus在苏宁有大规模应用,微软也提供citus的商业支持。下面是citus的架构:

2018042723003371

Citus
节点主要分为协调节点和工作节点,协调节点不存储真实数据,只存储数据分布的元信息,实际的数据被分成若干分片,打散到不同worker节点中,应用连接协调节点,协调节点进行sql解析,生成分布式执行计划,下发到worker节点执行,cn将结果汇总返回客户端。

来自 PostgreSQL的几种分布式架构对比

其它特性:

● PostgreSQL兼容

● 水平扩展

● 实时并发查

● 快速数据加载

● 实时增删改查

● 持分布式事务

● 支持常用DDL

交互

  1. 客户端应用访问数据时只和CN节点交互。
  2. CN收到SQL请求后,生成分布式执行计划,并将各个子任务下发到相应的Worker节点,之后收集Worker的结果,经过处理后返回最终结果给客户端。

服务器

  • 192.168.2.100:5432 master
  • 192.168.2.101:5432 worker101
  • 192.168.2.102:5432 worker102
  • 192.168.2.103:5432 worker103
  • 192.168.2.104:5432 worker104

安装

全部节点上的操作

安装 citus

1
2
3
4
5
curl https://install.citusdata.com/community/rpm.sh | sudo bash
# 查看所有版本
yum list|grep citus
# 安装与自己PG对应的版本
yum install -y citus83_10

查看 PG 配置文件路径

1
psql -U postgres -c 'SHOW config_file'

预加载 citus 扩展

1
2
3
4
# preload citus extension
echo "shared_preload_libraries = 'citus'" | sudo tee -a /var/lib/pgsql/10/data/postgresql.conf
# 重启
systemctl restart postgresql-10

加载待所有的数据库中

1
sudo -i -u postgres psql -c "CREATE EXTENSION citus;"

成功输出

1
CREATE EXTENSION

Worker节点上执行

1
2
3
echo "host    all             all             192.168.2.100/32            trust" >> /var/lib/pgsql/10/data/pg_hba.conf
# 重启
systemctl restart postgresql-10

在主节点上执行

添加 worker 节点

1
2
3
4
5
# 新版:citus_add_node  旧版:master_add_node
sudo -i -u postgres psql -c "SELECT * from master_add_node('192.168.2.102', 5432);"
sudo -i -u postgres psql -c "SELECT * from master_add_node('192.168.2.102', 5432);"
sudo -i -u postgres psql -c "SELECT * from master_add_node('192.168.2.103', 5432);"
sudo -i -u postgres psql -c "SELECT * from master_add_node('192.168.2.104', 5432);"

查看节点

1
2
# 新版:citus_get_active_worker_nodes  旧版:master_get_active_worker_nodes
sudo -i -u postgres psql -c "SELECT * FROM master_get_active_worker_nodes();"
1
2
3
4
5
6
   node_name   | node_port
---------------+-----------
192.168.2.101 | 5432
192.168.2.103 | 5432
192.168.2.102 | 5432
192.168.2.104 | 5432

使用

1
sudo -i -u postgres psql

这个,有点复杂。

本文地址: https://github.com/maxzhao-it/blog/post/8e2fc2ac/