从0到1搭建clickhouse集群

1、安装前准备

1.1安装paralledls Desktop

链接: https://pan.baidu.com/s/1qpMz0POr1f1JJXSjoe9eUg  密码: nqie

也可以自己下载破解版。

1.2下载centos

2.安装虚拟机

2.1安装master虚拟机

1)打开pd,选择安装Windows或其他操作系统,然后选择继续

2)选择系统镜像

一般会自动找到之前下载的镜像,点击继续

若为找到,点击手动选择,手动导入镜像

 3)设置用户名密码

4)名称和位置

5)虚拟机配置

这里我使用的默认配置,可以点击配置设置自己想要的,然后点击继续

 6)启动centos

选择第一个,然后等待即可

 7)然后输入密码进入,设置语言

选择汉语,点击前进

选择汉语,点击前进

8)隐私

选择打开,点击前进

9)其他设置

我都跳过了 

 

2.2虚拟机安装clickhouse

1)打开终端,系统左上角applications---system tools---terminal

 2)终端执行如下命令

详细见安装部署 | ClickHouse文档

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64

sudo yum install clickhouse-server clickhouse-client

3)启动服务并链接

sudo /etc/init.d/clickhouse-server start

clickhouse-client

此时在单个centos虚拟机上你已经可以正常使用clickhouse

2.3安装多个虚拟机

再次打开parallels Desktop,点击+号

 将其他虚拟机的名字依次命名为node1,node2

3、搭建前准备

3.1取消打开文件数限制与修改SELINUX

1)关闭防火墙

systemctl stop firewalld

2)取消打开文件数限制

clickhouse非常消耗内存,且把数据存储在本地磁盘。首先使用如下指令查看当前资源限制的设置,主要修改open files和max user processes

ulimit -a

 第一步:修改limits.conf文件

sudo vim /etc/security/limits.conf

文件中添加,注意*号后面的空格

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

nofile表示文件数,nproc表示进程数,soft的值要小于等于hard的值

 第二步:修改limits.d/20-nproc.conf文件

若limits.d目录下不存在该文件,则手动创建即可。修改此文件是因为在某些时候20-nproc.conf文件的值会覆盖limits.conf里的值。

sudo vim /etc/security/limits.d/20-nproc.conf

输入如下命令

* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072

如图:

 3)退出当前用户,再次进入,设置生效

4)取消SELINUX 

selinux为了系统安全设置的,但很多时候用着很麻烦。

sudo vim /etc/selinux/config

把SELINUX的值改为disabled

 重启生效

重启之后终端输入getenforce,输出disabled!!!!若想临时把SELINUX的值设为disabled状态,可以在终端使用setenforce 0命令(该命令只能用于SELINUX的值为enforce时,若使用setenforce 1无效)。

3.2设置hosts文件解析

     这是因为clickhouse同步表数据的时候会去zookeeper里面查询,zookeeper里面存储的是host域名,不是IP,不解析会导致可以同步但无法同步表数据。

    查看主机名

hostname

//三台机器分别为
centos-linux-master.shared
centos-linux-node1.shared
centos-linux-node2.shared

    打开vim /etc/hosts,输入

10.211.55.3 centos-linux-master.shared
10.211.55.4 centos-linux-node1.shared
10.211.55.5 centos-linux-node2.shared

上述操作在master、node1、node2三台机器上都要进行!!!

4、搭建zookeeper集群

在master、node1、node2三台虚拟机上搭建zookeeper集群 

master ip===10.211.55.3

node1 ip===10.211.55.4

node2 ip===10.211.55.5

1) 安装Java环境

zookeeper集群的运行需要Java环境,需要先安装jdk

sudo yum install java -y

2)下载zookeeper并解压

wget https://apache.claz.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz


tar zxvf apache-zookeeper-3.6.3-bin.tar.gz

3)配置zookeeper

根目录下创建zookeeper文件夹,并在zookeeper文件下创建data和logs文件夹,分别保存快照和日志

cd /
sudo mkdir zookeeper
cd zookeeper
sudo mkdir data
sudo mkdir logs

打开apache-zookeeper-3.6.3-bin/conf目录,拷贝并重命名zoo_sample.cfg

cd apache-zookeeper-3.6.3-bin/conf

cp zoo_sample.cfg zoo.cfg

 配置zoo.cfg文件

sudo vim zoo.cfg

末尾添加如下内容:
server.0=10.211.55.3:2888:3888
server.1=10.211.55.4:2888:3888
server.2=10.211.55.5:2888:3888

dataDir和dataLogDir设为刚刚创建的路径,不要放在tmp目录下,/tmp目录重启会自动清除 

4)创建myid文件

 在上个文件dataDir目录下创建myid文件,即在/zookeeper/data目录下创建myid文件

cd /zookeeper/data
touch myid
vim myid

然后写入数字0。此处的0对应zoo.cfg文件内server后的数字,你的机器IP是哪个,就使用哪个对应的数字。

此时master对应数字0

node1对应数字1

node2对应数字2

5)配置环境变量

此步骤的目的是为了能够在任意目录启动zookeeper集群,若不配置,每次都需要进入zookeeper安装目录下的bin目录下启动zookeeper

首先进入/etc/profile目录,添加配置信息

pwd查看apache-zookeeper-3.6.3-bin的具体路径
export ZK_HOME=zookeeper安装目录
export PATH=$PATH:$ZK_HOME/bin

使环境变量生效

source /etc/profile

上述步骤在master、node1、node2三台虚拟机上都要进行

6)启动zookeeper集群

zookeeper集群操作命令:

//启动
zkServer.sh start

//关闭
zkServer.sh stop

