1、安装前准备
1.1安装paralledls Desktop
链接: https://pan.baidu.com/s/1qpMz0POr1f1JJXSjoe9eUg 密码: nqie
也可以自己下载破解版。
1.2下载centos
2.安装虚拟机
2.1安装master虚拟机
1)打开pd,选择安装Windows或其他操作系统,然后选择继续
2)选择系统镜像
一般会自动找到之前下载的镜像,点击继续
若为找到,点击手动选择,手动导入镜像
3)设置用户名密码
4)名称和位置
5)虚拟机配置
这里我使用的默认配置,可以点击配置设置自己想要的,然后点击继续
6)启动centos
选择第一个,然后等待即可
7)然后输入密码进入,设置语言
选择汉语,点击前进
选择汉语,点击前进
8)隐私
选择打开,点击前进
9)其他设置
我都跳过了
2.2虚拟机安装clickhouse
1)打开终端,系统左上角applications---system tools---terminal
2)终端执行如下命令
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
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
sudo yum install clickhouse-server clickhouse-client
3)启动服务并链接
sudo /etc/init.d/clickhouse-server start
clickhouse-client
此时在单个centos虚拟机上你已经可以正常使用clickhouse
2.3安装多个虚拟机
再次打开parallels Desktop,点击+号
将其他虚拟机的名字依次命名为node1,node2
3、搭建前准备
3.1取消打开文件数限制与修改SELINUX
1)关闭防火墙
systemctl stop firewalld
2)取消打开文件数限制
clickhouse非常消耗内存,且把数据存储在本地磁盘。首先使用如下指令查看当前资源限制的设置,主要修改open files和max user processes
ulimit -a
第一步:修改limits.conf文件
sudo vim /etc/security/limits.conf
文件中添加,注意*号后面的空格
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
nofile表示文件数,nproc表示进程数,soft的值要小于等于hard的值
第二步:修改limits.d/20-nproc.conf文件
若limits.d目录下不存在该文件,则手动创建即可。修改此文件是因为在某些时候20-nproc.conf文件的值会覆盖limits.conf里的值。
sudo vim /etc/security/limits.d/20-nproc.conf
输入如下命令
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
如图:
3)退出当前用户,再次进入,设置生效
4)取消SELINUX
selinux为了系统安全设置的,但很多时候用着很麻烦。
sudo vim /etc/selinux/config
把SELINUX的值改为disabled
重启生效!
重启之后终端输入getenforce,输出disabled!!!!若想临时把SELINUX的值设为disabled状态,可以在终端使用setenforce 0命令(该命令只能用于SELINUX的值为enforce时,若使用setenforce 1无效)。
3.2设置hosts文件解析
这是因为clickhouse同步表数据的时候会去zookeeper里面查询,zookeeper里面存储的是host域名,不是IP,不解析会导致可以同步但无法同步表数据。
查看主机名
hostname
//三台机器分别为
centos-linux-master.shared
centos-linux-node1.shared
centos-linux-node2.shared
打开vim /etc/hosts,输入
10.211.55.3 centos-linux-master.shared
10.211.55.4 centos-linux-node1.shared
10.211.55.5 centos-linux-node2.shared
上述操作在master、node1、node2三台机器上都要进行!!!
4、搭建zookeeper集群
在master、node1、node2三台虚拟机上搭建zookeeper集群
master ip===10.211.55.3
node1 ip===10.211.55.4
node2 ip===10.211.55.5
1) 安装Java环境
zookeeper集群的运行需要Java环境,需要先安装jdk
sudo yum install java -y
2)下载zookeeper并解压
wget https://apache.claz.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
tar zxvf apache-zookeeper-3.6.3-bin.tar.gz
3)配置zookeeper
根目录下创建zookeeper文件夹,并在zookeeper文件下创建data和logs文件夹,分别保存快照和日志
cd /
sudo mkdir zookeeper
cd zookeeper
sudo mkdir data
sudo mkdir logs
打开apache-zookeeper-3.6.3-bin/conf目录,拷贝并重命名zoo_sample.cfg
cd apache-zookeeper-3.6.3-bin/conf
cp zoo_sample.cfg zoo.cfg
配置zoo.cfg文件
sudo vim zoo.cfg
末尾添加如下内容:
server.0=10.211.55.3:2888:3888
server.1=10.211.55.4:2888:3888
server.2=10.211.55.5:2888:3888
dataDir和dataLogDir设为刚刚创建的路径,不要放在tmp目录下,/tmp目录重启会自动清除
4)创建myid文件
在上个文件dataDir目录下创建myid文件,即在/zookeeper/data目录下创建myid文件
cd /zookeeper/data
touch myid
vim myid
然后写入数字0。此处的0对应zoo.cfg文件内server后的数字,你的机器IP是哪个,就使用哪个对应的数字。
此时master对应数字0
node1对应数字1
node2对应数字2
5)配置环境变量
此步骤的目的是为了能够在任意目录启动zookeeper集群,若不配置,每次都需要进入zookeeper安装目录下的bin目录下启动zookeeper
首先进入/etc/profile目录,添加配置信息
pwd查看apache-zookeeper-3.6.3-bin的具体路径
export ZK_HOME=zookeeper安装目录
export PATH=$PATH:$ZK_HOME/bin
使环境变量生效
source /etc/profile
上述步骤在master、node1、node2三台虚拟机上都要进行。
6)启动zookeeper集群
zookeeper集群操作命令:
//启动
zkServer.sh start
//关闭
zkServer.sh stop
//重启
zkServer.sh restart
//查看集群节点状态
zkServer.sh status
不配置时启动:
cd ~/apache-zookeeper-3.6.3-bin/bin
sudo ./zkServer.sh start
查看集群状态
./zkServer.sh status
遇到问题:若查看集群无法正常使用,则可能是防火墙问题,关闭即可
systemctl stop firewalld
Zookeep启动正常,却报错:Error contacting service. It is probably not running._Learning by doing-CSDN博客
配置时在任意目录都可以启动,不需要到zookeeper的bin目录下
sudo -I//切换为root用户
zkServer.sh start
5、clickhouse集群搭建
clickhouse中的核心配置文件有:
- config.xml:端口配置、本地机器名配置、内存设置等
- metrika.xml:集群配置,zk配置、分片配置
- users.xml:权限,配额配置
5.1修改config.xml文件
可以实现远程访问
vim /etc/clickhouse-server/config.xml
将该行前后的<!--与-->注释掉 ,这样clickhouse才能让除本机之外的机器访问。
5.2和5.3暂时设置与否无所谓,我跳过了。
5.2内存限制设置
打开/etc/clickhouse-server/users.xml文件
vim /etc/clickhouse-server/users.xml
5.3数据目录
打开/etc/clickhouse-server/config.xml,在/home目录下创建clickhouse文件夹
<path>/var/lib/clickhouse/</path>
修改为
<path>/home/clickhouse/</path>
5.4集群部署
副本的目的在于保障数据的高可用性,即使一台clickhouse节点宕机,也可以从其他服务器获得相同的数据。
副本可以提高数据的可用性,降低丢失风险,但每台服务器必须容纳全部数据,数据的横向扩容没有解决。分片用来解决数据水平切分的问题,通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上,然后通过Distributed表引擎把数据拼接起来一起使用。同一分片内的数据可以有多个副本。
Distributed表引擎本身不存储数据,类似mysql中的mycat,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。
clickhouse集群是表级别的,实际使用中,大部分做了高可用,但没有使用分片,避免降低查询性能以及操作集群的复杂性。
谨记:如果你用的新版的clickhouse,则使用的是remote_servers而不是clickhouse-remote-servers,老版的则是clickhouse_remote_servers。如果最后你配置好后找不到集群,可能是这个问题;
使用zookeeper而不是zookeeper-servers,否则可能会报no hosts passed to zookeeper constructor.(bad arguments)
我因为这个问题耽误了一下午,修改各种配置都不对!!
1)在/etc/clickhouse-server/config.d目录下创建metrika.xml,虚拟机master下的内容如下
<yandex>
<remote_servers>
<clustersName>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>centos-linux-master.shared</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<internal_replication>true</internal_replication>
<host>centos-linux-node1.shared</host>
<port>9000</port>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>centos-linux-node2.shared</host>
<port>9000</port>
</replica>
</shard>
</clustersName>
</remote_servers>
<zookeeper>
<node>
<host>centos-linux-master.shared</host>
<port>2181</port>
</node>
<node>
<host>centos-linux-node1.shared</host>
<port>2181</port>
</node>
<node>
<host>centos-linux-node2.shared</host>
<port>2181</port>
</node>
</zookeeper>
<macros>
<shard>01</shard>
<replica> 10.211.55.3</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>
然后将metrika.xml所属用户更改为clickhouse。
chown clickhouse:clickhouse metrika.xml
2)拷贝到另外两个机器上,同时修改<macros></macros>部分内容
scp 本虚拟机路径/文件名 目的虚拟机:目的路径
然后输入密码
scp /etc/clickhouse-server/metrika.xml centos-linux-node1.shared:/etc/clickhouse-server/
此时,metrika.xml文件复制成功。
对于node1的metrika.xml文件值需要修改macros部分,如下
<macros>
<shard>02</shard>
<replica>centos-linux-node1.shared</replica>
</macros>
对于node2的metrika.xml文件也只需要macros部分,如下:
<macros>
<shard>03</shard>
<replica>centos-linux-node2.shared</replica>
</macros>
3)修改config.xml文件
在虚拟机masrer、node1、node2的/etc/clickhouse-server目录下打开config.xml文件,添加如下内容:
目的在于指明metrika.xml文件的路径,若不指定,则默认从/etc/metrika.xml处加载
<zookeeper incl="zookeeper" optional="true" />
<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>
4)启动集群
service clickhouse-server start //开启服务
service clickhouse-server stop //停止
service clickhouse-server restart //重启
service clickhouse-server status //查看状态
首先开启zookeeper三个虚拟机分别开启zookeeper,然后启动clickhouse-server,任意一台虚拟机开启客户端
zkServer.sh start //开启zookeeper
service clickhouse-server start //开启clickhouse
//上面的需要在3台虚拟机上执行,clickhouse-client只需要在一台虚拟机上执行
clickhouse-client -m
然后查询集群
///直接使用这个输出的参数太多
select * from system.cluster;
//只查询特定列
select cluster,shard_num,shard_weight,replica_num,host_name,host_address,port,is_local,user from system.clusters;
结果如下:
6、遇见问题
问题1:执行sudo yum install yum-utils时出现如下错误
another app is currently holding the yum lock;waiting for it to exit
解决办法:执行sudo rm -r /var/run/yum.pid,然后重新执行sudo yum install yum-utils即可
下一篇https://blog.csdn.net/qq_38196982/article/details/119933154