---
title: "CentOS7 安装 ClickHouse 集群"
date: 2020-09-23T10:18:00+08:00
lastmod: 2020-10-10T01:40:00+08:00
tags: []
categories: ["clickhouse"]
---
# 环境
## Zookeeper 服务器
eth0 IP | eth1 IP | 操作系统 | ZK 版本 | myid
---- | ---- | ---- | ---- | ----
10.0.4.101 | 10.1.4.101 | CentOS7.8 | 3.4.14 | 101
10.0.4.102 | 10.1.4.102 | CentOS7.8 | 3.4.14 | 102
10.0.4.103 | 10.1.4.103 | CentOS7.8 | 3.4.14 | 103
- eth0 网卡用于向客户端提供服务,eth1 网卡用于 Zookeeper 集群内部通信
- 配置时间同步,关闭 selinux 和 firewalld
## ClickHouse 服务器
eth0 IP | eth1 IP | 操作系统 | CH 版本 | shard 值 | replica 值
---- | ---- | ---- | ---- | ---- | ----
10.0.4.181 | 10.1.4.181 | CentOS7.8 | 20.3 LTS | 1 | 10.1.4.181
10.0.4.182 | 10.1.4.182 | CentOS7.8 | 20.3 LTS | 1 | 10.1.4.182
10.0.4.183 | 10.1.4.183 | CentOS7.8 | 20.3 LTS | 2 | 10.1.4.183
10.0.4.184 | 10.1.4.184 | CentOS7.8 | 20.3 LTS | 2 | 10.1.4.184
10.0.4.185 | 10.1.4.185 | CentOS7.8 | 20.3 LTS | 3 | 10.1.4.185
10.0.4.186 | 10.1.4.186 | CentOS7.8 | 20.3 LTS | 3 | 10.1.4.186
- eth0 网卡用于向客户端提供服务,eth1 网卡用于 ClickHouse 集群内部通信
- 配置时间同步,关闭 selinux 和 firewalld
# 安装 Zookeeper 集群
- ClickHouse 集群依赖 zookeeper 管理集群配置
- 安装过程参考: [CentOS7 安装 zookeeper 集群](/post/zk-install/)
- 启动 zookeeper 集群,zookeeper 正常运行后,才能进行后续步骤
# 安装 ClickHouse 集群
## 配置 ClickHouse yum 源
- 在每台 ClickHouse 服务器上执行如下操作
- 生成 clickhouse.repo 文件
```bash
echo '[clickhouse-lts]
name=ClickHouse - LTS Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/clickhouse/rpm/lts/$basearch/
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/clickhouse/CLICKHOUSE-KEY.GPG
gpgcheck=1
enabled=1
EOF
' > /etc/yum.repos.d/clickhouse.repo
```
- 重建 yum 缓存
```bash
yum clean all
yum makecache fast
```
## 安装 ClickHouse
- 在每台 ClickHouse 服务器上执行如下操作
- 安装 clickhouse-server 和 clickhouse-client
```bash
yum install clickhouse-server clickhouse-client
```
## 修改 ClickHouse 配置
- 在每台 ClickHouse 服务器上执行如下操作
- 我没用 /etc/metrika.xml 和 config.d 子目录,直接修改的 config.xml,先备份
```bash
cd /etc/clickhouse-server/
cp config.xml config.xml.origin
```
- 编辑 /etc/clickhouse-server/config.xml,修改部分如下
```xml
10.1.4.181
10.1.4.182
10.1.4.183
10.1.4.184
10.1.4.185
10.1.4.186
0.0.0.0
/var/lib/clickhouse/
1073741824
/clickhouse/disk1/
/clickhouse/disk2/
disk1
disk2
true
true
10.1.4.181
9000
10.1.4.182
9000
true
10.1.4.183
9000
10.1.4.184
9000
true
10.1.4.185
9000
10.1.4.186
9000
10.0.4.101
2181
10.0.4.102
2181
10.0.4.103
2181
1
10.1.4.181
1
10.1.4.182
2
10.1.4.183
2
10.1.4.184
3
10.1.4.185
3
10.1.4.186
```
## 启动 ClickHouse
- 在每台 ClickHouse 服务器上执行如下操作
- 启动 clickhouse-server 服务
```bash
systemctl start clickhouse-server
```
# 查看集群状态
- 在任一 ClickHouse 服务器上执行如下操作
- 查询 system.cluster 表
```sql
SELECT * FROM system.clusters;
```
# 简单使用
- 在任意节点上登陆 clickhouse
```bash
clickhouse-client -h 127.0.0.1
```
- 创建数据库
```sql
CREATE DATABASE db1 ON CLUSTER cluser_3s2r;
USE db1;
```
- 创建数据表
```sql
CREATE TABLE db1.t1_local
ON CLUSTER cluster_3s2r (
col1 UInt32,
col2 String
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/t1_local', '{replica}')
ORDER BY (col1)
SETTINGS STORAGE_POLICY='policy_jbod';
```
- 创建数据表对应的分布式代理表
```sql
CREATE TABLE db1.t1
ON CLUSTER cluster_3s2r
AS db1.t1_local
ENGINE = Distributed(cluster_3s2r, db1, t1_local, rand());
```
- 通过分布式代理表写入和查询数据
```sql
INSERT INTO db1.t1 values(1,'aa');
SELECT * FROM db1.t1;
```