满目山河空念远,落花风雨更伤春。
ClickHouse
概述
什么是ClickHouse
?
ClickHouse
是俄罗斯的Yandex
于2016年开源的列式存储数据库(DBMS)
,主要用于在线分析处理查询(OLAP)
,能够使用SQL
查询实时生成分析数据报告。
什么是列式存储 ?
以下面表为例
id |
website |
wechat |
---|---|---|
1 | https://niocoder.com/ |
java干货 |
2 | http://www.merryyou.cn/ |
javaganhuo |
采用行式存储时,数据在磁盘上的组织结构为:
Row1 |
Row2 |
||||
---|---|---|---|---|---|
1 | https://niocoder.com/ |
java干货 |
2 | http://www.merryyou.cn/ |
javaganhuo |
好处是想查某条记录所有的属性时,可以通过一次磁盘查找加顺序读取就可以。但是当想查所有记录wechat
时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。
而采用列式存储时,数据在磁盘上的组织结构为:
col1 |
col2 |
col3 |
|||
---|---|---|---|---|---|
1 | 2 | https://niocoder.com/ |
http://www.merryyou.cn/ |
java干货 |
javaganhuo |
这时想查所有记录的wechat
只需把col3
那一列拿出来即可。
集群环境搭建
在 安装ClickHouse
具体开始前, 先来搭建一下环境,软件包下载见末尾。
创建虚拟机
安装虚拟机 VMWare
安装Vmware虚拟机
导入 CentOS
将下载的CentOS
系统中导入到 VMWare
中
注意事项:windows系统确认所有的关于VmWare的服务都已经启动,
确认好VmWare
生成的网关地址,另外确认VmNet8网卡已经配置好了IP地址。
更多关于VmWare
网络模式参考VMware虚拟机三种网络模式详解
集群规划
IP | 主机名 | 环境配置 | 安装 | ClickHouse |
---|---|---|---|---|
192.168.10.100 |
node01 |
关防火墙, host 映射, 时钟同步 |
JDK , Zookeeper |
clickhouse-server 9000 clickhouse-server 9001 |
192.168.10.110 |
node02 |
关防火墙, host 映射, 时钟同步 |
JDK , Zookeeper |
clickhouse-server 9000 clickhouse-server 9001 |
192.168.10.120 |
node03 |
关防火墙, host 映射, 时钟同步 |
JDK , Zookeeper |
clickhouse-server 9000 clickhouse-server 9001 |
配置每台主机
更改ip
地址和HWADDR
地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR
地址查看
修改主机名(重启后永久生效)
vim /etc/hostname
设置hosts
域名映射
vim /etc/hosts
关闭防火墙
三台机器执行以下命令
systemctl status firewalld.service #查看防火墙状态
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #永久关闭防火墙
免密登录
为了方便传输文件,三台机器之前配置免密登录.
- 免密 SSH 登录的原理
- 需要先在 B节点 配置 A节点 的公钥
- A节点 请求 B节点 要求登录
- B节点 使用 A节点 的公钥, 加密一段随机文本
- A节点 使用私钥解密, 并发回给 B节点
- B节点 验证文本是否正确
三台机器生成公钥与私钥
在三台机器执行以下命令,生成公钥与私钥
ssh-keygen -t rsa
执行该命令之后,按下三个回车即可
拷贝公钥到node01
机器
三台机器将拷贝公钥到node01
机器
三台机器执行命令:
ssh-copy-id node01
复制node01
机器的认证到其他机器
将第一台机器的公钥拷贝到其他机器上
在node01
机器上面执行以下命令
scp /root/.ssh/authorized_keys node02:/root/.ssh
scp /root/.ssh/authorized_keys node03:/root/.ssh
设置时钟同步服务
- 为什么需要时间同步
- 因为很多分布式系统是有状态的, 比如说存储一个数据, A节点 记录的时间是 1, B节点 记录的时间是 2, 就会出问题
## 安装
yum install -y ntp
## 启动定时任务
crontab -e
随后在输入界面键入
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;
安装JDK
上传jdk
并解压然后配置环境变量
所有软件的安装路径
mkdir -p /export/servers #node01,node02,node03机器上执行
所有软件压缩包的存放路径
mkdir -p /export/softwares # 创建文件夹
安装rz
和sz
命令
yum -y install lrzsz # 安装rz sz 命令
上传jdk
安装包到/export/softwares
路径下去,并解压
tar -zxvf jdk-8u141-linux-x64.tar.gz -C ../servers/
配置环境变量
vim /etc/profile
export JAVA_HOME=/export/servers/jdk1.8.0_141
export PATH=:$JAVA_HOME/bin:$PATH
执行以下命令将jdk
安装包分发到node02
和node03
节点上
scp -r /export/servers/jdk1.8.0_141/ node02:/export/servers/
scp -r /export/servers/jdk1.8.0_141/ node03:/export/servers/
scp /etc/profile node02:/etc/profile
scp /etc/profile node03:/etc/profile
刷新环境变量
source /etc/profile
安装Zookeeper
服务器IP | 主机名 | myid的值 |
---|---|---|
192.168.10.100 | node01 | 1 |
192.168.10.110 | node02 | 2 |
192.168.10.120 | node03 | 3 |
上传zookeeper
安装包到/export/softwares
路径下去,并解压
tar -zxvf zookeeper-3.4.9.tar.gz -C ../servers/
node01
修改配置文件如下
cd /export/servers/zookeeper-3.4.9/conf/
cp zoo_sample.cfg zoo.cfg
# 创建数据存放节点
mkdir -p /export/servers/zookeeper-3.4.9/zkdatas/
vim zoo.cfg
dataDir=/export/servers/zookeeper-3.4.9/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3
# 日志多少小时清理一次
autopurge.purgeInterval=1
# 集群中服务器地址
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
在node01
机器上
/export/servers/zookeeper-3.4.9/zkdatas/
这个路径下创建一个文件,文件名为myid
,文件内容为1
echo 1 > /export/servers/zookeeper-3.4.9/zkdatas/myid
安装包分发到其他机器
node01
机器上面执行以下两个命令
scp -r /export/servers/zookeeper-3.4.9/ node02:/export/servers/
scp -r /export/servers/zookeeper-3.4.9/ node03:/export/servers/
node02
机器上修改myid
的值为2
echo 2 > /export/servers/zookeeper-3.4.9/zkdatas/myid
node03
机器上修改myid
的值为3