技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页clickhouse>正文
Linux下ClickHouse集群安装部署
2023年05月06日 clickhouse 暂无评论 ⁄ 被围观 4,090次+

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

官方网站:https://clickhouse.com/

官方文档:https://clickhouse.com/docs/zh

下载地址:https://packages.clickhouse.com/rpm/stable/ #稳定版本

或者:https://packages.clickhouse.com/rpm/lts/ #长期支持版

准备篇

操作系统:CentOS-7.x

3台服务器:192.168.21.100,192.168.21.101,192.168.21.128

1、关闭selinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

setenforce 0

2、关闭防火墙

ClickHouse提供两个网络端口: TCP 默认9000,HTTP 默认8123,建议在内网环境下部署ClickHouse,关闭服务器防火墙。

CentOS-7.x默认使用的是firewall作为防火墙,关闭

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

systemctl mask firewalld

systemctl stop firewalld

yum remove firewalld

3、配置系统打开文件数限制

vi  /etc/security/limits.conf #文件句柄数量的配置

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

:wq! #保存退出

vi /etc/security/limits.d/20-nproc.conf

* soft nofile 65536

* hard nofile 65536

* soft nproc 131072

* hard nproc 131072

:wq! #保存退出

4、安装jdk

zookeeper依赖Java,需要安装java环境,我们使用Java 1.8版本

Linux系统下安装Java JDK:https://www.osyunwei.com/archives/12872.html

5、安装配置zookeeper

clickhouse集群部署依赖zookeeper,需要先安装部署,并且优先于clickhouse启动

Linux系统下部署ZooKeeper集群:https://www.osyunwei.com/archives/13465.html

6、添加hosts解析

vi /etc/hosts #编辑配置文件

192.168.21.100 node1

192.168.21.101 node2

192.168.21.128 node3

:wq! #保存退出

概念篇

ClickHouse集群相关概念

1、副本:集群中的副本是防止数据丢失,增加数据冗余以保证数据的安全,或者实现读写分离。

2、分片:集群中的分片是实现数据的水平切分,单张数据表可能会遇到瓶颈。

如下图,假设ClickHouse的N个节点组成了一个集群,在集群的各个节点上,都有一张结构相同的数据表Y。如果它们的数据完全相同,则它们互为副本(红色部分)。如果N1的Y和N2的Y中的数据完全不同,则N1和N2互为分片(绿色部分)。

分片和集群的使用方法。从数据表的初始形态1分片、0副本开始介绍;接着介绍如何为它添加副本,从而形成1分片、1副本的状态;再介绍如何引入分片,将其转换为多分片、1副本的形态(多副本的形态以此类推),如图下图所示。

3、多分片多副本的情况下,最小需要4 台服务器,实际上如果资源紧张2台机器、3台机器都可以搭建一个 ClickHouse 多分片多副本的集群( 1 台机器只开一个实例)。

4、使用3节点服务器搭建ClickHouse集群,在同一个节点放两个分片的数据,部署为环形架构,第一个分片在第一和第二节点上,第二个分片在第二和第三节点上,第三个分片在第三和第一节点上。

5、ClickHouse 支持每个分片定义一个默认库,在配置文件中对应 default_database,从而使得两个不同的分片在同一节点上,实际是在两个不同的库中,这样就可以实现同一个节点放两个分片的数据。

安装篇

使用3台服务器,部署1分片3副本集群,并验证测试。

1、安装ClickHouse

1.1、安装ClickHouse所需的依赖包

yum install -y libtool *unixODBC*

1.2、分别下载client,static,static-dbg,keeper-dbg和server五个安装包,五个包的版本要一致,这里以23.3.2.37版本为例,把下载的五个包放到/usr/local/src 目录下。

clickhouse-client-23.3.2.37.x86_64.rpm

clickhouse-common-static-23.3.2.37.x86_64.rpm

clickhouse-common-static-dbg-23.3.2.37.x86_64.rpm

clickhouse-server-23.3.2.37.x86_64.rpm

clickhouse-keeper-dbg-23.3.2.37.x86_64.rpm

rpm -ivh *.rpm #安装过程中会提示输入密码,直接回车不设置密码,密码后面我们在配置文件中设置。

1.3、目录说明

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

/etc/clickhouse-client  #客户端配置,包括conf.d文件夹和config.xml文件

/var/lib/clickhouse  #默认的数据存储目录,建议修改路径到大容量磁盘

/var/log/clickhouse-server  #默认保存日志的目录,建议修改路径到大容量磁盘

1.4、新建存储目录

mkdir -p /data/server/clickhouse #数据存储目录

mkdir -p /data/server/clickhouse/log #日志存放目录

修改目录权限:

chown clickhouse:clickhouse /data/server/clickhouse -R

chown clickhouse:clickhouse /data/server/clickhouse/log -R

chmod 755 /data/server/clickhouse -R

chmod 755 /data/server/clickhouse/log -R

