前言
- 目标:ClickHouse单机集群版安装
- 本文面向ClickHouse初学者
- 服务器环境 Ubuntu18.04
集群安装步骤如下:
- 安装java
- 安装Zookeeper(依赖Java)
- 安装单机ClickHouse
- 修改ClickHouse配置为集群版
安装步骤
一、安装Java
在线安装
sudo apt update sudo apt install openjdk-8-jdk
离线安装
1、下载安装包:https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html 在当前页面寻找 jdk-8u301-linux-x64.tar.gz 并下载
2、将文件上传至服务器并解压到指定目录
tar -zxvf jdk-8u301-linux-x64.tar.gz mkdir /usr/local/src/jdk/ mv jdk1.8.0_301/ /usr/local/src/jdk/jdk1.8
3、在文件 /etc/profile 中添加环境变量
export JAVA_HOME=/usr/local/src/jdk/jdk1.8 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4、执行source /etc/profile 使得环境变量生效
5、使用java -version命令验
证是否安装成功
二、安装Zookeeper
1、下载安装包:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
2、将文件上传至服务器指定目录并解压
# 自定义安装路径为 /usr/local/zookeeper
ZK_PATH=/usr/local/zookeeper
mkdir -p $ZK_PATH
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
mv apache-zookeeper-3.7.0-bin/* $ZK_PATH
# 修改配置
cd $ZK_PATH
cp conf/zoo_sample.cfg conf/zoo.cfg
3、修改配置文件内容为如下
tickTime=2000
initLimit=10
syncLimit=5
# 主要修改dataDir属性
dataDir=/data/zookeeper
clientPort=2181
4、启动服务:$ZK_PATH/bin/zkServer.sh start
5、此后命令如果不需要配置认证则可跳过
6、进入ZK命令行:$ZK_PATH/bin/zkCli.sh
7、执行添加用户命令:
addauth digest username:password
setAcl / auth:username:cdrwa
8、重启zk服务:$ZK_PATH/bin/zkServer.sh restart
三、安装单机ClickHouse
1、安装CK命令如下,在安装过程中会提示输入默认用户(用户名为default)的密码
sudo apt-get install apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
# 此处使用清华源 加快安装速度
echo "deb https://mirrors.tuna.tsinghua.edu.cn/clickhouse/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start
2、安装完成进行登录测试:clickhouse-client -u default --password password
四、修改ClickHouse配置为集群版
备份默认配置文件:cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.bak
然后编辑默认配置文件 /etc/clickhouse-server/config.xml 并删除集群相关的配置
-
- 文件中<remote_servers></remote_servers>标签里的全部内容
- 文件中<zookeeper></zookeeper>标签里的全部内容
- 文件中<macros></macros>标签里的全部内容
添加自定义配置文件:vi /etc/clickhouse-server/config.d/config.xml 内容如下
<yandex> <zookeeper> <node index="1"> <host>此处改为ZK的HOST</host> <port>2181</port> </node> <identity>zk_username:zk_password</identity> <session_timeout_ms>600000</session_timeout_ms> </zookeeper> <remote_servers> <test> <shard> <internal_replication>true</internal_replication> <replica> <host>本机IP</host> <port>9000</port> <user>default</user> <password>password</password> </replica> </shard> </test> </remote_servers> <networks> <ip>::/0</ip> </networks> <macros> <shard>01</shard> <replica>node1</replica> </macros> </yandex>
然后重启CK即可:service clickhouse-server restart
关键步骤解释
集群配置文件解释
zookeeper 配置
- 如果Zookeeper为集群版,直接增加node节点即可
remote_servers 配置
- remote_servers下级节点为集群,可配置多个集群
- 集群下级节点为分片(shard),可配置多个shard,不同shard不能用同一个ClickHouse实例
- 分片下级为副本(replica),可对分片配置多个副本,默认最少0个,不同副本不能用同一个ClickHouse实例
- internal_replication 用来控制当数据写入时(必须是Replicated*的表),由分片自己负责副本间的数据复制,否则分布式表的副本数据写入需要由Distributed引擎来负责
macros 配置
- 本质上就是针对当前实例的全局变量的定义,可以被某些地方来引用
- 此配置需要在集群中全局唯一
- 此处的参数会在创建Replicated*的表时被引用
- shard的值为当前节点在在集群中的分片编号,需要在集群中唯一
- replica是副本的唯一标识,需要在单个分片的多个副本中唯一
参考文档:
ClickHouse官方文档:
StackOverFlow关于macros的解释
一本书:
《ClickHouse原理解析与应用实践》