clickhouse集群搭建

打印 上一主题 下一主题

主题 701|帖子 701|积分 2103

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Clickhouse集群搭建


  
安装包下载

可以通过deb/rpm、tgz方式安装,但是离线安装选择tgz方式比较方便。本篇先容
如何离线安装。
tgz下载:https://packages.clickhouse.com/tgz/lts
clickhouse单机安装

搭建集群必要在每台主机上进行单机安装,将tgz和install.sh上传到服务器,实行:
  1. bash install.sh
复制代码


  • install.sh
  1. #!/bin/bash
  2. export LATEST_VERSION=22.3.19.6
  3. export ARCH=arm64
  4. tar -xzvf "clickhouse-common-static-$LATEST_VERSION-${ARCH}.tgz" \
  5.   || tar -xzvf "clickhouse-common-static-$LATEST_VERSION.tgz"
  6. sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh"
  7. tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION-${ARCH}.tgz" \
  8.   || tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION.tgz"
  9. sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh"
  10. tar -xzvf "clickhouse-server-$LATEST_VERSION-${ARCH}.tgz" \
  11.   || tar -xzvf "clickhouse-server-$LATEST_VERSION.tgz"
  12. sudo "clickhouse-server-$LATEST_VERSION/install/doinst.sh" configure
  13. sudo /etc/init.d/clickhouse-server start
  14. tar -xzvf "clickhouse-client-$LATEST_VERSION-${ARCH}.tgz" \
  15.   || tar -xzvf "clickhouse-client-$LATEST_VERSION.tgz"
  16. sudo "clickhouse-client-$LATEST_VERSION/install/doinst.sh"
复制代码
默认安装

默认数据库目次



  • 默认数据目次路径: 默认数据目次处于/var/lib/clickhouse。
  • 数据目次初始化:删除此目次,重新启动clickhouse systemctl restart clickhouse-server
    可以重新将数据目次初始化。
更改默认数据目次

要更改默认数据目次更改,修改/etc/clickhouse-server/config.xml
  1.     <!-- Path to data directory, with trailing slash. -->
  2.     <path>/var/lib/clickhouse/</path>
复制代码
设置文件是只读的,以是要修改数据目次,

  • 必要修改其权限
  1. chmod 755 /etc/clickhouse-server/config.xml
复制代码

  • 将全部/var/lib/clickhouse/修改为其他数据目次
  • 删除默认数据库目次下全部文件。
  • 重启clickhouse-server,对数据目次进行重新初始化。
2分片-1副本-3节点集群搭建

   clickhouse的集群每个分片的每个副本只能放到单独的实例上,好比2分片-2副本必要4台呆板,3分片-2副本必要6台呆板。
  集群的拓扑:
节点脚色描述chnode1Data + ClickHouse Keeper数据节点 + 协调器chnode2Data + ClickHouse Keeper数据节点 + 协调器chnode3ClickHouse Keeper协调器 分片及副本分布:
节点脚色chnode1分片1、副本1chnode2分片2、副本1chnode3无分片、无副本 1. 设置hosts

对于每个主机,将如下内容追加到/etc/hosts:
  1. 10.55.134.82 chnode1     
  2. 10.55.134.93 chnode2
  3. 10.55.134.99 chnode3
复制代码
2. 修改每个主机的主机名

  1. hostnamectl set-hostname chnode1
复制代码
3. 设置文件上传

设置文件分布

/etc/clickhouse-server/config.d/目次中的设置会覆盖默认设置,以是官网建议:


  • 服务器设置添加到/etc/clickhouse-server/config.d/
  • 用户设置添加到/etc/clickhouse-server/users.d/
  • 不要更改/etc/clickhouse-server/config.xml
  • 不要更改/etc/clickhouse-server/users.xml
我们先来看看每个主机上的设置文件:


  • chnode1
  1. [root@chnode1 clickhouse]# ll /etc/clickhouse-server/config.d/
  2. total 24
  3. -rw-r--r-- 1 root       root       985 Feb 13 15:41 enable-keeper.xml
  4. -rw-r--r-- 1 clickhouse clickhouse  66 Feb 13 16:19 listen.xml
  5. -rw-r--r-- 1 root       root       104 Feb 13 15:41 macros.xml
  6. -rw-r--r-- 1 root       root       574 Feb 13 16:52 network-and-logging.xml
  7. -rw-r--r-- 1 root       root       599 Feb 13 15:41 remote-servers.xml
  8. -rw-r--r-- 1 root       root       386 Feb 13 15:41 use-keeper.xml
