docker-compose安装clickhouse集群实战

是通过该链接改吧改吧安装的ck,在此感谢该作者了

ck安装需要zookeeper环境,zk安装比较简单,可以直接参考上面GitHub地址里的模板,这里就不赘述了。

如果是一台机器一个ck节点的话,比如你需要安装3分片,3副本的ck集群,那么你所需要的机器数量就是 3 * 3 = 9台机器。如果是使用容器模拟的话则多启动几个容器使用不同端口即可

因为机器数量有限,以及通过ck查询的量比较小,所以我就安装的2副本,1分片的ck集群,也可以简单的理解成一主一备。

我的两台机器分别是:192.168.2.103(ck01)、192.168.2.109(ck02),我在两台机器的/etc/hosts中都绑定了对应ip的映射,这样我就可以在后面的配置文件中使用ck01和ck02来代替ip了

192.168.2.103 ck01
192.168.2.109 ck02

1、ck1机器上的docker-compose的yml文件:
version: '2.1'

services:
  clickhouse:
    image: yandex/clickhouse-server:${CLICKHOUSE_VERSION:-20.11}
    restart: always
    network_mode: host
    container_name: clickhouse-server
    privileged: true
    environment:
      - CLICKHOUSE_CONFIG=/etc/clickhouse-server/config.xml
      - CLICKHOUSE_USER_CONFIG=/etc/clickhouse-server/users.xml
    ports:
      - "8123:8123"
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    volumes:
      - /data/clickhouse/config/metrika.xml:/etc/metrika.xml
      - /data/clickhouse/config/config.xml:/etc/clickhouse-server/config.xml
      - /data/clickhouse/config/users.xml:/etc/clickhouse-server/users.xml
      - /data/clickhouse/data:/var/lib/clickhouse
      - /data/clickhouse/logs:/var/log/clickhouse-server
    deploy:
      resources:
        limits:
          cpus: '8'
          memory: 15360M
        reservations:
          cpus: '6'
          memory: 12240M
2、ck1机器上的metrika.xml文件
<yandex>
    <clickhouse_remote_servers>
        <!-- 集群名称-->
        <hex_cluster>
            <!--集群的第1个分片-->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck01</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>ck02</host>
                    <port>9000</port>
                </replica>
            </shard>
        </hex_cluster>
    </clickhouse_remote_servers>
    <zookeeper-servers>
        <node>
            <host>zk1</host>
            <port>2181</port>
        </node>
        <node>
            <host>zk2</host>
            <port>2181</port>
        </node>
        <node>
            <host>zk3</host>
            <port>2181</port>
        </node>
    </zookeeper-servers>
    <macros>
        <!-- 第1个分片 -->
        <shard>01</shard>
        <!-- 第1个分片,第1个副本 -->
        <replica>rep_1_1</replica>
    </macros>
</yandex>

3、ck2机器上的docker-compose的yml文件
version: '2.1'

services:
  clickhouse:
    image: yandex/clickhouse-server:${CLICKHOUSE_VERSION:-20.11}
    restart: always
    network_mode: host
    container_name: clickhouse-server
    environment:
      - CLICKHOUSE_CONFIG=/etc/clickhouse-server/config.xml
      - CLICKHOUSE_USER_CONFIG=/etc/clickhouse-server/users.xml
    ports:
      - "8123:8123"
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    volumes:
      - /data/clickhouse/config/metrika.xml:/etc/metrika.xml
      - /data/clickhouse/config/config.xml:/etc/clickhouse-server/config.xml
      - /data/clickhouse/config/users.xml:/etc/clickhouse-server/users.xml
      - /data/clickhouse/data:/var/lib/clickhouse
      - /data/clickhouse/logs:/var/log/clickhouse-server
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 10240M
        reservations:
          cpus: '2'
          memory: 5096M

