# Deploy_ClickHouse
**Repository Path**: dbother/deploy_clickhouse
## Basic Information
- **Project Name**: Deploy_ClickHouse
- **Description**: 部署 ClickHouse 单机/多分片/高可用
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2023-05-08
- **Last Updated**: 2024-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: clickhouse
## README
## 功能
* 部署单节点 ClickHouse
* 部署单副本多分片 CK
* 部署单分片多副本
* 部署多副本多分片副本
* 当前部署过 21.7、21.8、22.8 版本
* 基于Clickhouse-Backup备份(未完成)
## 示例环境
- CentOS 7
- 基于 yum 安装
- ClickHouse 21.8
- 架构:单副本多分片
- - zookeeper 集群
- ClickHouse 多分片集群
- 当前实例环境:
示例部署一个3分片集群
| **服务器** | **安装项** | |
| -------------- | ---------- | ---------- |
| 192.168.66.161 | zookeeper | ClickHouse |
| 192.168.66.162 | zookeeper | ClickHouse |
| 192.168.66.163 | zookeeper | ClickHouse |
## 限制说明
- 基于CentOS 7验证
- 仅支持单副本多分片集群
- 不支持负载均衡,如需负载均衡请自行部署haproxy ,或前面挂着slb等产品
- 机器不要太差,磁盘不要太小
- 防火墙需关闭或进行对应设置,selinux需关闭
- 需自行下载CK的RPM包
## 1.安装前准备
> 所需软件包准备
```shell
[root@test01 Deploy_ClickHouse]# ll soft/
total 273216
-rw-r--r-- 1 root root 12516362 Oct 8 16:24 apache-zookeeper-3.6.3-bin.tar.gz
-rw-r--r-- 1 root root 76973 Oct 8 16:25 clickhouse-client-22.8.21.38.x86_64.rpm
-rw-r--r-- 1 root root 256771051 Oct 8 16:25 clickhouse-common-static-22.8.21.38.x86_64.rpm
-rw-r--r-- 1 root root 102762 Oct 8 16:25 clickhouse-server-22.8.21.38.x86_64.rpm
-rw-r--r-- 1 root root 10294740 Oct 8 16:24 java-1.8.0-openjdk-devel-1.8.0.342.b07-1.el7.x86_64.rpm
```
### 1.1 设置host
在所有需安装的服务器上设置好host
```shell
vi /etc/hosts
# 添加如下信息
192.168.66.161 test01
192.168.66.162 test02
192.168.66.163 test03
```
### 1.2 安装JAVA环境
```shell
yum install java-1.8.0-openjdk -y
```
使用如下命令查看JAVA_HOME
```shell
[root@test02 install_clickhouse]# which java
/usr/bin/java
[root@test02 install_clickhouse]# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Aug 9 12:06 /usr/bin/java -> /etc/alternatives/java
[root@test02 install_clickhouse]# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 73 Aug 9 12:06 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/bin/java
```
## 2.执行脚本安装
> 需要先将对应的包下载了放在soft目录下
```
# 下载对应的包,可以在发行版中下载,也可以自行下载
# 在脚本目录下新建soft目录,将包解压放入
mkdir -p soft
```
### 2.1 安装Zookeeper
#### 2.1.1 需要修改自定义配置文件的参数
```shell
# 安装hosts,若为single,仅需传入单个IP,若为多个则以英文逗号隔开
HOSTS="192.168.66.161,192.168.66.162,192.168.66.163"
# 绝对路径
ZK_INSTALL_DIR=/app
# 绝对路径
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64
# 这边只要名称
ZK_PKG_NAME=apache-zookeeper-3.6.3-bin.tar.gz
# ZK端口,默认是2181
ZK_CLIENT_PORT=2181
```
#### 2.1.2 选装单节点版zookeeper
单节点安装的话,在任意一个机器上执行
```shell
cd /opt/install_clickhouse
[root@test01 install_clickhouse]# ./install_zookeeper.sh single 1
2022-06-08 12:06:17 [Note] 检查基础参数是否已设置...
2022-06-08 12:06:17 [Note] 当前模式为集群部署,当前部署节点3 ...
2022-06-08 12:06:17 [Note] 开始安装Zookeeper
2022-06-08 12:06:17 [Note] 检查是否已存在运行的ZK...
2022-06-08 12:06:17 [Note] 检查是否已安装jdk...
2022-06-08 12:06:17 [Note] jdk已安装...
2022-06-08 12:06:17 [Note] 检查ZK安装路径是否存在:/app
2022-06-08 12:06:17 [Note] 安装路径已存在:/app
2022-06-08 12:06:17 [Note] 解压Zookeeper...
2022-06-08 12:06:18 [Note] 文件名更改为zookeeper...
2022-06-08 12:06:18 [Note] 检查ZK数据目录是否为空...
2022-06-08 12:06:18 [Note] 创建zookeeper数据目录和日志目录...
2022-06-08 12:06:18 [Note] 配置Zookeeper参数文件...
2022-06-08 12:06:18 [Note] 添加myid文件
2022-06-08 12:06:18 [Note] 配置Zookeeper systemd启动
2022-06-08 12:06:18 [Note] 重载unit配置文件
2022-06-08 12:06:18 [Note] 使用systemctl命令启动zookeeper
2022-06-08 12:06:19 [Note] 安装完成,Zookeeper已启动... 可使用 systemctl status zookeeper.service 进行查看状态
2022-06-08 12:06:19 [Note] 将zookeeper服务加入开机启动项
Created symlink from /etc/systemd/system/default.target.wants/zookeeper.service to /usr/lib/systemd/system/zookeeper.service.
2022-06-08 12:06:19 [Note] Zookeeper安装完成
```
#### 2.1.3 选装集群版zookeeper
需要有3个节点,需要修改对应的参数
```shell
# 节点1执行
./install_zookeeper.sh cluster 1
# 节点2执行
./install_zookeeper.sh cluster 2
# 节点3执行
./install_zookeeper.sh cluster 3
```
查看集群leader: xxx/zookeeper/bin/zkServer.sh status
## 2.2 CK安装
脚本信息:
```shell
```
#### 2.2.1 需要根据需求修改的参数
```shell
# 集群名称
CLICKHOUSE_CLUSTER_NAME="yqtest"
# 数据存放路径
CLICKHOUSE_DATA_DIR=/app/clickhouse
CLICKHOUSE_LOG_DIR=/app/clickhouse_log
# 集群分片节点
CLICKHOUSE_SHARE_IPS="192.168.66.161,192.168.66.162,192.168.66.163"
# 默认用户 default 的密码,若设置为 '' ,则表示不设置密码
CLICKHOUSE_DEFAULT_USER_PASSWORD='123456'
# CK 常用的两个端口配置
CLICKHOUSE_HTTP_PORT=8123
CLICKHOUSE_TCP_PORT=9000
# 以下端口一般不用更改
CLICKHOUSE_MYSQL_PORT=9004
CLICKHOUSE_POSTGRESQL_PORT=9005
CLICKHOUSE_INTERSERVER_HTTP_PORT=9009
CLICKHOUSE_PROMETHEUS_PORT=9363
# 副本数,默认1,也就是说没有高可用
REPLICA_NUMS=1
# ZK 的配置信息
ZOOKEEPER_IPS="192.168.66.161,192.168.66.162,192.168.66.163"
ZOOKEEPER_PORT=2181
# query_log 与 query_thread_log 存留日期
LOG_RETENTION_DAYS=15
# 使用内存,默认获取服务器全量的
CK_MEMORY_ALLLOW_GB=`free -g|grep Mem|awk '{print $2}'`
# 使用CPU核数,默认获取服务器全量的
CK_CPU_CORES=`cat /proc/cpuinfo| grep "cpu cores"| uniq|awk '{print $4}'`
```
##### 2.2.1.1 单机版本
```shell
CLICKHOUSE_SHARE_IPS="192.168.66.161"
REPLICA_NUMS=1
```
##### 2.2.1.2 单分片多副本
```shell
CLICKHOUSE_SHARE_IPS="192.168.66.161,192.168.66.162"
# 设置为2副本(这边默认定义认为CK一个replica为一个副本)
REPLICA_NUMS=2
```
将会配置为如下:
```shell
# 单分片2副本
192.168.60.161
9000
default
123456
192.168.60.162
9000
default
123456
```
##### 2.2.1.3 多分片多副本
```shell
CLICKHOUSE_SHARE_IPS="192.168.66.161,192.168.66.162,192.168.66.163,192.168.66.164"
# 设置为2副本(这边默认定义认为CK一个replica为一个副本)
REPLICA_NUMS=2
```
> 根据配置IP数与配置副本数计算分片数,当前为 4/2=2 分片,使用分片下一个IP作为副本地址
将会配置为如下:
```SHELL
# 2分片2副本
192.168.60.161
9000
default
123456
192.168.60.162
9000
default
123456
192.168.60.163
9000
default
123456
192.168.60.164
9000
default
123456
```
#### 2.2.2 执行安装CK
脚本参数修改完成后,在各服务器上执行如下语句,假设当前有3台服务器,要安装成3分片集群
```shell
# 服务器1
cd /opt/Deploy_ClickHouse/
./install_clickhouse.sh install
# 服务器2
cd /opt/Deploy_ClickHouse/
./install_clickhouse.sh install
# 服务器3
cd /opt/Deploy_ClickHouse/
./install_clickhouse.sh install
```
#### 2.2.3 安装验证
```shell
# 任意一台登陆
clickhouse-client --password -m
Password for user (default):
# yqtest 是自定义的集群名称
test03 :) create database yq01 on cluster yqtest;
CREATE DATABASE yq01 ON CLUSTER yqtest
Query id: e3b14489-85e9-4b67-a0a6-ad93e49d85ca
┌─host───────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ 192.168.66.162 │ 9000 │ 0 │ │ 2 │ 0 │
│ 192.168.66.161 │ 9000 │ 0 │ │ 1 │ 0 │
│ 192.168.66.163 │ 9000 │ 0 │ │ 0 │ 0 │
└────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
3 rows in set. Elapsed: 0.285 sec.
test03 :) show databases;
SHOW DATABASES
Query id: 3ebd2967-abe6-44ad-90e1-06c0d0c86b11
┌─name────┐
│ default │
│ system │
│ yq01 │
└─────────┘
4 rows in set. Elapsed: 0.008 sec.
```
## 2.3 安装异常处理
### 2.3.1 停止并删除zookpeer
```shell
systemctl stop zookeeper
rm -f /lib/systemd/system/zookeeper.service
# 修改为实际数据路径
rm -rf /app/zookeeper/data
```
### 2.3.2 卸载删除CK信息
```shell
cd /opt/Deploy_ClickHouse/
./install_clickhouse.sh uninstall
```