复制代码


  • chnode2
  1. [root@chnode2 clickhouse]# ll /etc/clickhouse-server/config.d/
  2. total 24
  3. -rw-r--r-- 1 root       root       985 Feb 13 15:41 enable-keeper.xml
  4. -rw-r--r-- 1 clickhouse clickhouse  66 Feb 13 16:19 listen.xml
  5. -rw-r--r-- 1 root       root       104 Feb 13 15:41 macros.xml
  6. -rw-r--r-- 1 root       root       574 Feb 13 16:52 network-and-logging.xml
  7. -rw-r--r-- 1 root       root       599 Feb 13 15:41 remote-servers.xml
  8. -rw-r--r-- 1 root       root       386 Feb 13 15:41 use-keeper.xml
复制代码


  • chnode3
  1. [root@chnode3 clickhouse]# ll /etc/clickhouse-server/config.d/
  2. total 12
  3. -rw-r--r-- 1 clickhouse clickhouse 985 Feb 13 15:45 enable-keeper.xml
  4. -rw-r--r-- 1 clickhouse clickhouse  61 Feb 13 16:06 listen.xml
  5. -rw-r--r-- 1 clickhouse clickhouse 566 Feb 13 15:45 network-and-logging.xml
复制代码
chnode1设置文件



  • network-and-logging.xml

    • 日志在1000M大小时滚动一次,保存3000M的日志。
    • clickhouse监听8123和9000端口
    • 服务器间通讯使用端口9009

  1. <clickhouse>
  2.         <logger>
  3.                 <level>debug</level>
  4.                 <log>/var/log/clickhouse-server/clickhouse-server.log</log>
  5.                 <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
  6.                 <size>1000M</size>
  7.                 <count>3</count>
  8.         </logger>
  9.         <display_name>clickhouse</display_name>
  10.         <listen_host>0.0.0.0</listen_host>
  11.         <http_port>8123</http_port>
  12.         <tcp_port>9000</tcp_port>
  13.         <interserver_http_port>9009</interserver_http_port>
  14. </clickhouse>
复制代码


  • enable-keeper.xml

    • chnode节点的server_id设置为1,其他节点id要不同。
    • 其他设置和chnode2一样

  1. <clickhouse>
  2.   <keeper_server>
  3.     <tcp_port>9181</tcp_port>
  4.     <server_id>1</server_id>
  5.     <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
  6.     <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
  7.     <coordination_settings>
  8.         <operation_timeout_ms>10000</operation_timeout_ms>
  9.         <session_timeout_ms>30000</session_timeout_ms>
  10.         <raft_logs_level>trace</raft_logs_level>
  11.     </coordination_settings>
  12.     <raft_configuration>
  13.         <server>
  14.             <id>1</id>
  15.             <hostname>chnode1</hostname>
  16.             <port>9234</port>
  17.         </server>
  18.         <server>
  19.             <id>2</id>
  20.             <hostname>chnode2</hostname>
  21.             <port>9234</port>
  22.         </server>
  23.         <server>
  24.             <id>3</id>
  25.             <hostname>chnode3</hostname>
  26.             <port>9234</port>
  27.         </server>
  28.     </raft_configuration>
  29.   </keeper_server>
  30. </clickhouse>
复制代码


  • macros.xml

    • shard值为1,指定了本节点存储分片1,副本1,chnode2里shard的值将变为2
    • 这种指定方式可以减少DDL语句复杂度,不用在建表时候再去指定分片分配到哪个节点。

  1. <clickhouse>
  2.   <macros>
  3.     <shard>1</shard>
  4.     <replica>replica_1</replica>
  5.   </macros>
  6. </clickhouse>
