https://hub.docker.com/r/citusdata/citus
https://www.github.com/citusdata/docker
https://www.citusdata.com/download
#postgres postgresql 使用指南,以及pgadmin-web管理
https://abc.htmltoo.com/thread-45066.htm
docker run -d --name citus --restart=always -p 5430:5432 -e POSTGRES_PASSWORD=wdqdmm@p -v /etc/localtime:/etc/localtime:ro citusdata/citus
docker run -d --name citus1 --restart=always -p 5431:5432 -e POSTGRES_PASSWORD=wdqdmm@p -v /etc/localtime:/etc/localtime:ro citusdata/citus
docker run -d --name citus2 --restart=always -p 5432:5432 -e POSTGRES_PASSWORD=wdqdmm@p -v /etc/localtime:/etc/localtime:ro citusdata/citus
docker exec -it citus /bin/bash
docker exec -it citus1 /bin/bash
docker exec -it citus2 /bin/bash
apt-get update -y
apt-get install -y wget vim net-tools curl
apt-get dist-upgrade -y
apt-get upgrade -y
apt autoremove
apt clean
psql -V
-启动数据库服务,创建Citus扩展
psql -U postgres -h localhost -d postgres
CREATE EXTENSION citus
CREATE EXTENSION postgis
SELECT * FROM citus_version()
-配置
/var/lib/postgresql/data/postgresql.conf
/var/lib/postgresql/data/pg_hba.conf
-1.预加载citus扩展, tee -a : 附加到既有文件的后面, docker 已有
echo "shared_preload_libraries = 'citus'" | tee -a /var/lib/postgresql/data/postgresql.conf
-2.修改配置文件中的监听地址, docker 已有,postgresql.conf
listen_addresses = '*'
-3.配置远程访问的权限
vim /var/lib/postgresql/data/pg_hba.conf
host all all 0.0.0.0/0 md5
---在协调器节点上执行---
docker exec -it citus /bin/bash
psql -U postgres -h localhost -d postgres
-设置本节点为协调节点
SELECT citus_set_coordinator_host('b.htmltoo.com',5430)
-配置数据节点信息, 把其他节点设置为工作节点work
SELECT * from master_add_node('b.htmltoo.com', 5431)
SELECT * from master_add_node('b.htmltoo.com', 5432)
-验证部署
SELECT * FROM master_get_active_worker_nodes()
---命令---
-查看节点
select * from pg_dist_node
-查看工作节点
SELECT * FROM master_get_active_worker_nodes()
-增加节点
SELECT * from master_add_node('b.htmltoo.com', 5432)
-删除节点
SELECT master_remove_node('b.htmltoo.com', '5432')
禁用某个节点:
SELECT master_disable_node('b.htmltoo.com',5432)
重新启用节点:
select master_activate_node('b.htmltoo.com',5432);
-查询有哪些表
select tablename from pg_tables where tablename not like 'pg_%'
-查询有哪些表
select tablename from pg_tables where tablename like 'ads%'
-删除extension
drop extension citus cascade
===分布式集群测试===
---在master中创建表测设分片
#1、创建表
create table test_table(id int, name varchar(16));
-查看默认分片数:
show citus.shard_count;
#2、表分片
SELECT master_create_distributed_table('test_table', 'id', 'hash');
#3、设定分片个数(2)及每个分片副本数(2)
SELECT master_create_worker_shards('test_table', 2, 2);
#不报错则前面都设置成功。
---创建完成后,可以在子节点看到分片后的数据表如下(分片数为2,副本数为2):
\d
---
#插入数据
insert into test_table values (1,'yyp');
insert into test_table values (2,'csq');
insert into test_table values (3,'lzl');
---分别在master、worker1、worker2中查看数据的分片情况。
---查看数据同步情况
SELECT * from pg_dist_shard_placement order by shardid, placementid;
-shardstate为1表示正常同步,为3表示同步失败
shardid | shardstate | shardlength | nodename | nodeport | placementid
---------+------------+-------------+----------------+----------+-------------
102036 | 3 | 0 | 192.168.200.91 | 5432 | 57
102036 | 1 | 0 | 192.168.200.92 | 5432 | 58
-将worker2中的shardis=102036的分片复制给work1
SELECT master_copy_shard_placement(102036, '192.168.200.92', 5432, '192.168.200.91', 5432);
===
-查看work节点
SELECT * from master_get_active_worker_nodes();
-元数据查看
SELECT * from master_get_table_metadata('github_events');
-分区查看
SELECT * from pg_dist_partition;
-分片查看
SELECT * from pg_dist_shard;
-分片分布查看
SELECT * from pg_dist_shard_placement;
-移动分片
SELECT master_copy_shard_placement(shardid, 'good_host', 5432, 'bad_host', 5432);
-元数据中加入新分片
INSERT INTO pg_dist_shard_placement(shardid , shardstate , shardlength , nodename , nodeport) VALUES (102021,3,0,v4,5432)
-移动数据到新分片
SELECT master_copy_shard_placement(102021, 'v1', 5432, 'v4', 5432);
-标记删除分片,改数据分片此时已经脱离集群,待删除
UPDATE pg_dist_shard_placement SET shardstate = 4 WHERE shardid = 102021 AND nodename = 'v1' AND nodeport = 5432
-删除原分片数据及元数据
DROP TABLE github_events_shard_id (在对应节点上进行操作)
DELETE FROM pg_dist_shard_placement shardstate = 4
Citus 是 Postgres 的开源扩展,它在集群中的多个节点上分布数据和查询。因为 Citus 是 Postgres 的扩展(不是 fork),所以当您使用 Citus 时,您也在使用 Postgres。您可以利用最新的 Postgres 功能、工具和生态系统。
Citus 将 Postgres 转换为具有分片、分布式 SQL 引擎、引用表和分布式表等功能的分布式数据库。 Citus 将并行性、在内存中保留更多数据和更高的 I/O 带宽相结合,可以显着提高多租户 SaaS 应用程序、面向客户的实时分析仪表板和时间序列工作负载的性能。
主要特性
● PostgreSQL兼容
● 水平扩展
● 实时并发查
● 快速数据加载
● 实时增删改查
● 持分布式事务
● 支持常用DDL