- 下载clickhouse相关安装文件:
下载地址: https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/
- Linux执行安装指令
rpm -ivh +包名
注意:先执行安装common-static。因为server和client安装时需要依赖common中的文件。
- 客户端与服务端启动
服务端启动sudo /etc/init.d/clickhouse-server start
注意事项:如果linux报: init script is already running;
如果此时客户端连接服务端时:
ClickHouse client version 20.11.3.3 (official build).
Connecting to localhost:9000 as user default.
Code: 210. DB::NetException: Connection refused (localhost:9000)
说明服务端未启动成功。则需要执行指令: systemctl start clickhouse-server.service
并修改etc/clickhouse-server/config.xml,打开注释<listen_host>::</listen_host>
再执行服务端重启systemctl restart clickhouse-server.service。在尝试客户端连接服务端。
sudo /etc/init.d/clickhouse-server stop
sudo /etc/init.d/clickhouse-server restart
sudo /etc/init.d/clickhouse-server start
ps -aux |grep clickhouse
进入clickhouse-client
:
clickhouse-client --host 172.xxx.xxx.xxx --port 9000
clickhouse-client -m
select * from system.clusters;
select 1;
exit;
ALTER TABLE ontime_local DELETE WHERE Year='2003';
clickHouse日志查看
clickHouse-server默认日志路径:/var/log/clickhouse-server
如果你在 clickhouse-server 没有找到任何有用的信息或根本没有任何日志,您可以使用命令查看 system.d :
$ sudo journalctl -u clickhouse-server
.显示尾部的最新10行日志
journalctl -n
主要原因是:启动 clickhouse 默认用户是 clickhouse 但是当前用户是root
解决方案:
第一种:创建一个用户组为 clickhouse 使用clickhouse用启动
第二种(推荐):
cd /var/lib/
chown -R root:root clickhouse
chmod 777 /etc/metrika.xml
指定配置文件路径
clickhouse-server --config-file=/etc/clickhouse-server/config.xml
后台启动
nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml &
nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml 1>~/logs/clickhouse_std.log 2>~/logs/clickhouse_err.log &
netstat -anp | grep 8123
2.netstat -nultp(此处不用加端口号)
该命令是查看当前所有已经使用的端口情况
1.集群节点信息
172.xxx.xxx.xxx ch201
172.xxx.xxx.xxx ch202
172.xxx.xxx.xxx ch203
2. 搭建一个zookeeper集群
在这三个节点搭建一个zookeeper集群(如果搭建可以直接忽略这一步),先在一个节点上根据以下配置
2.1. 下载 zookeeper-3.4.12.tar.gz 安装包,放置到上面三台服务器一个目录下(/mpjava/)
2.2. 进入到/mpjava/目录下,解压tar包,tar -zxvf zookeeper-3.4.12.tar.gz
2.3. 进入zookeeper的conf目录,拷贝zoo_sample.cfg为zoo.cfg,cp zoo_sample.cfg zoo.cfg 修改zoo.cfg文件:
tickTime=2000
initLimit=
10
syncLimit=
5
dataDir=
/mpjava/zookeeper-3.4.13/data
dataLogDir=
/mpjava/zookeeper-3.4.13/dataLog
clientPort=
2181
autopurge.purgeInterval=
0
globalOutstandingLimit=
200
server.1=
ch201:2888:3888
server.2=
ch202:2888:3888
server.3=
ch203:2888:3888
2.4. 创建需要的目录
$:mkdir -p /apps/zookeeper-3.4.13/data
$:mkdir -p /apps/zookeeper-3.4.13/dataLog
配置完成后将当前的zookeeper目录scp到其他两个节点
2.5. 设置myid
$:vim /data/ myid #ch201为1,ch202为2,ch203为3
2.6. 进入zookeeper的bin目录,启动zookeeper服务,每个节点都需要启动
$: ./zkServer.sh start
2.7. 启动之后查看每个节点的状态
$: ./zkServer.sh status
其中有一个节点是leader,有两个节点是follower,证明zookeeper集群是部署成功的
2.8. 测试zookeeper
$: ./zkCli.sh -server 172.xxx.xxx.xxx:2181
如果出现拒绝连接,查看防火墙是否关闭,关闭防火墙service iptables stop
重启zookeeper
,或排查是否配置有误
2.9.停止
./zkServer.sh stop
集群部署
三个节点全部按照上面的指导部署单节点成功后开始配置部署集群需要的配置
4.1.首先以一个节点为例配置,vim /etc/metrika.xml,添加配置信息如下:
<yandex>
<clickhouse_remote_servers>
<perftest_3shards_1replicas>
<shard>
<internal_replication>true
</internal_replication>
<replica>
<host>ch201
</host>
<port>9000
</port>
</replica>
</shard>
<shard>
<replica>
<internal_replication>true
</internal_replication>
<host>ch202
</host>
<port>9000
</port>
</replica>
</shard>
<shard>
<internal_replication>true
</internal_replication>
<replica>
<host>ch203
</host>
<port>9000
</port>
</replica>
</shard>
</perftest_3shards_1replicas>
</clickhouse_remote_servers>
<!--zookeeper相关配置-->
<zookeeper-servers>
<node index="1">
<host>ch201
</host>
<port>2182
</port>
</node>
<node index="2">
<host>ch202
</host>
<port>2182
</port>
</node>
<node index="3">
<host>ch203
</host>
<port>2182
</port>
</node>
</zookeeper-servers>
<macros>
<replica>ch203
</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>
<!-- 其中大部分配置一样,以下的配置根据节点的IP/域名具体配置 -->
<macros>
<replica>ch203
</replica>
</macros>
注意:为什么直接vim /etc/metrika.xml
一个新文件,这里很难去理解,有点莫名其妙,其实如果仔细看过clickhouse的配置文件/etc/clickhouse-server/config.xml就能明白,有这么一段被注释的配置说明:
<!-- If element has 'incl' attribute, then for it's value will be used corresponding substitution from another file.
By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in 'include_from' element.
Values for substitutions are specified in /yandex/name_of_substitution elements in that file.
-->
配置一个节点完成之后,将/etc/metrika.xml
文件scp
到其他两个节点并配置
<macros>
<replica>ch203
</replica>
</macros>
对应的IP/域名
# 三台服务器依次进行一下操作
vim /etc/clickhouse-server/config.xml
<!-- 外部配置文件 -->
<include_from>/etc/metrika.xml</include_from>
5.按照上面的指导配置完成之后,在每个节点都启动clickhouse的服务,和单节点启动一样,当出现无误后,查看clickhouse的log文件,如果出现以下信息,就基本没有问题
6.进一步验证
在每个节点启动clickhouse客户端,和单节点启动完全一样,查询集群信息
select *
from system.clusters;
ch201
节点应该是以下信息:
ch202
节点应该是以下信息:
ch203
节点应该是以下信息:
可以看到红框内的信息基本相同,但是也有细微差别,红框外是之前的单节点的信息
至此,clickhouse的集群部署完全成功,生产环境针对数据量可能还需要一些额外的配置
中台的网关的日志测试:
通过DBeaver来执行ClickHouse的SQL语句:
三台服务器执行:
CREATE TABLE default.xxxx
(
`id` UUID DEFAULT generateUUIDv4() COMMENT '主键id',
`service_id` Nullable(String) COMMENT '微服务名',
`instance_id` Nullable(String) COMMENT '实例ID',
`call_time` DateTime64(3) COMMENT '调用时间',
`call_result_content` Nullable(String) COMMENT '调用结果内容',
`create_by` String COMMENT '创建人',
`create_time` DateTime DEFAULT now() COMMENT '创建时间',
INDEX create_by_idx create_by TYPE set(0) GRANULARITY 5,
INDEX api_name_idx api_name TYPE set(0) GRANULARITY 5
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(call_time)
ORDER BY call_time
SETTINGS index_granularity = 8192
其中一台执行:
CREATE TABLE xxxx_all AS xxxx ENGINE = Distributed(clickhouse_cluster, default, xxxx, rand());
通过ClickHouse-Demo的执行入库压测数据xxxx_all。
再通那台执行查询:xxxx_all。