当前位置: 首页 > news >正文

Docker 安装 Citus 单节点集群:全面指南与详细操作

Docker 安装 Citus 单节点集群:全面指南与详细操作

文章目录

    • Docker 安装 Citus 单节点集群:全面指南与详细操作
      • 一 服务器资源
      • 二 部署图
      • 三 安装部署
        • 1 创建网络
        • 2 运行脚本
          • 1)docker-compose.cituscd1.yml
          • 2)docker-compose.cituswk1.yml
          • 3)docker-compose.cituswk2.yml
          • 4)docker-compose.cituswk3.yml
      • 四 配置访问
      • 五 节点添加
      • 六 示例创建表

本文详细介绍了如何使用 Docker 安装 Citus 单节点集群,并为其配置多个工作节点与协调器。通过具体的服务器资源表、部署示意图,以及 docker-compose 脚本,逐步指导读者如何创建 Docker 网络、配置 PostgreSQL 的 postgresql.confpg_hba.conf,并完成节点的添加与管理。此外,本文还提供了完整的 SQL 命令示例,帮助用户检查节点健康状况、查看节点表信息、创建分布式表和分片管理。无论是初学者还是有经验的开发者,都可以通过本文轻松完成 Citus 集群的安装与配置。

一 服务器资源

域名解释服务器IP端口角色备注
pg-cd1192.168.0.115434coordinator
pg-wk1192.168.0.115432worker
pg-wk2192.168.0.215432worker
pg-wk3192.168.0.315432worker

二 部署图

在这里插入图片描述

三 安装部署

1 创建网络
docker network create --driver bridge dbnet
2 运行脚本
1)docker-compose.cituscd1.yml
version: "3"services:pg-cd-1:image: citusdata/citus:12.1.3restart: alwayscontainer_name: pg-cd-1environment:- TZ=Asia/Shanghai- POSTGRES_USER=postgres- POSTGRES_PASSWORD=123456- PGUSER=postgres- PGPASSWORD=123456working_dir: /postgresqlports:- "15434:5432"networks:- dbnetextra_hosts:- pg-cd1:192.168.0.1- pg-wk1:192.168.0.1- pg-wk2:192.168.0.2- pg-wk3:192.168.0.3volumes:- ./postgresql/data:/var/lib/postgresql/data- ./postgresql/healthcheck-volume:/healthcheckhealthcheck:test: ["CMD-SHELL", "pg_isready -U postgres"]interval: 30stimeout: 10sretries: 5
networks:dbnet:external: true
2)docker-compose.cituswk1.yml
version: "3"services:pg-wk-1:image: citusdata/citus:12.1.3restart: alwayscontainer_name: pg-wk-1environment:- TZ=Asia/Shanghai- POSTGRES_USER=postgres- POSTGRES_PASSWORD=123456- PGUSER=postgres- PGPASSWORD=123456working_dir: /postgresqlnetworks:- dbnetextra_hosts:- pg-cd1:192.168.0.1- pg-wk1:192.168.0.1- pg-wk2:192.168.0.2- pg-wk3:192.168.0.3ports:- "15432:5432"volumes:- ./postgresql/data:/var/lib/postgresql/data- ./postgresql/healthcheck-volume:/healthcheckhealthcheck:test: ["CMD-SHELL", "pg_isready -U postgres"]interval: 30stimeout: 10sretries: 5
networks:dbnet:external: true
3)docker-compose.cituswk2.yml
version: "3"services:pg-wk-2:image: citusdata/citus:12.1.3restart: alwayscontainer_name: pg-wk-2environment:- TZ=Asia/Shanghai- POSTGRES_USER=postgres- POSTGRES_PASSWORD=123456- PGUSER=postgres- PGPASSWORD=123456working_dir: /postgresqlnetworks:- dbnetextra_hosts:- pg-cd1:192.168.0.1- pg-wk1:192.168.0.1- pg-wk2:192.168.0.2- pg-wk3:192.168.0.3ports:- "15432:5432"volumes:- ./postgresql/data:/var/lib/postgresql/data- ./postgresql/healthcheck-volume:/healthcheckhealthcheck:test: ["CMD-SHELL", "pg_isready -U postgres"]interval: 30stimeout: 10sretries: 5
networks:dbnet:external: true
4)docker-compose.cituswk3.yml
version: "3"services:pg-wk-3:image: citusdata/citus:12.1.3restart: alwayscontainer_name: pg-wk-3environment:- TZ=Asia/Shanghai- POSTGRES_USER=postgres- POSTGRES_PASSWORD=123456- PGUSER=postgres- PGPASSWORD=123456working_dir: /postgresqlnetworks:- dbnetextra_hosts:- pg-cd1:192.168.0.1- pg-wk1:192.168.0.1- pg-wk2:192.168.0.2- pg-wk3:192.168.0.3ports:- "15432:5432"volumes:- ./postgresql/data:/var/lib/postgresql/data- ./postgresql/healthcheck-volume:/healthcheckhealthcheck:test: ["CMD-SHELL", "pg_isready -U postgres"]interval: 30stimeout: 10sretries: 5
networks:dbnet:external: true