复制代码


  • remote-servers.xml

    • remote-servers部分指定了全部集群,replace="true"表示覆盖默认设置里设置的集群。
    • 指定了一个集群名为cluster_2S_1R
    • 集群使用secret进行加密通讯
    • cluster_2S_1R集群有两个分片,每个分片有一个副本。
    • internal_replication设置为true表示写入操作时会选择第一个发现的康健副本去写入。

   chnode1和chnode2的remote-servers.xml设置雷同。
  1. <clickhouse>
  2.   <remote_servers replace="true">
  3.     <cluster_2S_1R>
  4.     <secret>mysecretphrase</secret>
  5.         <shard>
  6.             <internal_replication>true</internal_replication>
  7.             <replica>
  8.                 <host>chnode1</host>
  9.                 <port>9000</port>
  10.             </replica>
  11.         </shard>
  12.         <shard>
  13.             <internal_replication>true</internal_replication>
  14.             <replica>
  15.                 <host>chnode2</host>
  16.                 <port>9000</port>
  17.             </replica>
  18.         </shard>
  19.     </cluster_2S_1R>
  20.   </remote_servers>
  21. </clickhouse>
复制代码


  • use-keeper.xml

    • 指定3个节点的zookeeper端口为9181

  1. <clickhouse>
  2.     <zookeeper>
  3.         <node index="1">
  4.             <host>chnode1</host>
  5.             <port>9181</port>
  6.         </node>
  7.         <node index="2">
  8.             <host>chnode2</host>
  9.             <port>9181</port>
  10.         </node>
  11.         <node index="3">
  12.             <host>chnode3</host>
  13.             <port>9181</port>
  14.         </node>
  15.     </zookeeper>
  16. </clickhouse>
复制代码
chnode2设置文件



  • network-and-logging.xml
   和chnode1设置雷同
  1. <clickhouse>
  2.         <logger>
  3.                 <level>debug</level>
  4.                 <log>/var/log/clickhouse-server/clickhouse-server.log</log>
  5.                 <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
  6.                 <size>1000M</size>
  7.                 <count>3</count>
  8.         </logger>
  9.         <display_name>clickhouse</display_name>
  10.         <listen_host>0.0.0.0</listen_host>
  11.         <http_port>8123</http_port>
  12.         <tcp_port>9000</tcp_port>
  13.         <interserver_http_port>9009</interserver_http_port>
  14. </clickhouse>
复制代码


  • enable-keeper.xml

    • chnode2节点的server_id设置为2,其他雷同

  1. <clickhouse>
  2.   <keeper_server>
  3.     <tcp_port>9181</tcp_port>
  4.     <server_id>2</server_id>
  5.     <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
  6.     <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
  7.     <coordination_settings>
  8.         <operation_timeout_ms>10000</operation_timeout_ms>
  9.         <session_timeout_ms>30000</session_timeout_ms>
  10.         <raft_logs_level>trace</raft_logs_level>
  11.     </coordination_settings>
  12.     <raft_configuration>
  13.         <server>
  14.             <id>1</id>
  15.             <hostname>chnode1</hostname>
  16.             <port>9234</port>
  17.         </server>
  18.         <server>
  19.             <id>2</id>
  20.             <hostname>chnode2</hostname>
  21.             <port>9234</port>
  22.         </server>
  23.         <server>
  24.             <id>3</id>
  25.             <hostname>chnode3</hostname>
  26.             <port>9234</port>
  27.         </server>
  28.     </raft_configuration>
  29.   </keeper_server>
  30. </clickhouse>
复制代码


  • macros.xml

    • shard值为2,指定了本节点存储分片2,副本1

  1. <clickhouse>
  2.   <macros>
  3.     <shard>2</shard>
  4.     <replica>replica_1</replica>
  5.   </macros>
  6. </clickhouse>
复制代码


  • remote-servers.xml
   chnode1和chnode2的remote-servers.xml设置雷同。
  1. <clickhouse>
  2.   <remote_servers replace="true">
  3.     <cluster_2S_1R>
  4.     <secret>mysecretphrase</secret>
  5.         <shard>
  6.             <internal_replication>true</internal_replication>
  7.             <replica>
  8.                 <host>chnode1</host>
  9.                 <port>9000</port>
  10.             </replica>
  11.         </shard>
  12.         <shard>
  13.             <internal_replication>true</internal_replication>
  14.             <replica>
  15.                 <host>chnode2</host>
  16.                 <port>9000</port>
  17.             </replica>
  18.         </shard>
  19.     </cluster_2S_1R>
  20.   </remote_servers>
  21. </clickhouse>
