绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
citus实战系列之二实验环境搭建
2022-05-09 15:47:13

citus实战系列之二实验环境搭建

在进入后面的话题前,我们需要先搭建一个简单的实验环境,包含1个CN和2个Worker。
以下步骤基于docker,仅用于实验目的,忽视了安全,性能调优等相关的配置。

前言

在进入后面的话题前,我们需要先搭建一个简单的实验环境。

搭建citus集群需要多台机器,如果仅用于功能验证而手上又没有合适机器,使用Docker搭建是个不错的选择。

以下步骤基于docker创建一个包含1个CN和2个Worker的citus环境,仅用于实验目的,忽视了安全,性能调优等相关的配置。

环境

host环境

  • CentOS 7.3
  • Docker 17.12.1-ce

guest环境

  • CentOS 7.4
  • PostgreSQL 10
  • citus 7.4

制作citus镜像

启动centos容器

docker run -it --name citus centos bash

在容器中安装citus所需软件

  1. yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-redhat10-10-2.noarch.rpm
  2. yum install postgresql10 postgresql10-server postgresql10-contrib
  3. yum install pgbouncer
  4. yum install citus_10
  5. ln -sf /usr/pgsql-10 /usr/pgsql
  6. cat - >~postgres/.pgsql_profile <<EOF
  7. if [ -f /etc/bashrc ]; then
  8. . /etc/bashrc
  9. fi
  10. export PATH=/usr/pgsql/bin:$PATH
  11. export PGDATA=/pgsql/data
  12. EOF

创建citus镜像

docker commit citus citus:7.4v1

创建citus容器

为每一个节点创建一个volume

  1. docker volume create cituscn
  2. docker volume create cituswk1
  3. docker volume create cituswk2

创建专有子网

docker network create --subnet=172.18.0.0/16 citus-net

创建并运行容器

  1. docker run --mount source=cituscn,target=/pgsql --network citus-net --ip 172.18.0.100 --name cituscn --hostname cituscn --expose 5432 -it citus:7.4v1 bash
  2. docker run --mount source=cituswk1,target=/pgsql --network citus-net --ip 172.18.0.201 --name cituswk1 --hostname cituswk1 --expose 5432 -it citus:7.4v1 bash
  3. docker run --mount source=cituswk2,target=/pgsql --network citus-net --ip 172.18.0.202 --name cituswk2 --hostname cituswk2 --expose 5432 -it citus:7.4v1 bash

在每个容器上,分别执行下面的命令创建数据库

  1. mkdir /pgsql/data
  2. chown postgres:postgres /pgsql/data
  3. chmod 0700 /pgsql/data
  4. su - postgres
  5. initdb -k -E UTF8 -D /pgsql/data
  6. echo "listen_addresses = '*'" >> /pgsql/data/postgresql.conf
  7. echo "wal_level = logical" >> /pgsql/data/postgresql.conf
  8. echo "shared_preload_libraries = 'citus'" >> /pgsql/data/postgresql.conf
  9. echo "citus.replication_model = 'streaming'" >> /pgsql/data/postgresql.conf
  10. echo "host all all 172.18.0.0/16 trust">> /pgsql/data/pg_hba.conf
  11. pg_ctl start
  12. psql -c "CREATE EXTENSION citus;"

在cituscn容器上,执行下面的命令添加worker。

  1. psql -c "SELECT * from master_add_node('cituswk1', 5432);"
  2. psql -c "SELECT * from master_add_node('cituswk2', 5432);"

容器detach/attach

如果要退出容器的终端(detach),可以按CTL+pq

之后需要再次交互执行命令时再attach这个容器

docker attach cituscn

容器启停

以cituscn容器为例,worker容器类似。

停止cituscn容器

docker stop cituscn

启动cituscn容器

docker start -ai cituscn

然后在容器中启动PostgreSQL

  1. su - postgres
  2. pg_ctl start

测试

在cituscn容器上,测试分片表

  1. create table tb1(id int primary key, c1 int);
  2. select create_distributed_table('tb1','id');
  3. insert into tb1 select id,random()*1000 from generate_series(1,100)id;

执行测试SQL

  1. postgres=# explain select * from tb1;
  2. QUERY PLAN
  3. ------------------------------------------------------------------------------
  4. Custom Scan (Citus Real-Time) (cost=0.00..0.00 rows= width=)
  5. Task Count: 32
  6. Tasks Shown: One of 32
  7. -> Task
  8. Node: host=cituswk1 port=5432 dbname=postgres
  9. -> Seq Scan on tb1_102008 tb1 (cost=0.00..32.60 rows=2260 width=8)
  10. (6 rows)

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Citus
创建时间:2022-04-13 09:43:21
Citus
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~