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

news2024/11/20 20:36:04

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.3
    restart: always
    container_name: pg-cd-1
    environment:
      - TZ=Asia/Shanghai
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123456
      - PGUSER=postgres
      - PGPASSWORD=123456
    working_dir: /postgresql
    ports:
      - "15434:5432"
    networks:
      - dbnet
    extra_hosts:
      - pg-cd1:192.168.0.1
      - pg-wk1:192.168.0.1
      - pg-wk2:192.168.0.2
      - pg-wk3:192.168.0.3
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
      - ./postgresql/healthcheck-volume:/healthcheck
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 10s
      retries: 5
networks:
  dbnet:
    external: true
2)docker-compose.cituswk1.yml
version: "3"

services:
  pg-wk-1:
    image: citusdata/citus:12.1.3
    restart: always
    container_name: pg-wk-1
    environment:
      - TZ=Asia/Shanghai
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123456
      - PGUSER=postgres
      - PGPASSWORD=123456
    working_dir: /postgresql
    networks:
      - dbnet
    extra_hosts:
      - pg-cd1:192.168.0.1
      - pg-wk1:192.168.0.1
      - pg-wk2:192.168.0.2
      - pg-wk3:192.168.0.3
    ports:
      - "15432:5432"
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
      - ./postgresql/healthcheck-volume:/healthcheck
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 10s
      retries: 5
networks:
  dbnet:
    external: true
3)docker-compose.cituswk2.yml
version: "3"

services:
  pg-wk-2:
    image: citusdata/citus:12.1.3
    restart: always
    container_name: pg-wk-2
    environment:
      - TZ=Asia/Shanghai
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123456
      - PGUSER=postgres
      - PGPASSWORD=123456
    working_dir: /postgresql
    networks:
      - dbnet
    extra_hosts:
      - pg-cd1:192.168.0.1
      - pg-wk1:192.168.0.1
      - pg-wk2:192.168.0.2
      - pg-wk3:192.168.0.3
    ports:
      - "15432:5432"
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
      - ./postgresql/healthcheck-volume:/healthcheck
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 10s
      retries: 5
networks:
  dbnet:
    external: true
4)docker-compose.cituswk3.yml
version: "3"

services:
  pg-wk-3:
    image: citusdata/citus:12.1.3
    restart: always
    container_name: pg-wk-3
    environment:
      - TZ=Asia/Shanghai
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123456
      - PGUSER=postgres
      - PGPASSWORD=123456
    working_dir: /postgresql
    networks:
      - dbnet
    extra_hosts:
      - pg-cd1:192.168.0.1
      - pg-wk1:192.168.0.1
      - pg-wk2:192.168.0.2
      - pg-wk3:192.168.0.3
    ports:
      - "15432:5432"
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
      - ./postgresql/healthcheck-volume:/healthcheck
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 30s
      timeout: 10s
      retries: 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'));

# 查看表节点分布
SELECT
    dp.logicalrelid::regclass AS table_name,
    n.nodename,
    n.nodeport,
    pg_size_pretty(pg_total_relation_size(p.placementid::regclass)) AS shard_size
FROM
    pg_dist_partition dp
JOIN
    pg_dist_shard s ON dp.logicalrelid = s.logicalrelid
JOIN
    pg_dist_placement p ON s.shardid = p.shardid
JOIN
    pg_dist_node n ON p.groupid = n.groupid
WHERE
    n.noderole = 'primary'
ORDER BY
    dp.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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zi2zi-chain: 中国书法字体图片生成和字体制作的一站式开发

在zi2zi-pytorch的基础上,做了进一步的修复和完善。本项目github对应网址为https://github.com/not-bald-owl/zi2zi-chain/tree/master。 修复部分为:针对预处理部分的函数弃用、生僻字无法生成、训练和推理部分单卡支持改为多卡并行、以及扩展从本地的…

过去8年,编程语言的流行度发生了哪些变化?PHP下降,Objective-C已过时

前天有一个汇总9个不同排名数据的“地表最强”编程语言排行榜,为了更好地理解语言流行度的变化,作者将2016年的类似调查结果与2024年的数据进行了比较。 虽然2016年的调查只包含6个排名,但它仍然提供了宝贵的参考数据。 我们来看看详细的情…

C++之String类(下)

片头 嗨喽~ 我们又见面啦,在上一篇C之String类(上)中,我们对string类的函数有了一个初步的认识,这一篇中,我们将继续学习string类的相关知识。准备好了吗?咱们开始咯~ 二、标准库中的string类 …

业务封装与映射 -- AMP BMP GMP

概述 不同单板支持不同的封装模式,主要包括: AMP (Asynchronous Mapping Procedure,异步映射规程)BMP (Bit-synchronous Mapping Procedure,比特同步映射规程)GMP (Generic Mapping Procedure,通用映射规程) AMP/BMP&#xff1a…

Qt_绘图

