ClickHouse分布式高可用集群搭建

痛定思痛。 2023-01-22 03:52 528阅读 0赞

一、ClickHouse安装方式:

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

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

二、下载安装包

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

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

三、配置文件

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

  1. 默认启动脚本,注意,这个名字虽然叫server,其实是个shell脚本vi /etc/init.d/clickhouse-server
  2. 12 CLICKHOUSE_USER=clickhouse
  3. 13 CLICKHOUSE_GROUP=${CLICKHOUSE_USER}
  4. 14 SHELL=/bin/bash
  5. 15 PROGRAM=clickhouse-server
  6. 16 GENERIC_PROGRAM=clickhouse
  7. 17 EXTRACT_FROM_CONFIG=${GENERIC_PROGRAM}-extract-from-config
  8. 18 SYSCONFDIR=/data/clickhouse
  9. 19 CLICKHOUSE_LOGDIR=/data/clickhouse/logs
  10. 20 CLICKHOUSE_LOGDIR_USER=root
  11. 21 CLICKHOUSE_DATADIR_OLD=/data/clickhouse
  12. 22 LOCALSTATEDIR=/data/clickhouse/lock
  13. 23 BINDIR=/usr/bin
  14. 24 CLICKHOUSE_CRONFILE=/etc/cron.d/clickhouse-server
  15. 25 CLICKHOUSE_CONFIG=$SYSCONFDIR/config.xml
  16. 26 LOCKFILE=$LOCALSTATEDIR/$PROGRAM
  17. 27 RETVAL=0
  18. 29 CLICKHOUSE_PIDDIR=/var/run/$PROGRAM
  19. 30 CLICKHOUSE_PIDFILE="$CLICKHOUSE_PIDDIR/$PROGRAM
  • config.xml 全局信息配置文件

    <?xml version=””1.0””?>

    1. <yandex>
    2. <!--日志-->
    3. <logger>
    4. <level>error</level>
    5. <log>/data/clickhouse/logs/clickhouse.log</log>
    6. <errorlog>/data/clickhouse/logs/error.log</errorlog>
    7. <size>500M</size>
    8. <count>5</count>
    9. </logger>
    10. <!--本地节点信息-->
    11. <http_port>8123</http_port>
    12. <tcp_port>9000</tcp_port>
    13. <interserver_http_port>9009</interserver_http_port>
    14. <interserver_http_host>本机IP</interserver_http_host> <!--本机域名或IP-->
    15. <!--本地配置-->
    16. <listen_host>0.0.0.0</listen_host>
    17. <max_connections>4096</max_connections>
    18. <receive_timeout>800</receive_timeout>
    19. <send_timeout>800</send_timeout>
    20. <keep_alive_timeout>300</keep_alive_timeout>
    21. <max_concurrent_queries>1000</max_concurrent_queries>
    22. <uncompressed_cache_size>8589934592</uncompressed_cache_size>
    23. <mark_cache_size>5368709120</mark_cache_size>
    24. <path>/data/clickhouse/</path>
    25. <tmp_path>/data/clickhouse/tmp/</tmp_path>
    26. <users_config>users.xml</users_config>
    27. <default_profile>default</default_profile>
    28. <log_queries>1</log_queries>
    29. <default_database>default</default_database>
    30. <!--集群相关配置-->
    31. <remote_servers incl=""clickhouse_remote_servers"" />
    32. <zookeeper incl=""zookeeper-servers"" optional=""true"" />
    33. <macros incl=""macros"" optional=""true"" />
    34. <builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
    35. <max_session_timeout>3600</max_session_timeout>
    36. <default_session_timeout>300</default_session_timeout>
    37. <max_table_size_to_drop>0</max_table_size_to_drop>
    38. <merge_tree>
    39. <parts_to_delay_insert>300</parts_to_delay_insert>
    40. <parts_to_throw_insert>600</parts_to_throw_insert>
    41. <max_delay_to_insert>2</max_delay_to_insert>
    42. </merge_tree>
    43. <max_table_size_to_drop>0</max_table_size_to_drop>
    44. <max_partition_size_to_drop>0</max_partition_size_to_drop>
    45. <distributed_ddl>
    46. <!-- Path in ZooKeeper to queue with DDL queries -->
    47. <path>/clickhouse/task_queue/ddl</path>
    48. </distributed_ddl>
    49. <include_from>/etc/clickhouse-server/metrika.xml</include_from>
    50. </yandex>
  • users.xml 用户信息配置文件

    <?xml version=”1.0”?>

    1. <yandex>
    2. <profiles>
    3. <default>
    4. <max_memory_usage>10000000000</max_memory_usage>
    5. <use_uncompressed_cache>0</use_uncompressed_cache>
    6. <load_balancing>random</load_balancing>
    7. </default>
    8. <readonly>
    9. <max_memory_usage>10000000000</max_memory_usage>
    10. <use_uncompressed_cache>0</use_uncompressed_cache>
    11. <load_balancing>random</load_balancing>
    12. <readonly>1</readonly>
    13. </readonly>
    14. </profiles>
    15. <quotas>
    16. <!-- Name of quota. -->
    17. <default>
    18. <interval>
    19. <queries>0</queries>
    20. <errors>0</errors>
    21. <result_rows>0</result_rows>
    22. <read_rows>0</read_rows>
    23. <execution_time>0</execution_time>
    24. </interval>
    25. </default>
    26. </quotas>
    27. <users>
    28. <default>
    29. <!-- PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-' -->
    30. <!-- password UHXQQmhb -->
    31. <password_sha256_hex>65b84b497ef843f7c9629251a64e307caecbf7327975af4d18f83261239e1460</password_sha256_hex>
    32. <networks>
    33. <ip>::/0</ip>
    34. </networks>
    35. <profile>default</profile>
    36. <quota>default</quota>
    37. </default>
    38. <ck>
    39. <password_sha256_hex>65b84b497ef843f7c9629251a64e307caecbf7327975af4d18f83261239e1460</password_sha256_hex>
    40. <networks>
    41. <ip>::/0</ip>
    42. </networks>
    43. <profile>readonly</profile>
    44. <quota>default</quota>
    45. </ck>
    46. </users>
    47. </yandex>
  • metrika.xml 集群信息配置文件







    true

    192.68.1.1
    9000
    default
    password



    192.68.1.2
    9000
    default
    password




    true

    192.68.1.3
    9000
    default
    password



    192.68.1.4
    9000
    default
    password







    192.68.1.5
    2181


    192.68.1.6
    2181


    192.68.1.7
    2181



    01
    01
    192.68.1.1


    ::/0




    10000000000
    0.01
    lz4


四、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 leader\follower传输信息端口,3888推举端口

server.2=192.168.1.6:2888:3888

2888 leader\follower传输信息端口,3888推举端口

server.3=192.168.1.7:2888:3888

2888 leader\follower传输信息端口,3888推举端口

  1. 启动

/usr/local/zookeeper/bin/zkServer.sh [start\status\stop]

七、安装部署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

本文分享自微信公众号 - MYSQL轻松学(easymysql)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表评论

表情:
评论列表 (有 0 条评论,528人围观)

还没有评论,来说两句吧...

相关阅读

    相关 nginx可用

    一、背景 我们都知道nginx有负载均衡的功能,我们在学习的时候,练手的话,一般请求交给一个nginx,然后使用nginx自带的upstream指令把请求转发到其他web