4、ck2机器上的metrika.xml文件
<yandex>
    <clickhouse_remote_servers>
        <!-- 集群名称-->
        <hex_cluster>
            <!--集群的第1个分片-->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>ck01</host>
                    <port>9000</port>
                </replica>
                <replica>
                    <host>ck02</host>
                    <port>9000</port>
                </replica>
            </shard>
        </hex_cluster>
    </clickhouse_remote_servers>
    <zookeeper-servers>
        <node>
            <host>zk1</host>
            <port>2181</port>
        </node>
        <node>
            <host>zk2</host>
            <port>2181</port>
        </node>
        <node>
            <host>zk3</host>
            <port>2181</port>
        </node>
    </zookeeper-servers>
    <macros>
        <!-- 第1个分片 -->
        <shard>01</shard>
        <!-- 第1个分片,第2个副本 -->
        <replica>rep_1_2</replica>
    </macros>
</yandex>

5、启动ck服务并验证可行性

1、上面的配置文件都弄好后,在docker-compose.yml的路径下执行docker-compose up -d即可启动一个后台ck容器服务

 2、通过docker ps 查看clickhouse容器是否启动成功,我这里也是成功运行

3、通过docker exec -it clickhouse-server(这个是容器名字,也可以填容器id) bash进入到容器中

4、进入容器以后通过clickhouse-client -m命令进入到ck的客户端,进入之后show databases; 一下,如果出现数据库列表,那就是成功啦。

ps:如果你修改了users.xml中<users>标签下的用户信息,比如修改了用户名或者增加了密码验证,在使用clickhouse-client -m连接的时候记得添加--user xxx 和 --password xxx 改为你对应的用户和密码

5、因为是启动的集群,所以在建库建表的时候,只需要在其中一台节点创建库和表的时候指定一些参数就可以自动同步到另外的节点啦:

1、建库的时候需要指定ON CLUSTER xxx ENGINE = Atomic;语句,我这里集群叫hex_cluster,所以是
    CREATE DATABASE test ON CLUSTER hex_cluster ENGINE = Atomic;

2、建表的时候需要指定ON CLUSTER hex_cluster语句,我这里集群叫hex_cluster,所以是
    create table if not exists test.store ON CLUSTER hex_cluster(
	    id Int64,
	    code String,
	    name_cn String,
	    name_en String,
	    store_type String,
	    status String
    )
engine =       ReplicatedMergeTree('/clickhouse/tables/{database}/{shard}/store','{replica}')
ORDER BY id
SETTINGS index_granularity = 8192;

ps:
    1、因为是集群模式,所以在使用表engine的时候一定要指定Replicated系列的引擎,这样集群节点之间才能够实现数据的同步
    2、例如我上面指定的ReplicatedMergeTree,里面的内容含义其实就是zookeeper中的路径,被{}括号包裹起来的参数其实就是ck中所谓的宏变量,{database}这个就是ck内置的宏变量,{shard}和{replica}就是在你metrika.xml中定义的<macros></macros>标签中定义的变量,你在metrika.xml定义的是啥值,到时候建表成功后,在zookeeper中你就能看到对应的路径啦

6、!!!遇到的问题:因为我的机器配置比较低(8c16g),在使用过程中出现了一些问题,所以调整了几个参数,增加ck服务的稳定性

1、在users.xml中用户标签下添加了如下俩参数,当分组或者排序的时候内存达到8G就触发磁盘分组和排序,防止出现oom的情况

<max_bytes_before_external_group_by>8000000000</max_bytes_before_external_group_by>
<max_bytes_before_external_sort>8000000000</max_bytes_before_external_sort>

2、在将大数据量的csv文件导入到ck的过程中,一直报一个code241的错误,这个错误可能是版本的bug,解决办法就是在config.xml中修改了10。这个参数的默认值是0.9,表示ck只会使用到机器内存的百分之90,我把这个参数改为了10

<max_server_memory_usage_to_ram_ratio>10</max_server_memory_usage_to_ram_ratio>

额,文章写得不是特别好,如果有需要的话可以加我好友,让我们一起成长,加好友时备注下csdn哈

        qq:229603123

        vx:yao376720524070

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值