目录 1、绘图核心类 2、QPainter类的使用 2.1 绘制线段 2.2 绘制矩形 2.3 绘制圆形 2.4 绘制文本 3、QPen类的使用 3.1 使用画笔 4、QBrush类的使用 4.1 使用画刷 5、绘制图片 5.1 测试QPixmap 5.1.1 图片移动 5.1.2 图标缩小 5.1.3 旋转图片 5.1.4 将…

【逐行注释】MATLAB下的粒子滤波代码(三维状态与观测,可直接复制粘贴到MATLAB上面运行)

文章目录 程序设计1. 介绍2. 系统模型3. 算法步骤源代码(直接复制到MATLAB上面可以运行)运行结果程序设计 1. 介绍 粒子滤波(Particle Filter, PF)是一种基于贝叶斯理论的递归估计方法,广泛用于动态系统状态的估计和跟踪。该方法通过一组粒子(即假设的状态)及其权重来…

【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1

忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

5款惊艳全网的AI写作论文神器!从此告别写作烦恼!

在当今的学术研究和写作领域,撰写高质量的论文是一项挑战性的任务。幸运的是,随着人工智能技术的发展,AI论文写作工具逐渐成为帮助学者和学生提高写作效率的重要工具。这些工具不仅能够提高写作效率,还能帮助研究者生成高质量的论…

ECharts 快速使用

最终效果 使用介绍 echarts图表的绘制,大体分为三步: 根据 DOM实例,通过 echarts.init方法,生成 echarts实例构建 options配置对象,整个echarts的样式,皆有该对象决定最后通过实例.setOption方法&#xf…

【测试-BUG篇】软件测试的BUG知识你了解多少呢?

文章目录 1. 软件测试的生命周期2. BUG3. BUG的生命周期4. 与开发人员起争执怎么办 1. 软件测试的生命周期 🍎软件测试 贯穿整个软件的生命周期; 🍎软件测试的生命周期是指测试流程; ①需求分析 用户角度:软件需求是…

C++:一文搞懂友元类(friend class)

C的友元(friend)是个很重要的概念,好些朋友对此却很迷惑,本文将对友元类(friend class)详细讲解,一文搞懂。 友元的特性: 1、使用friend修饰的友元类可以访问本类的私有成员(priva…

中国电信解锁万亿参数大模型:TeleAI的创新与突破

首个由万卡集群训练出来的万亿参数大模型,已被一家央企解锁。 具体而言,为了推动纯国产人工智能的探索,带来这条新路径的正是中国电信人工智能研究院(TeleAI)。 该研究院由中国电信集团的CTO、首席科学家兼院长李学龙…

坡印廷矢量(也叫功率流密度,对面积积分就是功率)

坡印廷矢量在静电场,静磁场,恒定电流的电场,和时变电磁场中的表达式不同。 我们看时变电磁场的坡印廷矢量 坡印廷矢量就等于这个,其中的电场和磁场是实数表示的 坡印廷矢量用复数形式的场求 这里的E和H是复数表示的场&#xff0…

电影票接口api对接有哪些优势?

一、业务功能拓展方面的优势 多平台整合可以整合多个影院票务系统,通过一个接口获取众多影院的信息,包括影院、影厅、座位、影片、场次、日期及票价等信息,方便在自己的应用程序中展示这些信息,从而实现电影票的在线预订、支付和…

人工智能价格战——如何降低成本让人工智能更易于普及

十年前,开发人工智能 (AI) 是只有大公司和资金充足的研究机构才能负担得起的事情。必要的硬件、软件和数据存储成本非常高。但从那时起,情况发生了很大变化。一切始于 2012 年的 AlexNet,这是一种深度学习模型,展示了神经网络的真…

微服务jvisualvm解析部署使用全流程

1、介绍 VisualVM 是Netbeans的profile 2、启动 进入正在使用的jdk下bin目录,运行jvisualvm.exe。 3、选中要监控的线程 4、安装gc插件 5、插件安装报错 VisualVM: Plugins Centers 访问这个地址,找到对应版本再配置 https://visualvm.github.io/uc/…

【CKA】六、四层负载-Service应用

6、四层负载-Service应用 1. 考题内容: 2. 答题思路: 1、编辑front-end的deploy服务,添加端口信息 2、暴露svc端口 3. 官网地址: https://kubernetes.io/zh-cn/docs/tutorials/services/connect-applications-service/#the-ku…

nominatim部署OSM离线地图

第一步:准备一个大内存的服务器,磁盘PG大小根据实际导入的数据确定,全量数据1T,osm.pdf属于压缩文件,如果能下载,但下载很慢,可以尝试用迅雷下载。 osm.pdf下载 osm.pdf另外一个下载路径 全量数…

学生党有福了!国内最好的4款AI论文润色机构

在当今学术研究和写作领域,AI技术的应用已经变得越来越普遍。AI论文润色工具不仅能够帮助研究人员快速生成论文草稿,还能进行内容优化、查重和排版等操作。这些工具极大地提高了写作效率和质量,尤其对于学生党来说,选择合适的AI论…

基于单片机多功能称重系统设计

** 文章目录 前言概要功能设计设计思路 软件设计效果图 程序文章目录 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对…