四 配置访问

1 修改 postgresql.conf 配置。

# Uncomment listen_addresses for the changes to take effect
listen_addresses = '*'

2 配置postgres客户端访问,修改 pg_hba.conf 。

# 每个节点都得配置,重启的时候有互相通信。
host    all             all             192.168.0.1/32        trust
host    all             all             192.168.0.3/32       trust
host    all             all             192.168.0.2/32       trust

五 节点添加

# 查看扩展
select * from pg_available_extensions;# 设置协调节点
SELECT citus_set_coordinator_host('pg-cd1', 15434);# 设置工作节点
SELECT citus_add_node('pg-wk1', 15432);
SELECT citus_add_node('pg-wk2', 15432);
SELECT citus_add_node('pg-wk3', 15432);# citus_get_active_worker_nodes() 函数返回活动工作线程主机名和端口号的列表。
SELECT * from citus_get_active_worker_nodes();# 检查所有节点之间的连通性
SELECT * FROM citus_check_cluster_node_health();# 集群中工作节点的信息
select * from pg_dist_node# 查看集群表信息
select * from citus_tables;# citus_total_relation_size 获取指定分布式表的所有分片使用的总磁盘空间
SELECT pg_size_pretty(citus_total_relation_size('devices'));# 查看表节点分布
SELECTdp.logicalrelid::regclass AS table_name,n.nodename,n.nodeport,pg_size_pretty(pg_total_relation_size(p.placementid::regclass)) AS shard_size
FROMpg_dist_partition dp
JOINpg_dist_shard s ON dp.logicalrelid = s.logicalrelid
JOINpg_dist_placement p ON s.shardid = p.shardid
JOINpg_dist_node n ON p.groupid = n.groupid
WHEREn.noderole = 'primary'
ORDER BYdp.logicalrelid,n.nodename;# 查看分片信息
select * from citus_shards

六 示例创建表

创建分布式表

CREATE TABLE events (id bigserial NOT NULL,device_id bigint,event_id bigserial,event_time timestamptz default now(),data jsonb not null,primary key (id)
);CREATE INDEX idx_dev_eve ON events (device_id, event_id);-- distribute the events table across shards placed locally or on the worker nodes
SELECT create_distributed_table('events', 'id', 'hash');INSERT INTO events (device_id, data)
SELECT s % 100, ('{"measurement":'||random()||'}')::jsonb FROM generate_series(1,10000) s;CREATE TABLE devices (device_id bigint primary key,device_name text,device_type_id int
);
CREATE INDEX ON devices (device_type_id);-- co-locate the devices table with the events table
SELECT create_distributed_table('devices', 'device_id', colocate_with := 'events');-- insert device metadata
INSERT INTO devices (device_id, device_name, device_type_id) 
SELECT s, 'device-'||s, 55 FROM generate_series(0, 99) s;

相关文章:

Docker 安装 Citus 单节点集群:全面指南与详细操作

Docker 安装 Citus 单节点集群:全面指南与详细操作 文章目录 Docker 安装 Citus 单节点集群:全面指南与详细操作一 服务器资源二 部署图三 安装部署1 创建网络2 运行脚本1)docker-compose.cituscd1.yml2)docker-compose.cituswk1.…...

Arthas redefine(加载外部的.class文件,redefine到JVM里 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )举例1:加载新的代码,jad/mc 命令使用举例2:上传 .class 文件到服务器的技巧 本人其他相关文章…...

C++教程(三):c++常用的配置文件类型

目录 1. INI 文件 2. JSON 文件 3. YAML 文件 4. XML 文件 5. TOML 文件 6. 二进制配置文件(Protocol Buffers, MessagePack, Avro 等) 总结 在 C 项目中,常用的配置文件类型有多种选择,具体选择取决于项目的复杂性、可读性…...

Arduino Uno控制雨滴传感器模块的设计方案

以下是Arduino Uno控制雨滴传感器模块的设计方案: 一、硬件准备: 1. Arduino Uno 开发板一块。 2. 雨滴传感器模块一个。 3. 杜邦线若干。 4. 9V直流电源一个。 二、硬件连接: 1. 将Arduino Uno板的Vin引脚、GND引脚分别连接到9V直流电…...

华为常见命令手册

