本文记录了 ClickHouse 环境的搭建过程。
内核参数优化
在
/etc/sysctl.conf中添加如下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14fs.file-max = 10000000
fs.nr_open = 10000000
net.core.default_qdisc = fq
net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.netfilter.nf_conntrack_max=655350
vm.swappiness=10加载新的配置参数
1
sysctl -p
验证 BBR 算法是否生效
1
lsmod | grep bbr
结果会显示 tcp_bbr 加一串数字,说明 BBR 算法已启动。
验证其他修改值是否生效
1
2
3
4cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/ipv4/tcp_fin_timeout
cat /proc/sys/net/ipv4/tcp_tw_reuse
cat /proc/sys/net/ipv4/tcp_tw_recycle如果输出为修改的值说明已生效
在
/etc/security/limits.conf中添加如下内容:1
2
3
4
5
6root soft nofile 1000000
root hard nofile 1000000
* soft nofile 1000000
* hard nofile 1000000
* soft nproc 131072
* hard nproc 131072大部分的 Linux 发行版这样修改之后重启即可生效。
验证是否生效:
1
ulimit -n
如果输出为 1000000 则表明已经修改完成。有时发现重启也无效,检查一下
/etc/profile有一个ulimit -SHn 65536,把它注释掉就行了。临时修改
1
ulimit -n 1000000
安装
1 | sudo apt-get install apt-transport-https ca-certificates dirmngr |
配置
修改 /etc/clickhouse-server/config.xml:
1 | vim /etc/clickhouse-server/config.xml |
才能让 ClickHouse 被除本机以外的服务器访问,修改
1 | <listen_host>0.0.0.0</listen_host> |
数据文件和日志文件的默认配置(无需修改):
1 | 数据文件路径:<path>/var/lib/clickhouse/</path> |
修改 /etc/clickhouse-server/users.xml ,添加以下配置:
1 | <!-- 设置后台线程池的大小 --> |
修改 /etc/clickhouse-server/config.xml ,修改以下配置:
1 | <!-- 设置并发处理的最大请求数 --> |
防火墙
1 | iptables -I INPUT -p tcp -m multiport --dport 8123,9000,9004,9005 -j DROP |
端口
- 8123:处理客户端 HTTP 请求
- 9000:处理客户端 TCP 请求
- 9004:通过 MySQL 协议与客户端通信的端口
- 9005:通过 PostgreSQL 协议与客户端通信的端口
Zookeeper集群
ClickHouse 副本和分片都依赖 Zookeeper,Zookeeper 依赖 Java环境。
下载 zookeeper
1
2cd /opt
wget https://downloads.apache.org/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz解压并重命名
1
2tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /opt
mv apache-zookeeper-3.5.9-bin zookeeper配置服务器编号
1
2
3
4cd /var/data && mkdir zookeeper
# 创建文件 myid
cd zookeeper && vim myid
# 三台服务器分别输入 1,2,3配置 zoo.cfg 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 进入配置目录
cd /opt/zookeeper/conf
# 重命名conf这个目录下的zoo_sample.cfg为zoo.cfg
mv zoo_sample.cfg zoo.cfg
# 修改 zoo.cfg
vim zoo.cfg
# 修改 dataDir
dataDir=/var/data/zookeeper
# 添加如下内容
#######################cluster##########################
server.1=clickhouse1:2888:3888
server.2=clickhouse2:2888:3888
server.3=clickhouse3:2888:3888这里通过 scp 复制配置文件,前提是需要配置免密登陆
1
scp -P 45222 -r root@clickhouse1:/opt/zookeeper/conf/zoo.cfg /opt/zookeeper/conf/
启动
1
cd /opt/zookeeper && bin/zkServer.sh start
测试
1
cd /opt/zookeeper && bin/zkServer.sh status
配置开机自启动
1
2
3# 编辑 /etc/rc.local ,添加
source /etc/profile
/opt/zookeeper/bin/zkServer.sh start
ClickHouse集群
在 config.xml 加上以下配置:
1 | <zookeeper incl="zookeeper-servers" optional="true" /> |
在 /etc/clickhouse-server/config.d 目录下创建 metrika-shard.xml 文件:
1 |
|
文件复制:
1 | scp -P 45222 -r root@clickhouse1:/etc/clickhouse-server/config.d/metrika-shard.xml /etc/clickhouse-server/config.d/ |
重启:
1 | service clickhouse-server restart |
测试集群
分布式DDL创建数据库
1 | CREATE DATABASE if not exists dataset on cluster safety_cluster; |
分布式DDL创建本地表
1 | CREATE TABLE dataset.hits_local on cluster safety_cluster |
分布式DDL创建分布式表
1 | CREATE TABLE dataset.hits_all on cluster safety_cluster |
下载并导入数据
1 | # 下载数据 |