概述
Citus 是以PostgreSQL插件的形式实现分布式数据库的,所以搭建Citus数据库前需要做PostgreSQL数据库安装部署,2021-09-17发布的citus10.2已经可以支持PG14了,所以本篇文章直接介绍citus10.2+PG14.1。
安装部署
这里跳过PG数据库的安装部署,直接从安装citus插件开始。
安装方式
github源码下载地址:https://github.com/citusdata/citus/releases
使用脚本方式直接安装:https://www.citusdata.com/download
安装依赖包
yum -y install lz4.x86_64 lz4-devel.x86_64 libcurl.x86_64 libcurl-devel.x86_64
源码编译
# export PG_CONFIG=/opt/postgresql_14.1/bin/pg_config
# ./configure --prefix=/opt/citus_10.2.3 --without-zstd
# make -j 8 && make install
# chown -R postgres: /opt/postgresql_14.1/
配置数据库
--修改postgresql.conf文件
shared_preload_libraries = 'citus,pg_stat_statements'
--修改pg_hba.conf文件,保证PG实例之间是可以相互访问的
host all all 172.16.3.90/32 trust
--重启数据库
$ pg_ctl -D /data/pgdata14/ restart
--添加扩展
[postgres@mogdb2 tmp]$ psql -p 1432
psql (14.1)
Type "help" for help.
postgres=# create extension citus ;
CREATE EXTENSION
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+------------------------------
citus | 10.2-4 | pg_catalog | Citus distributed database
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
关键函数
在做citus集群配置之前,先来了解几个比较重要的表/函数/视图。
--查看worker节点信息
select * from master_get_active_worker_nodes();
--添加worker节点
select * from master_add_node('nodename',port);
--删除worker节点
select * from master_remove_node('nodename',port);
--查看分片信息
select * from pg_dist_shard;
--查看分片分布
select * from pg_dist_shard_placement;
配置集群
选一个PG实例做为CN节点,以后访问citus集群就通过这个实例做入口,然后向其添加worker节点
--添加worker节点
select * from master_add_node('172.16.3.91',1432);
--设置分片(默认32)和副本(默认1,副本数量不能超过worker节点数量)
alter system set citus.shard_count=8;
alter system set citus.shard_replication_factor=2;
创建表
--创建普通表
create table enmotech(id serial,col1 varchar(8),updatetime timestamptz default now());
create table enmotech_dist(id serial,col1 varchar(8),updatetime timestamptz default now());
create table enmotech_ref(id serial,col1 varchar(8),updatetime timestamptz default now());
create table enmotech_col(id serial,col1 varchar(8),updatetime timestamptz default now());
--分布表
select create_distributed_table('enmotech_dist','id');
--亲和表
select create_distributed_table('enmotech_col','id',colocate_with =>'enmotech_dist');
--引用表
select create_reference_table('enmotech_ref');
添加worker
--添加节点,引用表会直接copy到新的节点
postgres=# select master_add_node('172.16.3.91','1433');
NOTICE: Replicating reference table "enmotech_ref" to the node 172.16.3.91:1433
--重平衡分片分布
postgres=# select rebalance_table_shards();
NOTICE: Moving shard 102008 from 172.16.3.91:1432 to 172.16.3.91:1433 ...
NOTICE: Moving shard 102009 from 172.16.3.91:1432 to 172.16.3.91:1433 ...
NOTICE: Moving shard 102010 from 172.16.3.91:1432 to 172.16.3.91:1433 ...
NOTICE: Moving shard 102011 from 172.16.3.91:1432 to 172.16.3.91:1433 ...