CentOS8 安装 ClickHouse 集群

一、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

https://www.jb51.net/article/275316.htm

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值