1. 先玩起来

1.1 zk集群搭建

  1. ## 下面的每一步都需要在三台机器上都操作一遍,除非标注了不需要操作
  2. ## 准备三个虚拟机节点、或者云服务器节点
  3. 192.168.231.132 192.168.231.133 192.168.231.134
  4. ## 修改3个节点的 etc/hostname 配置主机名称(内容随意有区分就行)
  5. kafka132
  6. kafka133
  7. kafka134
  8. ## 修改3个节点的 etc/hosts 该文件可以让我们通过主机名称互通
  9. 192.168.231.132 kafka132
  10. 192.168.231.133 kafka133
  11. 192.168.231.134 kafka134
  12. ## 虚拟机防火墙、云服务器端口开放
  13. systemctl start firewalld ## 启动防火墙
  14. systemctl stop firewalld ## 关闭防火墙
  15. systemctl restart firewalld ## 重启防火墙
  16. systemctl status firewalld ## 查看防火墙状态
  17. systemctl disable firewalld ## 禁用防火墙
  18. ## 验证服务通信,随便找一个节点,比如 221 节点,ping完之后显示互通就算完成
  19. ping kafka134
  20. ## 系统需要安装jdk(每台服务都需要)
  21. 因为zkjava写的
  22. ## zk版本(每台服务都需要)
  23. zookeeper-3.4.6
  24. ## 上传zk到服务器,也可以通过复制命令,复制到其它服务器
  25. /home/software/zookeeper
  26. scp zookeeper-3.4.6.tar.gz 192.168.231.132:/home/software/zookeeper
  27. ## 解压到,/usr/local(每台服务都需要)
  28. tar -zxvf zookeeper-3.4.6.tar.gz -C /usr/local/
  29. ## 修改环境变量,vim /etc/profile
  30. export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
  31. export PATH=.:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
  32. ## 刷新环境变量
  33. source /etc/profile
  34. ## 进入文件目录
  35. cd /usr/local/zookeeper-3.4.6/conf
  36. ## 修改配置名称
  37. mv zoo_sample.cfg zoo.cfg
  38. ## 修改zoo.cfg,设置zk存储数据的目录
  39. dataDir=/usr/local/zookeeper-3.4.6/data
  40. ## 修改zoo.cfg,修改集群地址,server.集群数从0开始=ip:2888:3888(单机版就写第一行就行)
  41. server.0=bhz221:2888:3888
  42. server.1=bhz222:2888:3888
  43. server.2=bhz223:2888:3888
  44. ## 创建在配置文件中写的data
  45. mkdir /usr/local/zookeeper-3.4.6/data
  46. ## 创建文件myid
  47. vim /usr/local/zookeeper-3.4.6/data/myid
  48. ## 到此为止,Zookeeper集群环境大功告成!启动zookeeper命令
  49. 启动路径:/usr/local/zookeeper-3.4.6/bin(也可在任意目录,因为配置了环境变量)
  50. 执行命令:zkServer.sh start (注意这里3台机器都要进行启动,启动之后可以查看状态)
  51. 查看状态:zkServer.sh status (在三个节点上检验zkmode, 会看到一个leader和俩个follower),单节点的状态会看到(standalone 独立的)
  52. 集群关闭:zkServer.sh stop
  53. ## 默认端口是
  54. 2181
  55. ## 输入jps
  56. QuorumPeerMain :代表zk

1.2 配置开机自启动

  1. cd /etc/rc.d/init.d/
  2. touch zookeeper
  3. chmod 777 zookeeper
  4. vim zookeeper
  5. 开机启动zookeeper脚本:
  6. #!/bin/bash
  7. #chkconfig:2345 20 90
  8. #description:zookeeper
  9. #processname:zookeeper
  10. export JAVA_HOME=/usr/local/jdk1.8
  11. export PATH=$JAVA_HOME/bin:$PATH
  12. case $1 in
  13. start) /usr/local/zookeeper-3.4.6/bin/zkServer.sh start;;
  14. stop) /usr/local/zookeeper-3.4.6/bin/zkServer.sh stop;;
  15. status) /usr/local/zookeeper-3.4.6/bin/zkServer.sh status;;
  16. restart) /usr/local/zookeeper-3.4.6/bin/zkServer.sh restart;;
  17. *) echo "require start|stop|status|restart" ;;
  18. esac
  19. 开机启动配置:chkconfig zookeeper on
  20. 验证:
  21. chkconfig --add zookeeper
  22. chkconfig --list zookeeper
  23. 这个时候我们就可以用servicezookeeper start/stop来启动停止zookeeper服务了
  24. 使用chkconfig--add zookeeper命令把zookeeper添加到开机启动里面
  25. 添加完成之后接这个使用chkconfig--list 来看看我们添加的zookeeper是否在里面
  26. 如果上面的操作都正常的话;你就可以重启你的linux服务器了

1.3 本机启动zk

  1. ## 下载Zookeeper最新版,
  2. http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/
  3. ## 配置 /usr/local/apache-zookeeper-3.5.5-bin/conf
  4. zoo_sample.cfg 复制一份命名为zoo.cfg,也可以修改下数据存储节点,默认的也OK
  5. ## 启动Zookeeper
  6. cd /usr/local/apache-zookeeper-3.5.5-bin/bin
  7. Mac执行命令行执行 ./zkServer.sh start
  8. Windows同学执行对应的cmd文件
  9. 本地如果启动失败,可能是因为没有权限使用: sudo ./zkServer.sh start
  10. ## 启动完成以后出现这个就代表着启动成功
  11. ZooKeeper JMX enabled by default
  12. Using config: /usr/local/apache-zookeeper-3.5.5/bin/../conf/zoo.cfg
  13. Starting zookeeper ... STARTED
  14. ## 进入客户端,运行验证
  15. 命令: ./zkCli.sh
  16. 也可能没有权限进入失败使用: sudo ./zkCli.sh
  17. 最后打印出一堆东西最后一行是
  18. WatchedEvent state:SyncConnected type:None path:null
  19. ## 关闭Zookeeper
  20. ./zkServer.sh stop

1.4 zk客户端常见命令

  1. ## 进入客户端
  2. zkCli.sh
  3. ## 查找
  4. ls /
  5. ls /zookeeper
  6. ## 创建并赋值,前者是节点名称,后者是节点存储的值
  7. create /imooc zookeeper
  8. ## 获取
  9. get /imooc
  10. ## 重新设置值
  11. set /imooc zookeeper1314
  12. ## 删除节点
  13. delete /imooc

2. 理论知识

image.png
1. zk是一个树形文件结构,比较像目录结构
1. 红色节点
1. 持久节点,zk的会话结束,重启都不会消失,除非手动删除
3. 黄色节点
1. 瞬时节点,zk重启或者连接的会话断开都会消失
1. 它不允许有子节点
1. 有序:创建这些节点,它的名称是会按照序号排序的