# clickhouse集群部署

环境准备

|    主机名    |        IP         |
| :----------: | :---------------: |
| clickhouse-1 | 192.168.110.81/24 |
| clickhouse-2 | 192.168.110.82/24 |
| clickhouse-3 | 192.168.110.83/24 |

设置主机名，修改hosts文件

```
cat  /etc/hosts

192.168.110.81  clickhouse-1
192.168.110.82  clickhouse-2
192.168.110.83  clickhouse-3
```

![image-20230516115656106](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230516115656106.png)

关闭防火墙

```
systemctl stop firewalld    
//停止firewalld防火墙
systemctl disable firewalld   
//disable防火墙，让它开机不自启
systemctl status firewalld    
//查看firewalld是否已经关闭（active（running））显示防火墙处于激活状态（inactive（dead））防火墙进程处于未激活状态
```

关闭seLinux防火墙

```
vi /etc/sysconfig/selinux
SELINUX=disabled  
//修改成disabled

```



安装好java依赖（zookeeper需要）

![image-20230516115508317](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230516115508317.png)

## 安装zookeeper集群

去官网下载好安装包（带bin是编译好的）zookeeper-3.7.1-bin.tar.gz

```
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz --no-check-certificateapache-
```

解压

```
tar -xvf apache-zookeeper-3.7.1-bin.tar.gz 
```

添加zookeeper环境变量

```
vim /etc/profile
-------------------------------------------------
#zookeeper
export ZK_HOME=/root/apache-zookeeper-3.7.1-bin
export PATH=$PATH:$ZK_HOME/bin
--------------------------------------------------
#使环境变量生效
source /etc/profile
```

修改zoo.cfg文件参数

```
cd /root/apache-zookeeper-3.7.1-bin/conf/
vim zoo.cfg 
----------------------------------------------
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/apache-zookeeper-3.7.1-bin/tmp
clientPort=2181
server.1=192.168.110.81:2888:3888  
server.2=192.168.110.82:2888:3888
server.3=192.168.110.83:2888:3888
----------------------------------------------
```

```
注：
dataDir=/SQG_L/zookeeper-3.4.5/tmp是缓存数据路径
2888为组成zookeeper服务器之间的通信端口，3888为用来选举leader的端口
三台虚拟机都需操作
```

新建zookeeper缓存数据目录

```
mkdir tmp （在zookeeper文件目录下新建tmp）
```

在tmp目录下创建myid文件

```
touch myid   （新建myid文件）
#节点1
echo 1 > myid  （文件写入数字1，也可以vim进去写入1保存退出）
#节点2
echo 2 > myid
#节点3
echo 3 > myid
```

## 测试zookeeper集群

启动zookeeper集群

```
[root@node1 bin]# ./zkServer.sh start   （在/root/apache-zookeeper-3.7.1-binbin目录下操作）
```

![image-20230516144537283](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230516144537283.png)

查看集群节点状态

```
[root@node1 bin]# ./zkServer.sh status
```

![image-20230516144617381](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230516144617381.png)

## ClickHouse集群安装

首先官网下载好clickhouse-client-21.10.6.2-2.noarch.rpm，clickhouse-common-static-21.10.6.2-2.x86_64.rpm，clickhouse-server-21.10.6.2-2.noarch.rpm安装包

```
wget https://packages.clickhouse.com/rpm/stable/clickhouse-common-static-21.10.6.2-2.x86_64.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-client-21.10.6.2-2.noarch.rpm
wget https://packages.clickhouse.com/rpm/stable/clickhouse-server-21.10.6.2-2.noarch.rpm
```

设置rpm包

```
rpm -ivh clickhouse-client-21.10.6.2-2.noarch.rpm
rpm -ivh clickhouse-common-static-21.10.6.2-2.x86_64.rpm
rpm -ivh clickhouse-server-21.10.6.2-2.noarch.rpm
```

修改配置文件config.xml

```
vim /etc/clickhouse-server/config.xml

<listen_host>::1</listen_host>
<listen_host>clickhouse-1</listen_host>
```

![image-20230516145407747](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230516145407747.png)

创建集群配置文件metrika.xml

```
cd /etc/clickhouse-server/config.d
vim metrika.xml
```

```xml
<yandex>
    <remote_servers>
       <clickhouse_cluster_3shards_1replicas>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>clickhouse-1</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>clickhouse-2</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>clickhouse-3</host>
                    <port>9000</port>
                </replica>
            </shard>
        </clickhouse_cluster_3shards_1replicas>
    </remote_servers>
    
  <zookeeper>
    <node index="1">
        <host>clickhouse-1</host>
        <port>2181</port>
    </node>
    <node index="2">
        <host>clickhouse-2</host>
        <port>2181</port>
    </node>
    <node index="3">
        <host>clickhouse-3</host>
        <port>2181</port>
    </node>
  </zookeeper>

    <macros>
      <shard>01</shard>
      <replica>clickhouse-1</replica>
    </macros>

    <networks>
      <ip>::/0</ip>
    </networks>

  <clickhouse_compression>
    <case>
      <min_part_size>10000000000</min_part_size>
      <min_part_size_ratio>0.01</min_part_size_ratio>
      <method>1z4</method>
    </case>
  </clickhouse_compression>
</yandex>

```

启动集群

```
service clickhouse-server start
service clickhouse-server status
或
systemctl start  clickhouse-server.service
systemctl status clickhouse-server.service
开机自启
systemctl enable clickhouse-server.service
```

![image-20230516152854836](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230516152854836.png)

集群验证

```
连接数据库
clickhouse-client
查询集群信息
select cluster ,host_name,host_address,port from system.clusters;
```

























