CitusDB是什么
CitusDB 是基于 PostgreSQL 扩展(类似 PHP 扩展)实现的 PostgreSQL 集群。
CitusDB特点:
- 易维护
- 高可用
有限的
纵向扩展- 并行分布式查询
CitusDB的架构
CitusDB 与 HDFS 的分布式非常相似,在 Master 上存储元数据,Work 节点存储分片,同时 1 个分片至少要存储在 2 个 Work 节点(可配置更多)上保障其可用性。
Master:
- 协调集群(分片、复制)
- 分发查询
- 只存储元数据
Work:
- 存储分片
用户对 Master 发起查询,Master 根据元数据下发查询至 Work 节点,最后查询汇总到 Master 节点,合并结果返回给用户。
CitusDB简单实用
- 编译 citus.so 模块至 PostgreSQL 的 lib 目录
- 在 PostgreSQL 的配置文件中添加 shared_preload_libraries = 'citus'
- 在所有节点上执行 psql -c "CREATE EXTENSION citus;"
- 在 Master 节点执行 psql -c "SELECT * from master_add_node(work-1', 9700);" 添加 Work 节点
至此集群搭建完成, 你可以执行 psql -c "select * from master_get_active_worker_nodes();"
来查看现有的 Work 节点。
CitusDB的高可用
Master:
可通过 PostgreSQL 自身的主从机制实现高可用,元数据并不大,效率上没有太大问题。
Work:
在查询时 Work 节点如有失败, Master 节点会把失败的查询重新下发至其它存在该分片的节点。如 Work 节点永久损坏可以人工均衡,让其保持设置的复制数。
CitusDB的限制
- 虽然官方一直宣称 Master 需要的资源很少,但集群达到一定数量级后 Master 是最终性能瓶颈。
- 有些疑惑官方文档的分布式表,不清楚是不是需要研发特别适配
- 不支持
- Window Functions
- CTEs
- Set operations
- Transactional semantics for queries that span across multiple shards (跨分片事务?)
最后一些参考:
集群部署: https://docs.citusdata.com/en/v6.1/installation/production_rhel.html
集群管理: https://docs.citusdata.com/en/v6.1/admin_guide/cluster_management.html
分布式表: https://docs.citusdata.com/en/v6.1/dist_tables/ddl.html
调研作者:https://antonchen.com/
本文由 空心菜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jul 8, 2018 at 06:49 am