• ClickHouse 分布式高可用集群搭建(转载)


    一、ClickHouse安装方式:

    • 源码编译安装
    • Docker安装
    • RPM包安装

    为了方便使用,一般采用RPM包方式安装,其他两种方式这里不做说明。

    二、下载安装包

    官方没有提供rpm包,但是Altinity第三方公司提供了。

    地址:https://packagecloud.io/altinity/clickhouse

    三、配置文件

    安装好rmp包后,默认配置文件在/etc/clickhouse-server/目录下,主要涉及以下3种配置文件,也可以自定义配置文件位置,如果修改了目录记得连带修改启动脚本。

    默认启动脚本,注意,这个名字虽然叫server,其实是个shell脚本vi /etc/init.d/clickhouse-server
    12  CLICKHOUSE_USER=clickhouse
    13  CLICKHOUSE_GROUP=${CLICKHOUSE_USER}
    14  SHELL=/bin/bash
    15  PROGRAM=clickhouse-server
    16  GENERIC_PROGRAM=clickhouse
    17  EXTRACT_FROM_CONFIG=${GENERIC_PROGRAM}-extract-from-config
    18  SYSCONFDIR=/data/clickhouse
    19  CLICKHOUSE_LOGDIR=/data/clickhouse/logs
    20  CLICKHOUSE_LOGDIR_USER=root
    21  CLICKHOUSE_DATADIR_OLD=/data/clickhouse
    22  LOCALSTATEDIR=/data/clickhouse/lock
    23  BINDIR=/usr/bin
    24  CLICKHOUSE_CRONFILE=/etc/cron.d/clickhouse-server
    25  CLICKHOUSE_CONFIG=$SYSCONFDIR/config.xml
    26  LOCKFILE=$LOCALSTATEDIR/$PROGRAM
    27  RETVAL=0
    29  CLICKHOUSE_PIDDIR=/var/run/$PROGRAM
    30  CLICKHOUSE_PIDFILE="$CLICKHOUSE_PIDDIR/$PROGRAM
    • config.xml 全局信息配置文件
    <?xml version=""1.0""?>
        <yandex>
        <!--日志-->
        <logger>
        <level>error</level>
        <log>/data/clickhouse/logs/clickhouse.log</log>
        <errorlog>/data/clickhouse/logs/error.log</errorlog>
        <size>500M</size>
        <count>5</count>
        </logger>
        <!--本地节点信息-->
        <http_port>8123</http_port>
        <tcp_port>9000</tcp_port>
        <interserver_http_port>9009</interserver_http_port>
        <interserver_http_host>本机IP</interserver_http_host>  <!--本机域名或IP-->
        <!--本地配置-->
        <listen_host>0.0.0.0</listen_host>
        <max_connections>4096</max_connections>
        <receive_timeout>800</receive_timeout>
        <send_timeout>800</send_timeout>
        <keep_alive_timeout>300</keep_alive_timeout>
        <max_concurrent_queries>1000</max_concurrent_queries>
         <uncompressed_cache_size>8589934592</uncompressed_cache_size>
        <mark_cache_size>5368709120</mark_cache_size>
        <path>/data/clickhouse/</path>
        <tmp_path>/data/clickhouse/tmp/</tmp_path>
        <users_config>users.xml</users_config>
        <default_profile>default</default_profile>
        <log_queries>1</log_queries>
        <default_database>default</default_database>
        <!--集群相关配置-->
        <remote_servers incl=""clickhouse_remote_servers""  />
        <zookeeper incl=""zookeeper-servers""  optional=""true""   />
        <macros incl=""macros""  optional=""true"" />
        <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
        <max_session_timeout>3600</max_session_timeout>
        <default_session_timeout>300</default_session_timeout>
        <max_table_size_to_drop>0</max_table_size_to_drop>
        <merge_tree>
        <parts_to_delay_insert>300</parts_to_delay_insert>
        <parts_to_throw_insert>600</parts_to_throw_insert>
        <max_delay_to_insert>2</max_delay_to_insert>
        </merge_tree>
        <max_table_size_to_drop>0</max_table_size_to_drop>
         <max_partition_size_to_drop>0</max_partition_size_to_drop>
        <distributed_ddl>
        <!-- Path in ZooKeeper to queue with DDL queries -->
        <path>/clickhouse/task_queue/ddl</path>
        </distributed_ddl>
         <include_from>/etc/clickhouse-server/metrika.xml</include_from>
        </yandex>
    • users.xml 用户信息配置文件
    <?xml version="1.0"?>
        <yandex>
        <profiles>
        <default>
        <max_memory_usage>10000000000</max_memory_usage>
        <use_uncompressed_cache>0</use_uncompressed_cache>
        <load_balancing>random</load_balancing>
        </default>
        <readonly>
        <max_memory_usage>10000000000</max_memory_usage>
        <use_uncompressed_cache>0</use_uncompressed_cache>
        <load_balancing>random</load_balancing>
        <readonly>1</readonly>
        </readonly>
        </profiles>
        <quotas>
        <!-- Name of quota. -->
        <default>
        <interval>
        <queries>0</queries>
        <errors>0</errors>
        <result_rows>0</result_rows>
        <read_rows>0</read_rows>
        <execution_time>0</execution_time>
        </interval>
        </default>
        </quotas>
        <users>
        <default>
        <!-- PASSWORD=$(base64 < /dev/urandom | head -c8); echo  "$PASSWORD"; echo -n  "$PASSWORD" | sha256sum | tr -d '-'   -->
        <!-- password UHXQQmhb -->
         <password_sha256_hex>65b84b497ef843f7c9629251a64e307caecbf7327975af4d18f83261239e1460</password_sha256_hex>
        <networks>
        <ip>::/0</ip>
        </networks>
        <profile>default</profile>
        <quota>default</quota>
        </default>
        <ck>
        <password_sha256_hex>65b84b497ef843f7c9629251a64e307caecbf7327975af4d18f83261239e1460</password_sha256_hex>
        <networks>
        <ip>::/0</ip>
        </networks>
        <profile>readonly</profile>
        <quota>default</quota>
        </ck>
        </users>
        </yandex>
    • metrika.xml 集群信息配置文件
    <yandex>
        <!--ck集群节点-->
        <clickhouse_remote_servers>
        <clickhouse_cluster_name>
        <!--分片1-->
        <shard>
        <internal_replication>true</internal_replication>
        <replica>
        <host>192.68.1.1</host>
        <port>9000</port>
        <user>default</user>
        <password>password</password>
        </replica>
        <!--复制集1-->
        <replica>
        <host>192.68.1.2</host>
        <port>9000</port>
        <user>default</user>
        <password>password</password>
        </replica>
        </shard>
        <!--分片2-->
        <shard>
        <internal_replication>true</internal_replication>
        <replica>
        <host>192.68.1.3</host>
        <port>9000</port>
        <user>default</user>
        <password>password</password>
        </replica>
        <!--复制集2-->
        <replica>
        <host>192.68.1.4</host>
        <port>9000</port>
        <user>default</user>
        <password>password</password>
        </replica>
        </shard>
        </clickhouse_cluster_name>
        </clickhouse_remote_servers>
        <!--zookeeper相关配置-->
        <zookeeper-servers>
        <node index=""""1"""">
        <host>192.68.1.5</host>
        <port>2181</port>
        </node>
        <node index=""""2"""">
        <host>192.68.1.6</host>
        <port>2181</port>
        </node>
        <node index=""""3"""">
        <host>192.68.1.7</host>
        <port>2181</port>
        </node>
        </zookeeper-servers>
        <macros>
        <layer>01</layer>
        <shard>01</shard> <!--分片号-->
        <replica>192.68.1.1</replica> <!--当前节点IP-->
        </macros>
        <networks>
        <ip>::/0</ip>
        </networks>
        <!--压缩相关配置-->
        <clickhouse_compression>
        <case>
        <min_part_size>10000000000</min_part_size>
        <min_part_size_ratio>0.01</min_part_size_ratio>
        <method>lz4</method> <!--压缩算法lz4压缩比zstd快, 更占磁盘-->
        </case>
        </clickhouse_compression>
        </yandex>

    四、ClickHouse常用架构:

    • 单实例 无需过多解释,就是单机部署,安装好rpm包后,简单修改配置文件即可启动; 单实例不建议线上使用,只做功能测试; MergeTree,引擎适用于单机实例,查询性能非常高。
    • 分布式+高可用集群 ClickHouse引擎有十几个,不同引擎实现不同功能,实现分布式高可用主要通过以下两种引擎: ClickHouse分布式通过配置文件来实现,同一集群配置多个分片,每个节点,都配置同样的配置文件;而高可用需要借助zookeeper来实现,ReplicatedMergeTree里共享同一个ZK路径的表,会相互同步数据。 ReplicatedMergeTree,复制引擎,基于MergeTree,实现数据复制,即高可用; Distributed,分布式引擎,本身不存储数据,将数据分发汇总。

    五、分布式高可用集群架构

    以下是2个分片、2个副本集的架构,zookeeper机器可以跟ClickHouse共用,但是如果压力较大,IO消耗较多,可能会延迟,建议分开。

    role

    shard1

    shard2

    replica

    192.168.1.1

    192.168.1.3

    replica

    192.168.1.2

    192.168.1.4

    zookeeper集群:

    index

    node

    1

    192.168.1.5

    2

    192.168.1.6

    3

    192.168.1.7

    架构如下:

    六、安装zookeeper集群,至少3台

    1. 下载安装包,建议3.4.9之后的版本 http://archive.apache.org/dist/zookeeper/
    2. 解压 tar zxf /usr/local/test/clickhouse/zookeeper-3.4.13.tar.gz -C /usr/local mv /usr/local/zookeeper-3.4.13 /usr/local/zookeeper
    3. 创建目录: mkdir /data/zookeeper/data mkdir /data/zookeeper/logs
    4. 指定节点号 echo '1' > /data/zookeeper/data/myid
    5. zookeeper配置文件 /usr/local/zookeeper/conf/zoo.cfg

    tickTime=2000

    基本时间单位, 毫秒值

    initLimit=30000

    tickTime的倍数,follower和leader之间的最长心跳时间

    syncLimit=10

    tickTime的倍数,leader和follower之间发送消息, 请求和应答的最大时间

    dataDir=/export/data/zookeeper/data

    数据目录

    dataLogDir=/export/data/zookeeper/logs

    日志目录,如果没设定,默认和dataDir相同

    clientPort=2181

    监听client连接的端口号

    maxClientCnxns=2000

    zookeeper最大连接

    maxSessionTimeout=60000000

    最大的会话超时时间

    autopurge.snapRetainCount=10

    保留的文件数目,默认3个

    autopurge.purgeInterval=1

    自动清理snapshot和事务日志,清理频率,单位是小时

    globalOutstandingLimit=200

    等待处理的最大请求数量

    preAllocSize=131072

    日志文件大小Kb,切换快照生成日志

    snapCount=3000000

    两次事务快照之间可执行事务的次数,默认的配置值为100000

    leaderServes=yes

    leader是否接受client请求,默认为yes即leader可以接受client的连接,当节点数为>3时,建议关闭

    server.1=192.168.1.5:2888:3888

    2888 leaderfollower传输信息端口,3888推举端口

    server.2=192.168.1.6:2888:3888

    2888 leaderfollower传输信息端口,3888推举端口

    server.3=192.168.1.7:2888:3888

    2888 leaderfollower传输信息端口,3888推举端口

    6. 启动

    /usr/local/zookeeper/bin/zkServer.sh [startstatusstop]

    七、安装部署clickhouse

    1. 下载并安装上面rpm安装包
    2. 参考配置上面的配置文件
    3. 如果采用上面的配置文件需要创建目录 mkdir -p /data/clickhouse/tmp /data/clickhouse/logs /data/clickhouse/lock/
    4. 修改权限 chown clickhouse.clickhouse -R /data/clickhouse
    5. 启动(有两种方式) clickhouse-server --daemon --config-file=/etc/clickhouse-server/config.xml 或/etc/init.d/clickhouse-serve start
    6. 登录验证 clickhouse-client -u default --password password -h127.0.0.1

    转载自:https://cloud.tencent.com/developer/article/1376125

  • 相关阅读:
    动态加载方法(定时任务)
    安装 asp.net core 出错
    .NET:权限管理
    关于随机数
    博客园首弹
    C# MVC从其他系统获取文件流,显示文件
    Python中操作MySQL步骤
    MySql之_增删改查
    数据库之_SQL注入
    为什么上传到youtube上的视频很模糊
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11849803.html
Copyright © 2020-2023  润新知