暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CentOS8 安装 ClickHouse 集群

巴韭特锁螺丝 2024-10-04
74

一、ClickHouse介绍

1.什么是 ClickHouse
ClickHouse 是俄罗斯的 Yandex 于2016年开源的一个用于联机分析(OLAP:Online Analytical Processing)的列式数据库管理系统(DBMS:Database Managemment Sytem),简称CK,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告。
ClickHouse 是一个完全的列式数据库管理系统。ClickHouse 的全称是 Click Stream,Data WareHous,简称 ClickHouse。允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重启服务器,支持线性扩展,简单方便,高可靠性,容错。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard 分片+replication 副本这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。

2.什么是 OLAP
联机分析处理 OLAP 是一种软件技术,它使分析人员能够迅速、一致、交互的从各个方面观察信息,以达到深入理解数据的目的。它具有 FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。其中F是快速性(Fast),指系统能在数秒内对用户的多数分析要求做出反应;A是可分析性(Analysis),指用户无需编程就可以定义新的专门计算,将其作为分析的一部分,并以用户所希望的方式给出报告;M是多维性(Multi—dimensional),指提供对数据分析的多维视图和分析;I是信息性(Information),指能及时获得信息,并且管理大容量信息。

二、ClickHouse 的优缺点

ClickHouse 的优点:

  • 为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理。

  • 数据压缩空间大,减少IO,处理单查询高吞吐量每台服务器每秒最多数十亿行。

  • 索引非B树结构,不需要满足最左原则,只要过滤条件在索引列中包含即可,即使在使用的数据不在索引中,由于各种并行处理机制 ClickHouse 全表扫描的速度也很快。

  • 写入速度非常快,50-200M/S,对于大量的数据更新非常使用。

ClickHouse 的缺点:

  • 不支持事务,不支持真正的删除/更新。

  • 不支持高并发,官方建议 qps 为100,可以通过修改配置文件增加连接数,但是要在服务器足够好的情况下。

  • 不支持二级索引。

  • 有限的 SQL 支持,join 实现与众不同。

  • 不支持窗口功能。

  • 元数据管理需要人工干预维护。

  • SQL 满足日常使用80%以上的语法,join 写法比较特殊,最新版已支持类似 SQL 的 join,但性能不好。

三、ClickHouse 引擎

ClickHouse 的建库语句:

CREATE DATABASE IF NOT EXISTS db_name [ENGINE = engine]

数据库引擎主要分为5种:

  • Ordinary:默认引擎,使用时无需在建库时刻意声明,在此数据库下的表可以使用任意的类型的表引擎。

  • Dictionary:字典引擎,此类数据库会自动为所有数据字典创建它们的数据表(加载配置文件中配置的字段表信息和数据)

  • Memory:内存引擎,用户存放临时数据,数据只会在内存中,不会涉及任何磁盘操作,当服务重启后数据会清空。

  • MySQL:MySQL引擎,会自动拉取远端 MySQL 中的数据,并在该库下创建 MySQL表引擎的数据表。

  • Lazy:日志引擎,在该数据库下只能创建 log 系列引擎的表。

四、单节点安装 ClickHouse

1.准备环境
ClickHouse 是通过向量化执行引擎来加速查询,向量化执行可以简单的看作一项消除程序中循环的优化,为了实现向量化需要利用 CPU 的 SIMD(Single Instruction Multiple Data)指令,通过单条指令可以实现操作多条数据。在现代计算机中是通过数据并行来提高性能,其原理就是在 CPU 寄存器层面实现数据的并行操作。ClickHouse 目前通过 SSE 4.2指令集实现向量化执行的。因此首先需要保证系统是支持 SSE 4.2指令集,可以执行如下命令检查是否支持 SSE 4.2,如果返回 SSE 4.2 supported 表示支持,则可以继续下面的安装。同时终端必须使用 UTF-8 编码。

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

同时最好再调整一下CentOS系统对打开文件数的限制,在/etc/security/limits.conf文件的末尾加入以下内容。

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

修改完之后,重新连接SSH工具,再次登录执行命令查看,输出的值是上面设置的则表示已生效。

ulimit -n

2.yum方式安装
使用如下命令安装,如果需要安装最新版,则把 stable 替换为 testing。

yum -y install yum-utils
rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
yum -y install clickhouse-server clickhouse-client

3.目录结构

  • /etc/clickhouse-server:服务端的配置文件目录,包括全局配置 config.xml 和用户配置 users.xml

  • /var/lib/clickhouse/:默认的数据存储目录,如果是生产环境可以将其修改到空间较大的磁盘挂载路径。可以用过修改 etc/clickhouse-server/config.xml 配置文件中< path > 、< tmp_path > 和 < user_files_path> 标签值来设置。

  • /var/log/clickhouse-server/:默认的日志保存目录。同样可以通过修改 etc/clickhouse-server/config.xml 配置文件中的 < log > 和 < errorlog >标签值来设置。

  • /etc/cron.d/clickhouse-server:clickhouse server 的一个定时配置,用于恢复因异常中断的 ClickHouse 服务进程。

  • ~/.clickhouse-client-history:client 执行的 sql 历史记录。

