k8s上的clickhouse集群部署并创建分布式表(附详细参数说明和参考链接)

k8s上的clickhouse集群部署并创建分布式表

      • 制作docker镜像
      • 创建configmap
      • 创建clickhouse service pod
      • 创建clickhouse client pod
      • 创建Service
      • 创建分布式表

部署总体参考:https://blog.csdn.net/tototuzuoquan/article/details/111305125
clickhouse的配置文件相关解读:https://www.cnblogs.com/zhoujinyi/archive/2004/01/13/12627780.html

流程简介

  1. 制作docker镜像,添加一个脚本,来在每个机器上生成不同的macros.xml,方便创建副本表。
  2. 创建configmap,data部分包含用于配置集群的remote_servers.xml、用于连接zookeeper的zookeeper.xml,这两个文件会被挂载在clickhouse的config.d目录下,然后会覆盖config.xml的相关内容;
    data部分还包含users.xml,用于设置用户的账号密码和可使用的内存,会覆盖到clickhouse的user.xml中。
  3. 创建statefulset,docker使用yandex/clickhouse-server:19.11.3.11,通过replicas来设置副本数,要和remote_servers.xml相对应,同时设置持久化卷的挂载。
  4. 创建service,在selector.app中设置第二部的statefulset,将spec.type设置为ClusterIP只在集群内使用,clusterIP设置为None,通过DNS解析service名来访问。

制作docker镜像

参考

  • Linux设置值:https://www.cnblogs.com/newlangwen/p/7290541.html
  • Linux中awk和substr:https://blog.csdn.net/CSNDRYL/article/details/77223144?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

步骤:在同一目录下创建macros.xmlDockerfilerun.sh,内容如下,目的是为了让每个机器的macros.xml都不一样。

macros.xml:
此时都是一样的,docker启动后,使用脚本来改变值。

<yandex>
    <macros replace="replace">
        <shard>shard0shard>
        <replica>REPLICA_1replica>
    macros>
yandex>

Dockerfile

FROM yandex/clickhouse-server:20.8
ADD ./macros.xml /etc/clickhouse-server/config.d/
ADD ./run.sh /opt
CMD ["sh","/opt/run.sh"]
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

run.sh:

  • 第一句是设置一个值,在集群中可知hostnameclickhouse-0clickhouse-1clickhouse-2这样的,awk就是对前面echo的值进行操作,substr的第一个参数表示第一行,第二个参数表示位置,从第几个字符开始取,第三个参数表示取一个,所以就可以分别得到0 1 2了。
  • 第三句是替换文本内容,将REPLICA_NAME替换成replica$NODE_ID
  • 第四句gosu,类似sudo,用于启动命令
#!/bin/bash
NODE_ID=$(echo $(hostname) | awk '{print substr($0,length,1)}')
echo "NODE_ID is $NODE_ID"

sed -i "s/REPLICA_NAME/replica$NODE_ID/" /etc/clickhouse-server/config.d/macros.xml

gosu clickhouse:clickhouse /usr/bin/clickhouse-server --config=${CLICKHOUSE_CONFIG}

创建configmap

配置文件configd.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tt-test
  namespace: te-sp-dev
  labels:
    app: tt-test
data:
  remote_servers.xml: |-
    >
      >
        >
            >
              >true>
              >
                  >default>
                  >clickhouse-0.clickhouse>
                  >argus>
                  >root>
                  >9000>
              >
              >
                  >default>
                  >clickhouse-1.clickhouse>
                  >argus>
                  >root>
                  >9000>
              >
              >
                  >default>
                  >clickhouse-2.clickhouse>
                  >argus>
                  >root>
                  >9000>
              >
            >
        >
      >
      >0.0.0.0>
      >
          >error>
          >>
          >>
          >1>
      >
      >
          >
              >lz4>
          >
      >
      >
          >/clickhouse/task_queue/ddl>
      >
      >
          >shard0>
          >REPLICA_NAME>
      >
    >
  zookeeper.xml: |-
    >
      -servers">
        >
            >kafka-zk-zk-0.kafka-zk-hs.te-retail-senselink>
            >2181>
        >
        >
            >kafka-zk-zk-1.kafka-zk-hs.te-retail-senselink>
            >2181>
        >
        >
            >kafka-zk-zk-2.kafka-zk-hs.te-retail-senselink>
            >2181>
        >
      >
    >
  users.xml: |-
    >
      >
        >
          >1000000000>
          >0>
          >random>
        >
        >
          

你可能感兴趣的:(开发技能)