复制代码


  • use-keeper.xml
   和chnode1设置雷同
  1. <clickhouse>
  2.     <zookeeper>
  3.         <node index="1">
  4.             <host>chnode1</host>
  5.             <port>9181</port>
  6.         </node>
  7.         <node index="2">
  8.             <host>chnode2</host>
  9.             <port>9181</port>
  10.         </node>
  11.         <node index="3">
  12.             <host>chnode3</host>
  13.             <port>9181</port>
  14.         </node>
  15.     </zookeeper>
  16. </clickhouse>
复制代码
chnode3设置文件



  • network-and-logging.xml
   和chnode1设置雷同
  1. <clickhouse>
  2.         <logger>
  3.                 <level>debug</level>
  4.                 <log>/var/log/clickhouse-server/clickhouse-server.log</log>
  5.                 <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
  6.                 <size>1000M</size>
  7.                 <count>3</count>
  8.         </logger>
  9.         <display_name>clickhouse</display_name>
  10.         <listen_host>0.0.0.0</listen_host>
  11.         <http_port>8123</http_port>
  12.         <tcp_port>9000</tcp_port>
  13.         <interserver_http_port>9009</interserver_http_port>
  14. </clickhouse>
复制代码


  • enable-keeper.xml

    • chnode3节点的server_id设置为3,其他雷同

  1. <clickhouse>
  2.   <keeper_server>
  3.     <tcp_port>9181</tcp_port>
  4.     <server_id>3</server_id>
  5.     <log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
  6.     <snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
  7.     <coordination_settings>
  8.         <operation_timeout_ms>10000</operation_timeout_ms>
  9.         <session_timeout_ms>30000</session_timeout_ms>
  10.         <raft_logs_level>trace</raft_logs_level>
  11.     </coordination_settings>
  12.     <raft_configuration>
  13.         <server>
  14.             <id>1</id>
  15.             <hostname>chnode1</hostname>
  16.             <port>9234</port>
  17.         </server>
  18.         <server>
  19.             <id>2</id>
  20.             <hostname>chnode2</hostname>
  21.             <port>9234</port>
  22.         </server>
  23.         <server>
  24.             <id>3</id>
  25.             <hostname>chnode3</hostname>
  26.             <port>9234</port>
  27.         </server>
  28.     </raft_configuration>
  29.   </keeper_server>
  30. </clickhouse>
复制代码
4. 重启clickhouse-server

三台服务器全部实行:
  1. systemctl restart clickhouse-server
复制代码
5. 集群搭建测试

下面来创建样例分布表,测试下效果:

  • 连接chnode1,实行SHOW CLUSTERS
  1. [root@chnode1 clickhouse]# clickhouse-client --password -h 127.0.0.1
  2. ClickHouse client version 22.3.19.6 (official build).
  3. Password for user (default):
  4. Connecting to 127.0.0.1:9000 as user default.
  5. Connected to ClickHouse server version 22.3.19 revision 54455.
  6. clickhouse :) SHOW CLUSTERS
  7. SHOW CLUSTERS
  8. Query id: 0ff16c63-3c1e-438d-8fad-1e8e25c42235
  9. ┌─cluster───────┐
  10. │ cluster_2S_1R │
  11. └───────────────┘
复制代码

  • 创建数据库
  1. CREATE DATABASE db1 ON CLUSTER cluster_2S_1R
复制代码

  • 创建一个分布表
  1. CREATE TABLE db1.table1_dist ON CLUSTER cluster_2S_1R
  2. (
  3.     `id` UInt64,
  4.     `column1` String
  5. )
  6. ENGINE = Distributed('cluster_2S_1R', 'db1', 'table1', rand())
复制代码

  • 分别clickhouse-client连接chnode1和chnode2.
chnode1插入:
  1. INSERT INTO db1.table1 (id, column1) VALUES (1, 'abc');
复制代码
chnode2插入:
  1. INSERT INTO db1.table1 (id, column1) VALUES (2, 'def');
复制代码

  • 查询数据
  1. clickhouse :) SELECT * FROM db1.table1_dist;
  2. SELECT *
  3. FROM db1.table1_dist
  4. Query id: 8ce26016-f923-472e-894d-a7a3025a8927
  5. ┌─id─┬─column1─┐
  6. │  1 │ abc     │
  7. └────┴─────────┘
  8. ┌─id─┬─column1─┐
  9. │  1 │ abc     │
  10. └────┴─────────┘
复制代码
Reference List


  • https://clickhouse.com/docs/en/architecture/horizontal-scaling

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表