• 使用容器快速在阿里云 ECS 多节点上搭建 Citus 12.1 集群


    image

    阿里云 ECS

    机器节点

    1. 这里我们使用两台同一区域的 ECS 机器。
    2. 机器配置:2 核 2 G。(ps: 阿里云 99 元一年的活动)
    3. 一台安装 coordinator(协调器),这里内网 IP 为 172.18.60.11
    4. 一台安装 worker,这里内网 IP 为 172.18.60.12

    操作系统

    两台机器分别安装了厂商的 Alibaba Cloud Linux 3 系统。

    lsb_release -a
    
    LSB Version:    :core-4.1-amd64:core-4.1-noarch
    Distributor ID: AlibabaCloud
    Description:    Alibaba Cloud Linux release 3 (Soaring Falcon) 
    Release:        3
    Codename:       SoaringFalcon
    

    安装 Docker

    在各机器节点上分别执行:

    1. 添加 docker-ce 的 dnf 源
    sudo dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    1. 安装 Alibaba Cloud Linux 3 专用的 dnf 源兼容插件
    sudo dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
    
    1. 安装 Docker
    sudo dnf -y install docker-ce --nobest
    
    1. 启动 Docker 服务,并设置开机自启动
    sudo systemctl start docker
    sudo systemctl enable docker
    
    1. 查看Docker是否启动
    sudo systemctl status docker
    

    安全组

    注意:我们接下来会使用机器的 5432 端口。

    为了安全,云厂商默认是屏蔽公网访问该端口的,用户同一区域的内网机器之间的访问默认是可以的。

    Citus 12.1 集群搭建

    这里使用官方构建的镜像 citusdata/citus:12.1

    启动 Coordinator 节点

    • 172.18.60.11(coordinator) 机器节点
    mkdir -p citus-coordinator/data           
    docker run -d --name citus-coordinator \
               -v $(pwd)/citus-coordinator/data:/var/lib/postgresql/data \
               -p 5432:5432 \
               -e POSTGRES_USER=citus \
               -e POSTGRES_PASSWORD=citus \
               -e PGUSER=citus \
               -e PGPASSWORD=citus \
               -e POSTGRES_HOST_AUTH_METHOD=trust \
               citusdata/citus:12.1
    

    注意:生产环境,为了安全请另行编辑 pg_hba.conf

    启动 Worker 节点

    • 172.18.60.12(worker) 机器节点
    mkdir -p citus-worker00/data
    docker run -d --name citus-worker00 \
               -v $(pwd)/citus-worker00/data:/var/lib/postgresql/data \
               -p 5432:5432 \
               -e POSTGRES_USER=citus \
               -e POSTGRES_PASSWORD=citus \
               -e PGUSER=citus \
               -e PGPASSWORD=citus \
               -e POSTGRES_HOST_AUTH_METHOD=trust \
               citusdata/citus:12.1
    

    集群设置

    • 172.18.60.11(coordinator) 机器节点
    docker exec -it citus-coordinator psql -U citus
    # 设置 worker 要连接的协调器节点
    SELECT citus_set_coordinator_host('172.18.60.11', 5432);
    # 添加 worker 节点
    SELECT * from citus_add_node('172.18.60.12', 5432);
    SELECT * FROM citus_get_active_worker_nodes();
    
       node_name   | node_port 
    ---------------+-----------
      172.18.60.12 |    5432
    (1 row)
    

    验证: 官方案例(微服务存储后端)

    创建 user 服务的数据库 schema

    docker exec -it citus-coordinator psql -U citus
    
    CREATE USER user_service;
    SET citus.enable_schema_based_sharding TO ON;
    CREATE SCHEMA AUTHORIZATION user_service;
    select * from citus_schemas;
    \c citus user_service
    CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(255) NOT NULL,
        email VARCHAR(255) NOT NULL
    );
    

    Docker 启动 user 服务

    docker run -d --name usersvc \
               -p 6000:5000 \
               -e DB_HOST='172.18.60.11' \
               -e DB_NAME=citus \
               registry.cn-heyuan.aliyuncs.com/hacker-linner/citus-microsvc-user:1.0.1
    

    创建一些用户

    curl -X POST -H "Content-Type: application/json" -d '[
      {"name": "John Doe", "email": "john@example.com"},
      {"name": "Jane Smith", "email": "jane@example.com"},
      {"name": "Mike Johnson", "email": "mike@example.com"},
      {"name": "Emily Davis", "email": "emily@example.com"},
      {"name": "David Wilson", "email": "david@example.com"},
      {"name": "Sarah Thompson", "email": "sarah@example.com"},
      {"name": "Alex Miller", "email": "alex@example.com"},
      {"name": "Olivia Anderson", "email": "olivia@example.com"},
      {"name": "Daniel Martin", "email": "daniel@example.com"},
      {"name": "Sophia White", "email": "sophia@example.com"}
    ]' http://localhost:6000/users
    
    {"message":"Users created successfully","user_ids":[1,2,3,4,5,6,7,8,9,10]}
    

    列出已创建的用户

    curl http://localhost:6000/users
    

    验证数据是否被分配到 worker 节点

    docker exec -it citus-coordinator psql -U citus
    
    select nodename,nodeport, table_name, pg_size_pretty(sum(shard_size))
    from citus_shards
    group by nodename,nodeport, table_name;
    
       nodename    | nodeport |     table_name     | pg_size_pretty 
    ---------------+----------+--------------------+----------------
     172.18.60.12  |     5432 | user_service.users | 32 kB
    (1 row)
    

    Refs

  • 相关阅读:
    【第34篇】MPViT:用于密集预测的多路径视觉转换器
    代码中的软件工程:正则表达式十步通关
    Talk预告 | 新加坡Sea AI Lab庞天宇:(合理定义的)鲁棒性与准确率之间不存在矛盾
    Linux编译动态和静态链接库
    synchronized和lock的区别
    STM32中五个时钟源:HSI、HSE、LSI、LSE、PLL
    Python中的闭包
    小程序开发中的底部安全区域处理技巧
    1.9 if语句(Python)
    1052 卖个萌
  • 原文地址:https://www.cnblogs.com/hacker-linner/p/17930998.html