Linux下搭建单机Zookeeper集群
前期准备
安装jdk
https://www.cnblogs.com/helios-fz/p/12623038.html
下载zookeeper
https://zookeeper.apache.org/releases.html
将下载到的压缩包解压到你喜欢的位置,我放置的位置是
/usr/local/apache-zookeeper-3.7.0-bin
集群配置
创建一个文件夹放置集群节点文件
mkdir zookeeper-cluster
在这个文件夹下再创建三个文件夹:zoo1、zoo2、zoo3
在上述三个文件夹下都分别创建data和log两个文件夹
在每一个data文件夹下,都创建一个myid文件,文件内容分别对应为1、2、3
进入zookeeper的conf文件夹,复制三份zoo_sample.cfg,命名为zoo-1.cfg、zoo-2.cfg、zoo-3.cfg
其中zoo-1.cfg文件内容如下:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/local/zookeeper-cluster/zoo1/data dataLogDir=/usr/local/zookeeper-cluster/zoo1/log # the port at which the clients will connect clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 ## Metrics Providers # # https://prometheus.io Metrics Exporter #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider #metricsProvider.httpPort=7000 #metricsProvider.exportJvmInfo=true
其中需要区别配置的是这一部分:
zoo-1.cfg
dataDir=/usr/local/zookeeper-cluster/zoo1/data dataLogDir=/usr/local/zookeeper-cluster/zoo1/log clientPort=2181
zoo-2.cfg
dataDir=/usr/local/zookeeper-cluster/zoo2/data dataLogDir=/usr/local/zookeeper-cluster/zoo2/log clientPort=2182
zoo-3.cfg
dataDir=/usr/local/zookeeper-cluster/zoo3/data dataLogDir=/usr/local/zookeeper-cluster/zoo3/log clientPort=2183
- dataDir:数据目录配置项,myid文件位于此目录下
- dataLogDir:日志目录配置项,不设置的话默认使用dataDir配置的路径
- clientPort:表示客户端连接zookeeper集群中的节点的端口号。在生产环境的集群中,不同节点处于不同的服务器上,端口号一般相同,因为这里是单机集群,所以配置了不同的端口号
- server.id=host:port:port:id与所对应节点的数据目录下的myid文件中的id一致;两个port中,第一个port用于节点之间的通信,第二个port用于选举主节点
- tickTime:单元时间。其他配置的时间间隔都是使用tickTime的倍数来表示的
- initLimit:节点的初始化时间。用户Follower(从节点)的启动,并完成与Leader(主节点)进行数据同步的时间。Follower节点在启动过程中,会与Leader节点建立连接并完成对数据的同步,从而确定自己的起始状态。Leader节点允许Follower节点在initLimit时间内完成这项工作。该参数默认值为10,表示是参数tickTime值的10倍,必须配置且为正整数
- syncLimit:心跳最大延迟周期。该参数用于配置Leader节点和Follower节点之间进行心跳检测的最大延时时间。在ZK集群运行的过程中,Leader节点会通过心跳检测来确定Follower节点是否存活。如果Leader节点在syncLimit时间内无法获取到Follower节点的心跳检测响应,那么Leader节点就会认为该Follower节点已经脱离了和自己的同步。
启动集群
启动服务
切换到zookeeper安装目录的bin目录下,然后执行:
./zkServer.sh start ../conf/zoo-1.cfg ./zkServer.sh start ../conf/zoo-2.cfg ./zkServer.sh start ../conf/zoo-3.cfg
查看服务状态
./zkServer.sh status ../conf/zoo-1.cfg ./zkServer.sh status ../conf/zoo-2.cfg ./zkServer.sh status ../conf/zoo-3.cfg
在这里可以看见,节点2被选举成了leader,1、3是follower
客户端连接
分别打开三个终端,执行以下命令进行客户端连接
./zkCli.sh -server 127.0.0.1:2181 ./zkCli.sh -server 127.0.0.1:2182 ./zkCli.sh -server 127.0.0.1:2183
在任意节点创建一个文件夹,在其他节点就可以看到同步创建
create /test ""
以上就是在节点1上创建test文件夹,然后在节点3上发现了同步文件夹
宕机重新选举
关停节点2
./zkServer.sh stop ../conf/zoo2.cfg
等待超时时间过去后,重新查看节点状态
可以看到节点3被选举成为新的leader