配置Citus 分片集群
citus 集群包括三台机器,一台协调机器(cn),两台存储数据机器(worker),这三台机器都先安装好postgresql和citus
sudo su - postgres
psql -p 9700 进入pg(假设pg端口为9700)
新建样例数据库并授权:
在这里我们新建了一个数据库d1, 由于citus不会传递create database命令,所以,需要在每台机器都执行一次创建数据库的命令
这一步三台机器都要去做
create database d1;
\c d1;
CREATE EXTENSION citus;
在cn节点添加worker:
su postgres psql -p 9700 \c d1
SELECT citus_set_coordinator_host('192.168.11.166', 9700); 设置cn协调节点 SELECT * from citus_add_node('192.168.11.167', 9700); SELECT * from citus_add_node('192.168.11.168', 9700); SELECT rebalance_table_shards(); 或者 SELECT rebalance_table_shards('t1');
检查节点是否添加正确:
SELECT * FROM citus_get_active_worker_nodes();
创建distributed分布表:
\c d1; 就算有副本集,如果一个分片挂了,整个系统依然会卡住,所以,副本集好像用处不大,所以这部分设置可以忽略
设置分片数量:(默认32)
set citus.shard_count=8;
设置副本集数量:(默认1)
set citus.shard_replication_factor=2;
在cn节点的d1上建表t1
\c d1
CREATE TABLE t1 (
id bigint primary key,
name text
);
以id列为分片键,将表设置为分布表, 默认一共创建32个分片,平均分配到每台worker上
SELECT create_distributed_table('t1', 'id');
查看分片情况:
SELECT * FROM citus_shards;
查看worker节点信息:
select * from pg_dist_node ;
查看分布表信息:
SELECT * FROM citus_tables;
可以试试插入10万条数据看看:INSERT INTO t1 (id, name) select generate_series(1,100000), 'aaa';
先插入数据,再建分布表:
先有数据,再调用SELECT create_distributed_table('t1', 'id');进行分片也是可以的,
记得先把数据库开启citus:
\c d1;
CREATE EXTENSION citus;
SELECT create_distributed_table('表名', 'id');
添加节点成功后,数据会自动发到分片上,就可以调用下面命令,删除cn节点本地数据:
SELECT truncate_local_data_after_distributing_table( public.t11 );
数据库运行后,添加新的分片节点:
在cn节点和新加的节点都执行下面语句(有可能其他节点也要执行,我当时是全部节点都执行了)
否则rebalance_table_shards会报这个错:ERROR: connection to the remote node 10.128.0.37:5432 failed with the following error: ERROR: subscription "citus_shard_move_subscription_10" does not exist
echo "wal_level = logical" >> /var/lib/pgsql/15/data/postgresql.conf systemctl restart postgresql-15
然后新节点创建数据库:
create database d1;
\c d1;
CREATE EXTENSION citus;
cn节点执行添加节点命令:
\c d1 SELECT * from citus_add_node('新节点ip', 5432); SELECT rebalance_table_shards();
然后就看到数据开始重新分布了:
d1=# SELECT rebalance_table_shards(); NOTICE: Moving shard 102009 from 192.168.11.168:5432 to 192.168.11.171:5432 ... NOTICE: Moving shard 102008 from 192.168.11.167:5432 to 192.168.11.171:5432 ... NOTICE: Moving shard 102011 from 192.168.11.168:5432 to 192.168.11.171:5432 ... rebalance_table_shards ------------------------ (1 row)
参考文档:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