192.168.18.237 ck1 192.168.18.238 ck2 192.168.18.239 ck32、安装zookeeper 2.1 下载 apache-zookeeper-3.6.2-bin.tar.gz安装包
放置在所有服务器上的 /opt/zk 目录下
2.2. 进入到/opt/zk目录下,解压tar包tar -zxf apache-zookeeper-3.6.2-bin.tar.gz2.3.修改zoo.cfg文件
进入zookeeper的conf目录,拷贝zoo_sample.cfg为zoo.cfg
cp zoo_sample.cfg zoo.cfg
修改zoo.cfg文件:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper dataLogDir=/data/zookeeper/log clientPort=2181 server.1=192.168.18.237:2888:3888 server.2=192.168.18.238:2888:3888 server.3=192.168.18.239:2888:38882.4. 创建需要的目录
mkdir -p /data/zookeeper/log
配置完成后将当前的zookeeper目录scp到其他两个节点
scp -r /opt/zk/zookeeper root@ck2:/opt/ scp -r /opt/zk/zookeeper root@ck3:/opt/ scp -r /data/zookeeper root@ck2:/opt/ scp -r /data/zookeeper root@ck3:/opt/2.5. 设置myid
vi /data/zookeeper/myid
ck1的myid内容为1,ck2的myid内容为2,ck3的myid内容为3
2.6.启动zookeeper服务进入zookeeper的bin目录,启动zookeeper服务,每个节点都需要启动
./zkServer.sh start ./zkServer.sh enable
使用zkServer.sh status 查看节点信息,其中有一个节点是leader,有两个节点是follower,证明zookeeper集群是部署成功的
3、安装clickhouse 3.1 在三个节点分别搭建单机版rpm -ivh clickhouse-common-static-20.12.5.14-2.x86_64.rpm rpm -ivh clickhouse-server-20.12.5.14-2.noarch.rpm rpm -ivh clickhouse-client-20.12.5.14-2.noarch.rpm cat > /etc/metrika.xml <EOF sed -i 's// ::/0 :: /g' /etc/clickhouse-server/config.xml sed -i 's/9000 /8999 /g' /etc/clickhouse-server/config.xml sed -i 's// 123456 /g' /etc/clickhouse-server/users.xml
此时,各节点的clickhouse服务端口号已经改为8999,default用户的密码改为123456
启动clickhouse-server服务
systemctl start clickhouse-server systemctl enable clickhouse-server
可以使用命令单机登录验证
clickhouse-client --host localhost --user default --password 123456 --port 89993.2 集群部署
所有节点修改metrika.xml
首先以一个节点为例配置,vi /etc/clickhouse-server/metrika.xml,添加配置信息如下:
true ck1 8999 default 123456 true ck2 8999 default 123456 true ck3 8999 default 123456 ck1 2182 ck2 2182 ck3 2182 ck1 ::/0 10000000000 0.01 lz4
说明:
- clickhouse_remote_servers与config.xml中的incl属性值对应
- perftest_3shards_1replicas 是集群名,可以自定义。
- shard即为数据分片
- internal_replication =true 这个参数和数据的写入,自动复制相关。从生产环境角度考虑,我们都是复制表,通过本地表写入,这里配置true就好。不推荐也不需要考虑其他情况。
- clickhouse_compression数据的压缩。
- 无副本时,可以使用node标签代替shard标签来定义节点
所有节点重启clickhouse-server服务
systemctl restart clickhouse-server3.3 验证集群
登录clickhouse客户端
clickhouse-client --host localhost --user default --password 123456 --port 8999
SQL查询
select * from system.clusters
这样集群就搭建好了
3.4 测试在各个节点建库、本地表
create database testdb ; create table person_local (ID Int8, Name String, BirthDate Date) ENGINE = MergeTree(BirthDate, (Name, BirthDate), 8192);
在各个节点建分布表
create table person_all as person_local ENGINE = Distributed(perftest_3shards_1replicas, testdb, person_local, rand());
分布表(Distributed)本身不存储数据,相当于路由,需要指定集群名、数据库名、数据表名、分片KEY.
这里分片用rand()函数,表示随机分片。
查询分布表,会根据集群配置信息,路由到具体的数据表,再把结果进行合并。
- person_local 为本地表,数据只是在本地
- person_all 为分布式表,查询这个表,引擎自动把整个集群数据计算后返回
插入数据
insert into person_all (*) valuses ('1','a','2021-10-01');
insert into person_all (*) valuses ('2','b','2021-10-01');
insert into person_all (*) valuses ('3','c','2021-10-01');
insert into person_all (*) valuses ('4','d','2021-10-01');
insert into person_all (*) valuses ('5','e','2021-10-01');
insert into person_all (*) valuses ('6','f','2021-10-01');
insert into person_all (*) valuses ('7','g','2021-10-01');
insert into person_all (*) valuses ('8','h','2021-10-01');
insert into person_all (*) valuses ('9','i','2021-10-01');
insert into person_all (*) valuses ('10','j','2021-10-01');
insert into person_all (*) valuses ('11','k','2021-10-01');
insert into person_all (*) valuses ('12','l','2021-10-01');
再查看分布式表和本地表的数据
select * from person_all; select * from person_local;
可以发现数据分片到了三台机器的本地表。



