暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Citus 多节点安装部署

原创 高云龙 云和恩墨 2022-01-18
2156

概述

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 ...

image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论