搭建Clickhouse集群
今天搭建了clickhouse集群,分享给大家
本次搭建集群是使用了两台云主机,为了简单就没有配置域名映射,整个过程都是使用的内网IP,clickhouse集群依赖zookeeper,所以要搭建zookeeper集群,由于资源有限,zookeeper使用的是单点模式,如果资源足够的话可以搭建集群,我也推荐大家搭建zookeeper集群
- 免密登录
- zookeeper部署
- clickhouse安装
- clickhouse配置集群
- 结果展示
1. 免密登录
为了方便传输文件,两台机器之前配置免密登录.
- 需要先在 B节点 配置 A节点 的公钥
- A节点 请求 B节点 要求登录
- B节点 使用 A节点 的公钥, 加密一段随机文本
- A节点 使用私钥解密, 并发回给 B节点
- B节点 验证文本是否正确 每台服务器都要执行: ssh-keygen -t rsa
然后两台机器交换公钥:
将node1的/root/.ssh/公钥拷贝到node2的/root/.ssh/authorized_keys中
将node2的/root/.ssh/公钥拷贝到node1的/root/.ssh/authorized_keys中
2. zookeeper部署
下载zookeeper服务,然后解压
tar -zxvf zookeeper-3.4.9.tar.gz -C ../servers/
修改zoo.cfg文件 如果要配置zookeeper集群可以自行google,这里不是重点
3. clickhouse安装
两台服务器都是centos,如果是Ubuntu或者其他服务,可以去clickhouse官网查看
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64
如果您想使用最新的版本,请用testing替代stable(我们只推荐您用于测试环境)。prestable有时也可用。
然后运行命令安装:
sudo yum install clickhouse-server clickhouse-client
以上的命令分别在node1、node2上执行
通过systemctl start clickhouse-server命令来开启
通过systemctl status clickhouse-server命令来查看启动状态
可以通过clickhouse-client命令来检查是否安装成功:
两台机器都要检查一下
4. clickhouse配置集群
主要在node1上修改/clickhouse-server/config.xml文件,主要修改三处:
修改第一处:
<!-- 打开这个 -->
<listen_host>::</listen_host>
<!-- Same for hosts with disabled ipv6: -->
<!-- <listen_host>0.0.0.0</listen_host> -->
<!-- 新增外部配置文件metrika.xml -->
修改第二处:
<remote_servers>
<cluster_2hards_1replicas>
<!-- 数据分片1 -->
<shard>
<replica>
<host>172.17.162.84</host>
<port>9000</port>
</replica>
</shard>
<!-- 数据分片2 -->
<shard>
<replica>
<host>172.17.162.83/host>
<port>9000</port>
</replica>
</shard>
</luster_2hards_1replicas>
.....省略原始配置
</emote_servers>
修改第三处:
#如果是zookeeper集群,可以配置多个节点
<zookeeper>
<node>
<host>172.17.162.83</host>
<port>2181</port>
</node>
</zookeeper>
将config.xml同步到node2的/etc/clickhouse-server/中
通过systemctl restart clickhouse-server命令来重启服务(两台机器都需要重启)
集群之间是用过9000端口进行通信的,所以通过telnet命令来确认一下端口是否开放
5、结果展示
在两个节点上分别创建本地表
CREATE TABLE default.cluster2s1r_local(`id` Int32,`website` String,`wechat` String,`FlightDate` Date,Year UInt16)ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192);
在node1上创建分布式表
CREATE TABLE default.cluster2s1r_all AS cluster3s1r_local ENGINE = Distributed(cluster_2shards_1replicas, default, cluster3s1r_local, rand());
然后往分布式表中插入数据
INSERT INTO default.cluster2s1r_all (id,website,wechat,FlightDate,Year)values(1,'https://niocoder.com/','java干货','2020-11-28',2020);
INSERT INTO default.cluster2s1r_all (id,website,wechat,FlightDate,Year)values(2,'http://www.merryyou.cn/','javaganhuo','2020-11-28',2020);
INSERT INTO default.cluster2s1r_all (id,website,wechat,FlightDate,Year)values(3,'http://www.xxxxx.cn/','xxxxx','2020-11-28',2020);
然后分别查询分布式表和本地表
#查询分布式表
:) select * from cluster2s1r_all;
SELECT *
FROM cluster2s1r_all
Query id: 19bb300d-b586-4e6a-bd51-10bf12e85eef
┌─id─┬─website───────────────┬─wechat───┬─FlightDate─┬─Year─┐
│ 1 │ https://niocoder.com/ │ java干货 │ 2020-11-28 │ 2020 │
└────┴───────────────────────┴──────────┴────────────┴──────┘
┌─id─┬─website─────────────────┬─wechat─────┬─FlightDate─┬─Year─┐
│ 2 │ http://www.merryyou.cn/ │ javaganhuo │ 2020-11-28 │ 2020 │
└────┴─────────────────────────┴────────────┴────────────┴──────┘
┌─id─┬─website──────────────┬─wechat─┬─FlightDate─┬─Year─┐
│ 3 │ http://www.xxxxx.cn/ │ xxxxx │ 2020-11-28 │ 2020 │
└────┴──────────────────────┴────────┴────────────┴──────┘
#node1的本地表
:) select * from cluster2s1r_local
SELECT *
FROM cluster3s1r_local
Query id: 88604512-cce5-457e-9d7f-f5ebb8d44ad6
Ok.
0 rows in set. Elapsed: 0.002 sec.
#node2的本地表
:) select * from cluster2s1r_local
SELECT *
FROM cluster3s1r_local
Query id: 44832ca8-3338-499e-9a93-07448e7ae698
┌─id─┬─website───────────────┬─wechat───┬─FlightDate─┬─Year─┐
│ 1 │ https://niocoder.com/ │ java干货 │ 2020-11-28 │ 2020 │
└────┴───────────────────────┴──────────┴────────────┴──────┘
┌─id─┬─website─────────────────┬─wechat─────┬─FlightDate─┬─Year─┐
│ 2 │ http://www.merryyou.cn/ │ javaganhuo │ 2020-11-28 │ 2020 │
└────┴─────────────────────────┴────────────┴────────────┴──────┘
┌─id─┬─website──────────────┬─wechat─┬─FlightDate─┬─Year─┐
│ 3 │ http://www.xxxxx.cn/ │ xxxxx │ 2020-11-28 │ 2020 │
└────┴──────────────────────┴────────┴────────────┴──────┘
希望可以帮助到跟我遇到同样问题的同学,这个方式肯定没问题,如果有问题,可以给我留言
转载自:https://juejin.cn/post/6932763588507467784