常见命令 display ip interface brief —> 查看设备上的每个接口的IP地址【地址/掩码/状态】 display interface gi0/0/0 → 查看该接口的MAC 地址 ipconfig → 查看 PC 上面的 IP地址 display arp → 查看设备的 ARP 表 arp -a → 查看 PC 上面的 ARP 表 display m…...

TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点

论文标题: 英文:TinyAP: An intelligent Access Point to combat Wi-Fi attacks using TinyML中文:TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点 作者信息: Anand Agrawal 和 Rajib Ranjan Maiti,来自印…...

grafana频繁DataSourceError问题

背景 随着 Grafana 数据量的不断增加,逐渐暴露出以下问题: Grafana 页面加载缓慢;Grafana 告警频繁出现 DatasourceError 错误。 对于第一个问题,大家可以参考这篇文章:Grafana 加载缓慢的解决方案。 不过&#xf…...

python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)

在软件开发中,数据结构是组织和存储数据的方式,对算法的效率和程序的性能至关重要。Python 提供了许多内置的数据结构,但在一些复杂的应用场景中,原生数据结构可能无法满足特定需求。这时,一个功能强大、易于使用的数据…...

AccessoriesqueryController

目录 1、 AccessoriesqueryController 1.1、 库存配件查询 1.2、 查询仓库 1.2.1、 //把数据库数据加到表格:跟默认然一行数据进行合并 1.3、 /// 查询 1.3.1、 配件编码查询 1.3.2、 配件名称查询 1.3.3、 配件类型查询 AccessoriesqueryControlle…...

M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?

该文章前面三节主要介绍M3u8视频是什么,视频播放错误(找不到地址)的解决方法在后面 M3U8是一种多媒体播放列表文件格式,主要用于流媒体播放。 一、文件格式特点 1. 文本文件:M3U8是一个采用 UTF-8 编码的文本文件,这意味着它可…...

【分布式微服务云原生】windows+docker+mysql5.7.44一主一从主从复制

目录 1. 主库设置2. 从库设置3. 验证主从复制内容汇总表格 摘要: 在Windows系统上通过Docker部署MySQL主从复制,以下是详细的步骤和命令,帮助你设置一主一从的MySQL复制环境。 1. 主库设置 步骤1:运行MySQL主库容器 docker run …...

鸿蒙NEXT开发-界面渲染(条件和循环)(基于最新api12稳定版)

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

TypeScript 设计模式之【状态模式】

文章目录 状态模式:优雅切换的交通信号灯状态模式的奥秘状态模式有什么利与弊?如何使用状态模式来优化你的系统代码实现案例状态模式的主要优点状态模式的主要缺点状态模式的适用场景总结 状态模式:优雅切换的交通信号灯 当你站在繁忙的十字路口&#…...

MongoDB 聚合管道

参考: 聚合管道 - MongoDB 手册 v7.0 介绍 聚合管道由一个或多个处理文档的阶段组成: 每个阶段对输入文档执行一个操作。例如,某个阶段可以过滤文档、对文档进行分组并计算值。 从一个阶段输出的文档将传递到下一阶段。 一个聚合管道可以返回针对文档…...

python-patterns:Python 设计模式大全

python-patterns 是一个开源的 Python 项目,它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案,通过使用设计模式,开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…...

Nginx编译所需基本库pcre、zlib、openssl

一、基本库介绍 pcre:(Perl Compatible Regular Expressions) 是一个用 C 语言编写的正则表达式库,用于进行文本匹配和搜索。它提供了与 Perl 正则表达式兼容的功能,并且广泛用于许多不同的软件项目中,如网…...

C#进阶:探索嵌套类、匿名类及对象初始化器的强大运用

在C#中,嵌套类、匿名类以及对象初始化器是几种强大的特性,它们可以极大地提高代码的可读性和灵活性。下面分别介绍这些特性的运用。 1. 嵌套类 嵌套类是指定义在另一个类内部的类。内部类可以访问其外围类的所有成员(包括私有成员&#xff…...

匈牙利算法模板

P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:最模板的一集.还未匹配则匹配&#xff0c;否则之前一个给现在这个让位置. int n,m,e; vector<int> vct[505]; int match[505]; bool vis[505]; bool mark[505][505]; bool dfs(int s)…...

ubuntu 安装harbor

#安装包 wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz.asc#导入签名公钥 gpg --keyserver hkps://ke…...

Python/大数据/机器识别毕业设计选题题目推荐

基于Python和Diango在线购物商城系统报告文档指导搭建视频 基于深度学习的人脸识别与管理系统&#xff0c;Python实现 基于Python/机器学习链家网新房数据可视化及预测系统 Python豆瓣电影情感分析推荐系统爬虫可视化&#xff0c;过滤算法 基于python的django框架生鲜商城管…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...