安装java环境
安装java环境
代码语言:javascript复制//安装jdkyum install java-1.8.0-openjdk* -y
下图则是我的java环境
代码语言:javascript复制jave -version
下载Zookeeper
代码语言:javascript复制//创建目录 mkdir software
//下载zk安装包 wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz
解压Zookeper压缩包
代码语言:javascript复制//解压tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
创建数据目录
用于存放zk的事务日志文件和数据快照文件
代码语言:javascript复制//进入目录 cd /usr/local/software/apache-zookeeper-3.5.8-bin
//创建数据目录,用于存放数据快照 mkdir data
进入配置文件目录
代码语言:javascript复制//进入zk包 cd apache-zookeeper-3.5.8-bin/conf/
重命名配置文件
如上图中,zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则
cp zoo_sample.cfg zoo.cfg
修改配置文件
如下图,将dataDir的路径改为刚刚我所创建的data目录
启动zookeeper
//启动 /usr/local/software/apache-zookeeper-3.5.8-bin/bin/zkServer.sh start /usr/local/software/apache-zookeeper-3.5.8-bin/conf/zoo.cfg
检测是否启动成功
ps -ef | grep zookeeper
连接服务器
//两种方式连接服务器//第一种(连接指定ip和端口的zk服务器)/usr/local/software/apache-zookeeper-3.5.8-bin/bin/zkCli.sh ‐server ip:port
//第二种(直接连本机zk服务器)/usr/local/software/apache-zookeeper-3.5.8-bin/bin/zkCli.sh
我们选择第二种本机连接
/usr/local/software/apache-zookeeper-3.5.8-bin/bin/zkCli.sh
如上图连接zk就成功啦
在客户端里面简单的输入查询所有根节点命令
zk单机版到这就成功搭建完成啦
伪集群环境的搭建
集群环境搭建其实也是非常简单的,跟着我的步骤一步一步来就OK了。
zookeeper集群的节点一共分为三种角色:
- leader:主要负责写数据和读数据
- follower:主要读数据和选举
- observer:主要负责读数据
zookeeper同步原理大致如下:
每当有请求写数据到zk,会在leader节点中存一份事务日志,leader节点将数据同步到follower节点上,同样follower节点也会有操作写入到事务日志中,但是只有写操作成功同步达到集群的过半机制的时候,才会将数据写入到内存中,也就是内存快照。 过半机制只有follower节点才会响应,observer不会参与,也就是说,集群leader写操作,同步数据到其他子节点,只要有一半的follower节点成功响应同步数据,那么就认为数据同步成功或者说写入成功。
observer存在的意义
observer在不会影响服务写的请求情况下,会提升服务读数据的效率问题
集群搭建
因为是集群环境,所以需要创建专门存储集群节点的事务日志文件以及数据快照文件的目录。
我这里直接在zookeeper项目的根目录创建 "clusterData" 目录
mkdir clusterData
然后接着进入到 "clusterData" 目录下,创建4个节点目录,3台zk集群选举节点和一台观察者节点。
在zk里面集群选举的节点最好为奇数节点,且选举的协议为ZAB协议,也就是某个节点想选举leader节点,在集群所有节点中必须要过半机制投它,它才能成为leader节点。oberver节点是不参与集群选举的,它只是负责读数据。
代码语言:javascript复制//进入目录 cd clusterData/
//分别创建4个目录,存储4个节点的数据 mkdir zk1 zk2 zk3 zk4
然后我们需要分别在不同的目录里面创建 "myid" 文件,该文件的作用在于,在集群环境下给每个节点一个唯一标识的意思,因为要进行选举嘛,就必得有一个标识。
//如下命令,可快速的在zk1目录下创建一个myid文件,写入内容为1或2或3或4
代码语言:javascript复制echo 1 > zk1/myidecho 2 > zk2/myidecho 3 > zk3/myidecho 4 > zk4/myid
如下图,通过cat命令,查看不同的目录里面的myid,是否都是我们预想的一样,我这里当然是一样的
好了,创建数据目录之后,我还要还要进行修改集群的配置文件啦
//进入到conf目录 cd conf/
//复制一份数据 cp zoo.cfg zoo1.cfg
然后编辑 "zoo1.cfg" 配置文件,需要改三处地址
代码语言:javascript复制//修改数据存放地址 dataDir = "刚刚所创建的数据存放目录"
//在同一台服务器,集群节点之间一定要不重复clientPort=2181
//集群配置, 2888这个集群通讯协议 3888是集群选举端口 //因为我是同一台服务器,所以端口都必须不一样,如果是不同的服务器,端口是可以一样的server.1=192.168.137.27:2888:3888 server.2=192.168.137.27:2889:3889 server.3=192.168.137.27:2890:3890 server.4=192.168.137.27:2891:3891:observer
保存完数据后,我们在基于 "zoo1.cfg" 配置文件,在copy3份配置文件,用于启动其他的三台集群节点
代码语言:javascript复制cp zoo1.cfg zoo2.cfg cp zoo1.cfg zoo3.cfg cp zoo1.cfg zoo4.cfg
然后编辑剩下的 "zoo2.cfg zoo3.cfg zoo4.cfg" 三个配置文件,然后分别对dataDir 和 clientPort 这两处修改一下即可
然后启动4台服务器节点
代码语言:javascript复制//进入指定目录cd /usr/local/software/apache-zookeeper-3.5.8-bin
//启动集群的4个节点./bin/zkServer.sh start conf/zoo1.cfg ./bin/zkServer.sh start conf/zoo2.cfg ./bin/zkServer.sh start conf/zoo3.cfg ./bin/zkServer.sh start conf/zoo4.cfg
如下图,我这边就启动成功了哈
当然,我们也可以根据命令来查看集群某个节点的角色是什么
./bin/zkServer.sh status conf/zoo2.cfg
连接客户端
./bin/zkCli.sh -server 192.168.137.27:2181,192.168.137.27:2182,192.168.137.27:2183,192.168.137.27:2184
然后看到下图,通过客户端连接服务端,并能够成功查询数据
到此我们的zookeeper单机版本搭建和伪集群搭建到此就结束啦~