4.服务的启动和停止

    # 启动
    # 可以在/varlog/clickhouse-server/目录中查看日志
    systemctl start clickhouse-server
    # 或者基于指定的配置文件启动服务,使用此命令时注意权限。
    clickhouse-server --config-file=/etc/clickhouse-server/my_config.xml


    # 查看状态
    systemctl status clickhouse-server


    #重启
    systemctl restart clickhouse-server


    #关闭
    systemctl stop clickhouse-server


    5.进入命令行模式验证

      # --database  -d   登录的数据库
      # --help 查看帮助信息
      # --host -h 服务端地址,默认是localhost,如果修改config.xml中的listen_host值后可以使用此参数指定访问的ip
      # --multiline -m 支持SQL多行语句,而不是回车就执行
      # --multiquery -n 允许一次执行多条SQL语句
      # --password 登录的密码,默认为空
      # --port 服务端的TCP端口,默认为9000
      # --query -q 指定SQL语句
      # --time -t 打印每条SQL的执行时间
      # --user -u 登录的用户名,默认为default
      # --version -V 查看版本信息


      # 进入数据库命令行
      clickhouse-client


      # 执行一个简单的SQL,可以正常解析并执行。
      localhost :) SELECT 1;


      SELECT 1


      Query id: 9c15664b-9182-4bf9-81df-0d3c7284f1e9


      ┌─1─┐
      1
      └───┘


      1 rows in set. Elapsed: 0.031 sec.


      # 退出
      localhost :) q;
      Bye.


      五、搭建 ClickHouse 集群

      1.安装前准备
      系统:CentOS 8.2
      IP:10.0.0.60 主机名:ch1
      IP:10.0.0.61 主机名:ch2
      IP:10.0.0.62 主机名:ch3
      准备三台服务器,在三台服务器中安装部署 ClickHouse,关闭防火墙和SELINUX或者开放端口。集群的方式需要依赖 ZooKeeper 服务,因此先要保证 ZooKeeper 服务正常启动,剩余的安装方式和单节点差不多,只不过需要添加一个集群形式的配置文件。
      1.1下载zookeeper:

        官网地址:https://zookeeper.apache.org/releases.html

        1.2创建zookeeper存放目录并上传解压

          tar zxf apache-zookeeper-3.7.0-bin.tar.gz
          mv apache-zookeeper-3.7.0-bin.tar.gz /opt/zookeeper
          mkdir -p /opt/zookeeper/data

          1.3修改zookeeper配置信息

            cd /opt/zookeeper/conf
            cp zoo_sample.cfg zoo.cfg
            # 修改dataDair路径,根据自己主机IP,增加或更换server.1 2 3的IP。
            vim zoo.cfg
            dataDir=/opt/zookeeper/data
            server.1=10.0.0.60:2888:3888
            server.2=10.0.0.61:2888:3888
            server.3=10.0.0.62:2888:3888


            1.4在每台主机配置节点ID

              # 10.0.0.60执行
              echo 1 >/root/zookeeper/data/myid
              # 10.0.0.61执行
              echo 2 >/root/zookeeper/data/myid
              # 10.0.0.62执行
              echo 3 >/root/zookeeper/data/myid


              1.5启动zookeeper

                # 启动
                cd ../bin/
                ./zkServer.sh start
                # 查看状态
                ./zkServer.sh status
                # 停止
                ./zkServer.sh stop
                # 重启
                ./zkServer.sh restart
                # 验证
                ps -ef|grep zookeeper
                # 或者成功后可以随便选择一台节点尝试连接另一节点验证
                ./zkCli.sh -server 10.0.0.61:2181
                # 成功后显示
                [zk: 192.168.30.101(CONNECTING) 0]



                注:启动zookeeper需要有jdk环境。

                2.开放ClickHouse服务的IP和端口
                因为集群之间需要互相访问其他节点服务,需要开放clickhouse服务的IP和端口,在三台主机配置/etc/clickhouse-server/config.xml文件,
                取消< listen_host >标签注释。

                3.配置zookeeper字段

                  <zookeeper>
                  <node>
                  <host>10.0.0.60</host>
                  <port>2181</port>
                  </node>
                  <node>
                  <host>10.0.0.61</host>
                  <port>2181</port>
                  </node>
                  <node>
                  <host>10.0.0.62</host>
                  <port>2181</port>
                  </node>
                  </zookeeper>


                  4.配置remote_server字段
                  删除原本的test内容,添加:

                    <remote_servers>
                    <!-- spi_shards_replicas是集群名字,自己命名就可以,建库建表需要用到-->
                    <spi_shards_replicas>
                    <!-- 集群第一个分片 -->
                    <shard>
                    <!-- 权重值 -->
                    <weight>1</weight>
                    <internal_replication>true</internal_replication>
                    <replica>
                    <host>10.0.0.60</host>
                    <port>9000</port>
                    </replica>
                    <replica>
                    <host>10.0.0.61</host>
                    <port>9000</port>
                    </replica>
                    </shard>
                    <!-- 集群第二个分片 -->
                    <shard>
                    <weight>1</weight>
                    <internal_replication>true</internal_replication>
                    <replica>
                    <host>10.0.0.61</host>
                    <port>9100</port>
                    </replica>
                    <replica>
                    <host>10.0.0.62</host>
                    <port>9000</port>
                    </replica>
                    </shard>
                    <!-- 集群第三个分片 -->
                    <shard>
                    <weight>1</weight>
                    <internal_replication>true</internal_replication>
                    <replica>
                    <host>10.0.0.62</host>
                    <port>9100</port>
                    </replica>
                    <replica>
                    <host>10.0.0.60</host>
                    <port>9100</port>
                    </replica>
                    </shard>
                    </spi_shards_replicas>
                    </remote_servers>


                    5.重启clickhouse,查看集群是否创建成功

                    systemctl restart clickhouse.server
                    clickhouse-client
                    SELECT * FROM system.clusters

                      版权声明:本文内容来自CSDN:weixin_46106069,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
                      本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
                      原文链接:https://blog.csdn.net/weixin_46106069/article/details/124664148
                      如有涉及到侵权,请联系,将立即予以删除处理。
                      在此特别鸣谢原作者的创作。
                      此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。

                      文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论