//重启
zkServer.sh restart

//查看集群节点状态
zkServer.sh status

不配置时启动:

cd ~/apache-zookeeper-3.6.3-bin/bin
sudo ./zkServer.sh start

 查看集群状态

 ./zkServer.sh status

遇到问题:若查看集群无法正常使用,则可能是防火墙问题,关闭即可

systemctl stop firewalld

Zookeep启动正常,却报错:Error contacting service. It is probably not running._Learning by doing-CSDN博客

配置时在任意目录都可以启动,不需要到zookeeper的bin目录下

sudo -I//切换为root用户
zkServer.sh start

5、clickhouse集群搭建 

    clickhouse中的核心配置文件有:

  • config.xml:端口配置、本地机器名配置、内存设置等
  • metrika.xml:集群配置,zk配置、分片配置
  • users.xml:权限,配额配置

5.1修改config.xml文件

    可以实现远程访问 

  vim /etc/clickhouse-server/config.xml

将该行前后的<!--与-->注释掉 ,这样clickhouse才能让除本机之外的机器访问。

5.2和5.3暂时设置与否无所谓,我跳过了。

5.2内存限制设置

打开/etc/clickhouse-server/users.xml文件

  vim /etc/clickhouse-server/users.xml

 5.3数据目录

      打开/etc/clickhouse-server/config.xml,在/home目录下创建clickhouse文件夹

<path>/var/lib/clickhouse/</path>

修改为
<path>/home/clickhouse/</path>

5.4集群部署

         副本的目的在于保障数据的高可用性,即使一台clickhouse节点宕机,也可以从其他服务器获得相同的数据。

         副本可以提高数据的可用性,降低丢失风险,但每台服务器必须容纳全部数据,数据的横向扩容没有解决。分片用来解决数据水平切分的问题,通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上,然后通过Distributed表引擎把数据拼接起来一起使用。同一分片内的数据可以有多个副本。

        Distributed表引擎本身不存储数据,类似mysql中的mycat,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。

        clickhouse集群是表级别的,实际使用中,大部分做了高可用,但没有使用分片,避免降低查询性能以及操作集群的复杂性。

谨记:如果你用的新版的clickhouse,则使用的是remote_servers而不是clickhouse-remote-servers,老版的则是clickhouse_remote_servers。如果最后你配置好后找不到集群,可能是这个问题;

使用zookeeper而不是zookeeper-servers,否则可能会报no hosts passed to zookeeper constructor.(bad arguments) 

我因为这个问题耽误了一下午,修改各种配置都不对!!

1)在/etc/clickhouse-server/config.d目录下创建metrika.xml,虚拟机master下的内容如下

<yandex>
    <remote_servers>
        <clustersName>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>centos-linux-master.shared</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <replica>
                    <internal_replication>true</internal_replication>
                    <host>centos-linux-node1.shared</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>centos-linux-node2.shared</host>
                    <port>9000</port>
                </replica>
            </shard>
        </clustersName>
    </remote_servers>

    <zookeeper>
        <node>
            <host>centos-linux-master.shared</host>
            <port>2181</port>
        </node>
        <node>
            <host>centos-linux-node1.shared</host>
            <port>2181</port>
        </node>
        <node>
            <host>centos-linux-node2.shared</host>
            <port>2181</port>
        </node>
    </zookeeper>

<macros>
  <shard>01</shard> 
  <replica> 10.211.55.3</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>lz4</method>
</case>
</clickhouse_compression>

</yandex>

然后将metrika.xml所属用户更改为clickhouse。

chown clickhouse:clickhouse metrika.xml

2)拷贝到另外两个机器上,同时修改<macros></macros>部分内容

scp  本虚拟机路径/文件名  目的虚拟机:目的路径

然后输入密码

scp /etc/clickhouse-server/metrika.xml centos-linux-node1.shared:/etc/clickhouse-server/

 

 此时,metrika.xml文件复制成功。

对于node1的metrika.xml文件值需要修改macros部分,如下

<macros>
        <shard>02</shard>
        <replica>centos-linux-node1.shared</replica>
    </macros>

对于node2的metrika.xml文件也只需要macros部分,如下:

<macros>
        <shard>03</shard>
        <replica>centos-linux-node2.shared</replica>
    </macros>

3)修改config.xml文件

在虚拟机masrer、node1、node2的/etc/clickhouse-server目录下打开config.xml文件,添加如下内容:

目的在于指明metrika.xml文件的路径,若不指定,则默认从/etc/metrika.xml处加载

<zookeeper incl="zookeeper" optional="true" />
<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>

4)启动集群      

service clickhouse-server start   //开启服务
service clickhouse-server stop    //停止
service clickhouse-server restart  //重启
service clickhouse-server status //查看状态

  首先开启zookeeper三个虚拟机分别开启zookeeper,然后启动clickhouse-server,任意一台虚拟机开启客户端


zkServer.sh start    //开启zookeeper
service clickhouse-server start   //开启clickhouse

//上面的需要在3台虚拟机上执行,clickhouse-client只需要在一台虚拟机上执行
clickhouse-client -m

 然后查询集群

///直接使用这个输出的参数太多
select * from system.cluster;

//只查询特定列

select cluster,shard_num,shard_weight,replica_num,host_name,host_address,port,is_local,user from system.clusters;

结果如下:

6、遇见问题

问题1:执行sudo yum install yum-utils时出现如下错误

another app is currently holding the yum lock;waiting for it to exit

解决办法:执行sudo rm -r /var/run/yum.pid,然后重新执行sudo yum install yum-utils即可

下一篇https://blog.csdn.net/qq_38196982/article/details/119933154

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值