版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38004638/article/details/96486706
http://zookeeper.apache.org/releases.html,http://mirrors.hust.edu.cn/apache/zookeeper/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5.5-bin.tar.gz
https://www.linuxidc.com/Linux/2016-09/135052.htm
mkdir zk
cd zk
mkdir -p data logs
tar -zxf apache-zookeeper-3.5.5-bin.tar.gz
cd apache-zookeeper-3.5.5-bin
cd conf/
cp zoo_sample.cfg /home/fastdfs/zk/zk/zoo.cfg
cat zoo.cfg |grep -v ^#
vi zoo.cfg
# Zookeeper 服务器之间或客户端与服务器之间心跳的时间间隔。 tickTime=2000 # 这个配置项是用来配置zookeeper接收客户端初始化连接能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(tickTime)长度后,zookeeper服务器还没有接收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000 = 20 秒 initLimit=10 # 这个配置项标识Leader和Follower之间发送消息,请求和应答的长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是 5 * 2000 = 10秒 syncLimit=5 # Zookeeper 保存数据的目录 #dataDir=/home/fastdfs/zk/zk/data dataDir=/home/chenyy/cyy/software/zookeeper/data # Zookeeper 服务器监听端口,用来接受客户端的访问请求 clientPort=2181 # server.myid=IP:Port1:Port2, myid是服务器的编号,一个正整数,一般是0、1、2、3等待,port1表示的是服务器与集群中的Leader服务器交换信息的端口,一般用2288,Port2表示的是万一集群中的Leader服务器宕机了,需要一个端口来重新进行宣讲,选出一个新的Leader,一般用3388 # server.1=localhost:2287:3387 |
---|
(1)配置环境变量启动
用 vim 打开 /etc/ 目录下的配置文件 profile:sudo vim /etc/profile 并在其尾部追加如下内容: # idea - zookeeper-3.5.5 config start - 2019-07-19 export ZOOKEEPER_HOME=/home/chenyy/cyy/software/zk export PATH=$ZOOKEEPER_HOME/bin:$PATH export PATH # idea - zookeeper-3.5.5 config start - 2019-07-19
使 /etc/ 目录下的 profile 文件即可生效: source /etc/profile 启动 zookeeper 服务: zkServer.sh start
(2)bin目录下启动
进入安装目录bin下,执行./zkServer.sh start ,并指定配置文件
./zkServer.sh start ../../zoo.cfg
./zkServer.sh status ../../zk/zoo.cfg
./zkServer.sh stop ../../zk/zoo.cfg
默认2181端口,./zkCli.sh
# 连接服务器 zkCli -server IP:PORT
./zkCli.sh -server 127.0.0.1:2181
# 帮助命令
help
# 获取根节点列表,默认会有一个zookeeper节点,节点列表就像linux目录一样,根节点为/
ls /
# 创建znode并关联值, create /节点名称 “值”
create /myZnode "my znode"
# 读取myZnode节点
ls /myZnode
# 修改znode
set /myZnode "my znode value string"
# 可以更新执行节点的数据内容
set /myZnode 6575675
# 获取znode
get /myZnode
# 删除单个znode
delete /myZnode
# 递归删除(删除myZnode的子节点和myZnode节点)
rmr /myZnode
# 退出客户端
Quit
在一台机器上部署了3个server,需要注意的是在集群为分布式模式下我们使用的每个配置文档模拟一台机器,也就是说单台机器及上运行多个Zookeeper实例。但是,必须保证每个配置文档的各个端口号不能冲突,除了clientPort不同之外,dataDir也不同。另外,还要在dataDir所对应的目录中创建myid文件来指定对应的Zookeeper服务器实例。
cp -rf zk zk001 & cp -rf zk zk002 & cp -rf zk zk003
server.1 | tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/zookeeper/zk/zk001/data clientPort=2182 dataLogDir=/home/zookeeper/zk/zk001/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 |
---|---|
server.2 | tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/zookeeper/zk/zk002/data clientPort=2183 dataLogDir=/home/zookeeper/zk/zk002/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 |
server.3 | tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/zookeeper/zk/zk003/data clientPort=2184 dataLogDir=/home//zookeeper/zk/zk003/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 |
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
zoo.cfg配置文件里dataDir指定的那个目录下创建myid文件,并且指定id,
改id为你zoo.cfg文件中server.1=localhost:2888:3888中的1.只要在myid头部写入1即可.
echo “1” > myid
vi myid
./zkCli.sh -server ip:port
# 启动3个zookeeper服务
./zkServer.sh start ../zk001/zoo.cfg
./zkServer.sh start ../zk002/zoo.cfg
./zkServer.sh start ../zk003/zoo.cfg
# 查看每个zookeeper对应的角色
./zkServer.sh status ../zk001/zoo.cfg
./zkServer.sh status ../zk002/zoo.cfg
./zkServer.sh status ../zk003/zoo.cfg
# 停止zookeeper服务
./zkServer.sh stop ../../zk001/zoo.cfg
./zkServer.sh stop ../../zk002/zoo.cfg
./zkServer.sh stop ../../zk003/zoo.cfg
在zookeeper下将zk文件夹复制三份,分别命名zk001,zk002,zk003
修改各自的zoo.cfg内容
server.1 | tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/zookeeper/zk001/data clientPort=2182 dataLogDir=/home/zookeeper/zk001/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 |
---|---|
server.2 | tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/zookeeper/zk002/data clientPort=2183 dataLogDir=/home/zookeeper/zk002/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 |
server.3 | tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/zookeeper/zk003/data clientPort=2184 dataLogDir=/home/zookeeper/zk003/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389 |
各自新建conf/data/myid,里面存上服务号
分别启动三个zk,再查看状态为:一主两从,leader为主机,follower为从机,说明配置完成。
进入每个目录去启动太麻烦了,在zk/bin目录启动终端,写一个批量脚本
vi start-zookeeper-all.sh
添加路径,保存并退出
/home/zookeeper/zk001/bin/zkServer.sh start
/home/zookeeper/zk002/bin/zkServer.sh start
/home/zookeeper/zk003/bin/zkServer.sh start
这时候还没有运行权限,需要添加权限:
chmod u+x start-zookeeper-all.sh
添加完成权限以后,通过批量文件就可以启动全部zookeeper了
./start-zookeeper-all.sh
ZOOKEEPER_HOME=D:\Program Files\zookeeper-3.4.12
PATH=%ZOOKEEPER_HOME%\bin
将 zoo_sample.cfg 改为 zoo.cfg,
tickTime=2000
initLimit=10
syncLimit=5
dataDir=C:\\zookeeper-3.4.5\\data
dataLogDir=C:\\zookeeper-3.4.5\\log
clientPort=2181
window环境启动zookeeper命令为zkServer.cmd
而非zkServer.cmd start或者zkServer.sh start
D:\Program Files\zookeeper-3.4.12\bin
$ zkServer.cmd
D:\Development\payment-server (master -> origin)
$ netstat -ano|grep "2181"
D:\Program Files\zookeeper-3.4.12\bin
$ zkCli.cmd -server 127.0.0.1:2181