最近想研究一下zookeeper的源码,为了理论联合实践,我搭建了一个简单的zookeeper集群,现在把步骤写在下面
本人所搭建的集群是在3台ubuntu的虚拟机上,ip
分别如下所示
server.1=10.112.2.88
server.2=10.112.2.140
server.3=10.112.2.43
1、配置zoo.cfg
参数说明
tickTime:zookeeper中使用的基本时间单位,毫秒值
initLimit:zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间
syncLimit:该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度
dataDir:数据目录,存放持久化的数据所在地址
dataLogDir:zookeeper生成日志的地方,这个与zookeeper重启时选举领导有关
clientPort:监听客户端的端口
server.1=ip:port1:port2:这是配置zookeeper的列表,`port1`表示各个server之间的交流数据的端口,`port2`表示server之间的选举端口
2、建立两个目录
mkdir /tmp/zookeeper
mkdir /tmp/zookeeper/{log,data}
3、创建myid文件,每台机器的myid中的值递增
#host1
echo "1" >> /tmp/zookeeper/myid
#host2
echo "2" >> /tmp/zookeeper/myid
#host3
echo "3" >> /tmp/zookeeper/myid
4、在bin目录下使用./zkServer.sh start
分别启动zkServer,然后使用./zkServer.sh status
来查看zkServer的主从情况
5、使用zkCli进行登录,在主机创建一个节点,然后看看从机有什么变化
从上面可以看到,在主机创建的节点会被复制到从机上面
6、下面我们来看看,把leader关闭,看看会不会重新选举
可以看到从原先的从机客户端退下来之后发现进行了新一轮的选举
7、继续把主机关闭看看
可以看到,当只剩下一台主机的时候,zookeeper集群就无法继续工作了
至于为什么需要向上面一样的设置,就需要详细的了解zookeeper的ZAB协议了,可以参考一下其它的zookeeper博客和文档