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

news/2024/10/9 3:15:02 标签: docker, 容器, 运维, citus, 数据库, citus集群

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

文章目录

    • Docker 安装 Citus 单节点集群:全面指南与详细操作
      • 一 服务器资源
      • 二 部署图
      • 三 安装部署
      • 四 配置访问
      • 五 节点添加
      • 六 示例创建表

本文详细介绍了如何使用 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 运行脚本
dockercomposecituscd1yml_30">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
dockercomposecituswk1yml_69">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
dockercomposecituswk2yml_110">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
dockercomposecituswk3yml_149">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.niftyadmin.cn/n/5695188.html

相关文章

报错笔记

报错笔记 若依报错若依跳转新页面,同时关闭当前页面 element UI组件使用报错使用element UI Table 高亮显示某一行 若依报错 若依跳转新页面,同时关闭当前页面 使用场景如:当在新增/编辑路由页面提交成功后,需要关闭当前页&#…

天玑 9400 基本确认:4大升级,一代“冰龙”来了

去年,天玑9300 破釜沉舟,打破了A系不可击败的神话。但今年,对安卓阵营来说,才是扬眉吐气的时刻。 因为芯片人才的流失,果子已经雄风不再。即使是 4nm 工艺打3nm工艺,天玑 9300 的 GPU效能,也压…

ES postman操作全量修改,局部修改,删除

全量修改 修改需要调用的url 地址是http://192.168.1.108:9200/shopping/_doc/1001,调用方法使用put 只修改指定的需求的内容的请求方式 post方式就是局部修改 http://192.168.1.108:9200/shopping/_update/1001,请求方式post 上图是只修改id 为1001数…

C语言进阶版第18课—动态内存管理

文章目录 1. 动态内存管理2. malloc和free函数2.1 malloc函数2.2 free函数 3. calloc和realloc函数3.1 calloc函数3.2 realloc函数 4. 常见的动态内存错误4.1 对NULL指针的解引用操作4.2 对动态开辟的空间越界访问4.3 对非动态开辟的内存使用free释放4.4 使用free释放一块动态开…

机器学习K近邻算法——分类问题K近邻算法示例

针对“数据8.1”,讲解分类问题的K近邻算法,以V1(转型情况)为响应变量,以V2(存款规模)、V3(EVA)、V4(中间业务收入)、V5(员工人数&…

【C语言刷力扣】1436.旅行终点站

题目: 解题思路: 两层循环查找,第一次循环中初始化 destination 为 path中每次旅行的终点作为最终的终点。二次循环查找当前 destination ,若是作为某次旅行的起点,说明不是最后的终点。 char* destCity(char ***paths…

使用boost库写共享内存代码,怎么判断共享内存是否已经存在

使用boost::interprocess::shared_memory_object仅创建共享内存时,如果共享内存已存在会抛boost::interprocess::interprocess_exception类型的异常,并且抛出的异常的error_code是boost::interprocess::error_code_t::already_exists_error,可…

web自动化测试基础(从配置环境到自动化实现登录测试用例的执行,vscode如何导入自己的python包)

接下来的一段时间里我会和大家分享自动化测试相关的一些知识希望大家可以多多支持,一起进步。 一、环境的配置 前提安装好了python解释器并配好了环境,并安装好了VScode 下载的浏览器和浏览器驱动需要一样的版本号(只看大版本)。 1、安装浏览器 Chro…