1.5、设置数据库密码,默认用户名是:default

cp /etc/clickhouse-server/users.xml /etc/clickhouse-server/users.xml.bak

vi /etc/clickhouse-server/users.xml

<password>123456</password>

:wq! #保存退出

2、修改配置文件

修改3台服务器ClickHouse配置文件 /etc/clickhouse-server/config.xml

cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config.xml.bak  #备份

2.1、修改全局配置信息

vi /etc/clickhouse-server/config.xml

<timezone>Asia/Shanghai</timezone> #修改时区

<listen_host>::</listen_host> #开启外部访问

<path>/data/server/clickhouse/</path> #修改数据存放路径,默认是<path>/var/lib/clickhouse</path>

<level>none</level> #不记录日志

<!-- <log>/data/server/clickhouse/log/clickhouse-server.log</log> --> #不记录日志

<!-- <errorlog>/data/server/clickhouse/log/clickhouse-server.err.log</errorlog> --> #不记录日志

<max_open_files>1048576</max_open_files> #文件句柄数量的配置

<http_port>8123</http_port> #http默认端口

<tcp_port>9000</tcp_port> #tcp默认端口

<max_concurrent_queries>4096</max_concurrent_queries>  #限制的是活跃查询的数量,是对正在执行或排队等待执行的查询进行限制

<max_connections>4096</max_connections> #限制的是客户端连接的数量,是对同时与 ClickHouse 建立的连接进行限制

:wq! #保存退出

2.2、在 <remote_servers> 标签内配置副本节点信息

<perftest_1shards_3replicas>   #分片名称,自定义

<shard>

<internal_replication>true</internal_replication>  #只写一个副本,其他副本通过zookeeper进行同步,保证数据一致性

<replica>

<host>192.168.21.100</host>

<port>9000</port>

</replica>

<replica>

<host>192.168.21.101</host>

<port>9000</port>

</replica>

<replica>

<host>192.168.21.128</host>

<port>9000</port>

</replica>

</shard>

</perftest_1shards_3replicas>

2.3、添加zookeeper配置,取消注释修改节点信息

<zookeeper>

<node>

<host>192.168.21.100</host>

<port>2181</port>

</node>

<node>

<host>192.168.21.101</host>

<port>2181</port>

</node>

<node>

<host>192.168.21.128</host>

<port>2181</port>

</node>

</zookeeper>

2.4、添加macros配置,取消注释修改节点信息

<macros>

<shard>01</shard>   #分片号3个节点都一样

<replica>192.168.21.100</replica>  #副本名称,3个节点不能相同,填写各自的ip地址

</macros>

2.5、启动clickhouse

systemctl start clickhouse-server

systemctl status clickhouse-server

systemctl stop clickhouse-server

systemctl restart clickhouse-server

systemctl enable clickhouse-server

2.6、进入数据库控制台,查看集群信息

clickhouse-client --password

clickhouse-client --host 192.168.21.100 --port=9000

clickhouse-client --host 192.168.21.101 --port=9000

clickhouse-client --host 192.168.21.128 --port=9000

select * from system.clusters;

SELECT * FROM system.zookeeper WHERE path = '/clickhouse';

select * from system.macros;

3、创建数据库

3.1、在其中一个节点上操作,我这里是在192.168.21.100上执行

CREATE DATABASE db_test_01 ON CLUSTER perftest_1shards_3replicas;

3.2、在其他节点查看数据库信息

show databases;

3个节点都有了db_test数据库

4、创建表并写入数据

4.1、在其中一个节点上操作,我这里是在192.168.21.100上执行

CREATE TABLE db_test_01.tb_test_01 ON CLUSTER 'perftest_1shards_3replicas'

(

`id` Int64,

`p` Int16

)

ENGINE = ReplicatedMergeTree( '/clickhouse/tables/{shard}/tb_test_01', '{replica}')

PARTITION BY p

ORDER BY id;

4.2、写入数据,逐条进行操作

INSERT INTO db_test_01.tb_test_01 VALUES(111,111);

INSERT INTO db_test_01.tb_test_01 VALUES(222,222);

INSERT INTO db_test_01.tb_test_01 VALUES(333,333);

INSERT INTO db_test_01.tb_test_01 VALUES(444,444);

4.3、在其他节点查看数据

select * from db_test_01.tb_test_01;

数据已经同步

#注意

zookeeper是用hostname的名称去进行访问的,多网卡多ip,请设置/etc/hosts对应的IP和主机映射信息,

如果主机有多个ip地址,hostname要和zookeeper中设置的ip地址对应,否则数据无法同步。

5、验证集群高可用

5.1、关闭其中一个节点,模式节点宕机,在另外的节点上写入数据

5.2、重新启动节点,查看数据表,发现数据已经同步过来,验证成功

5.3、删除数据库

drop database db_test_01 on cluster perftest_1shards_3replicas;

至此,Linux下ClickHouse集群安装部署完成。

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2024 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3