1. 单机搭建
https://blog.csdn.net/weixin_42207486/article/details/80647802
下载 wget http://apache.fayea.com/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
不要占用8080端口,容易冲突, vi zoo.cfg
admin.serverPort=8081
2.集群搭建
Zookeeper集群中节点个数一般为奇数个(>=3),若集群中Master挂掉,剩余节点个数在半数以上时,就可以推举新的主节点,继续对外提供服务, 注意: 每个节点的配置文件都要一样的
https://www.cnblogs.com/wrong5566/p/6056788.html
3.eclipse 插件
http://www.massedynamic.org/eclipse/updates/
4.运行管理/错误定位
4.1运行日志
log4j用于记录zookeeper集群服务器运行日志,该日志的配置地址在conf/目录下的log4j.properties文件中
zookeeper.out是一个控制台的重定向文件(如果使用supervisort启动zookeeper,可能被重定向为其他目录下的文件名),
可以直接修改为log4的日志文件https://www.iteye.com/blog/yangyoupeng-cn-fujitsu-com-1922459
4.节点 node
//flags有4种取值:
//0:永久,除非手动删除
//zk.FlagEphemeral = 1:短暂,session断开则改节点也被删除
//zk.FlagSequence = 2:会自动在节点后面添加序号,如
//3:Ephemeral和Sequence,即,短暂且自动添加序号
Create(path string, data []byte, flags int32, acl []ACL)
注意: /mytest/node 和 /mytest/node/ 不相等, 创建节点的时候,父节点一定要存在,不支持创建多级目录节点
5.go-zookeeper
conn := getConnect(zkList) //具备自动重连功能,每次返回一个新连接
bexit, _, ech, err := conn.ExistsW(path1) //判断节点是否存在,func (c *Conn) ExistsW(path string) (bool, *Stat, <-chan Event, error), bexit:节点是否存在 不存在返回false, err:访问是否出错,如果节点不存在ech也不为空,当创建该节点的时候,该通道会有值
只会生效一次
Event的读取一定要在其他协程,否则会阻塞
go watchCreataNode(ech)