设为首页 收藏本站
查看: 823|回复: 0

[经验分享] zookeeper群集

[复制链接]

尚未签到

发表于 2019-1-8 09:03:52 | 显示全部楼层 |阅读模式
  环境:建议3-5台服务器
  ip                      hostname        id
  10.100.11.13            z1              1
  10.100.11.14            z2              2
  10.100.11.17            z3              3
  绑定 ip hostname到 /etc/hosts
  1 java环境部署
  1.1 下载jdk  jdk-8u77-linux-x64.tar.gz http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.tar.gz
  把 jdk-8u77-linux-x64.tar.gz 解压为 /usr/local/jdk
  添加环境变量
  /etc/profile 文件中添加
  ## JAVA
  export JAVA_HOME=/usr/local/jdk
  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  并把 /usr/local/jdk/bin添加到 PATH中
  . /etc/profile重载 profile配置
  2 zookeeper安装
  以z1为例:
  把zookeeper-3.4.8.tar.gz (www.apache.org下载)解压到到 /usr/local/zookeeper
  /usr/local/zookeeper/bin添加到PATH环境变量中
  2.1 配置zoo.cfg
  /usr/local/zookeeper/conf/zoo.cfg
  ######
  tickTime=2000
  dataDir=/var/lib/zookeeper
  clientPort=2181
  initLimit=5
  syncLimit=2
  server.1=z1:2888:3888
  server.2=z2:2888:3888
  server.3=z3:2888:3888
  #####
  注意server.后面的号要与myid号对应上,范围0-255
  snapshot、log文件将保存在dataDir目录下,配置dataLogDir=/var/lib/zookeeper/logs,log将生成于dataLogDir目录下
  2.2 创建 myid 文件,保存id号。存放在zoo.cfg文件中指定的dataDir目录下
  echo 1 > /var/lib/zookeeper/myid
  2.3 zookeeper启动脚本
  先在 /usr/local/zookeeper/bin/zkEnv.sh 在#!/usr/bin/env bash行下添加下面这行
  export JAVA_HOME=/usr/local/java/jdk
  vi /etc/init.d/zk
  ##############
  #!/bin/sh
  #
  # Startup script for the ZooKeeper daemon
  #
  # processname: ZooKeeper
  # pidfile: /var/run/ZooKeeper.pid
  # config: /usr/local/zookeeper/conf/zoo.cfg
  # chkconfig: - 21 79
  # description: Start and stop ZooKeeper
  # Source function library
  . /etc/rc.d/init.d/functions
  RETVAL=0
  prog="ZooKeeper"
  prog_bin=/usr/local/zookeeper/bin/zkServer.sh
  start() {
  echo -n $"Starting $prog: "
  daemon $prog_bin start
  #/usr/local/zookeeper/bin/zkServer.sh start
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
  }
  stop() {
  echo -n $"Stopping $prog: "
  daemon $prog_bin stop
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
  }
  status() {
  $prog_bin status
  }
  # See how we were called.
  case "$1" in
  start)
  start
  ;;
  stop)
  stop
  ;;
  restart)
  stop
  start
  ;;
  status)
  status
  ;;
  *)
  echo "Usage: $0 {start|stop|restart|status}"
  exit 1
  esac
  exit $RETVAL
  ##############
  chmod +x /etc/init.d/zk
  2.3.2 CentOS 7 zookeeper启动脚本
  vi /usr/lib/systemd/system/zk.service
  ##############
  [Unit]
  Description=Startup script for the ZooKeeper daemon
  Documentation=http://zookeeper.apache.org/
  After=network.target remote-fs.target nss-lookup.target
  [Service]
  Type=forking
  ExecStart=/usr/local/zookeeper/bin/zkServer.sh start
  ExecReload=/bin/kill -HUP $MAINPID
  ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop
  PrivateTmp=true
  [Install]
  WantedBy=multi-user.target
  ##############
  systemctl enable zk
  systemctl start zk
  z2, z3参照z1,注意myid文件内容的 ID号要与配置文件中的 server.x对应上
  PS:
  zkServer.sh status        查看状态
  zkCli.sh -server ip:2181        # zk cli操作
  ls /            # 列出节点
  create /web1  'webgroup'        # 创建节点
  默认情况,启动脚本启动zookeeper失败原因:
  首先需要知道 交互式shell和非交互式shell、登录shell和非登录shell是有区别的
  在登录shell里,环境信息需要读取/etc/profile和~ /.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被 --noprofile选项禁止了; 在非登录shell里,环境信息只读取 /etc/bash.bashrc和~/.bashrc
  手工执行是属于登陆shell,脚本执行数据非登陆shell,而我的linux环境配置中只对/etc/profile进行了jdk1.7等环境的配置,所以脚本执行/usr/local/zookeeper/bin/zkServer.sh start 启动zookeeper失败了
  解决方法(下面3个方法任选1):
  1、脚本代码中添加“source /etc/profile;” 改为:ssh crxy$i "source /etc/profile;/usr/local/zookeeper/bin/zkServer.sh start"
  2、把profile的配置信息echo到.bashrc中  echo 'source /etc/profile' >> ~/.bashrc
  3、在/zookeeper/bin/zkEnv.sh的中开始位置添加 export JAVA_HOME=/usr/local/jdk1.7.0_45(就像hadoop中对hadoop-env.sh的配置一样)
  若其中一个节点故障,如突然停电、磁盘故障再修复,导致zk启动失败,
  ```

  zkServer.sh status
  ZooKeeper JMX enabled by default
  Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
  Error contacting service. It is probably not running.
  查看zookeeper.out
  2018-02-23 14:10:29,993 [myid:] - INFO  [main:QuorumPeerConfig@103] - Reading configuration from: /usr/local/zookeeper/bin/../conf/zoo.cfg
  2018-02-23 14:10:30,003 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.1.75 to address: /192.168.1.75
  2018-02-23 14:10:30,004 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.1.69 to address: /192.168.1.69
  2018-02-23 14:10:30,004 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.1.68 to address: /192.168.1.68
  2018-02-23 14:10:30,004 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.1.214 to address: /192.168.1.214
  2018-02-23 14:10:30,004 [myid:] - INFO  [main:QuorumPeer$QuorumServer@149] - Resolved hostname: 192.168.1.213 to address: /192.168.1.213
  2018-02-23 14:10:30,004 [myid:] - INFO  [main:QuorumPeerConfig@331] - Defaulting to majority quorums
  2018-02-23 14:10:30,006 [myid:5] - INFO  [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
  2018-02-23 14:10:30,006 [myid:5] - INFO  [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
  2018-02-23 14:10:30,007 [myid:5] - INFO  [main:DatadirCleanupManager@101] - Purge task is not scheduled.
  2018-02-23 14:10:30,014 [myid:5] - INFO  [main:QuorumPeerMain@127] - Starting quorum peer
  2018-02-23 14:10:30,021 [myid:5] - INFO  [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:4180
  2018-02-23 14:10:30,025 [myid:5] - INFO  [main:QuorumPeer@1019] - tickTime set to 2000
  2018-02-23 14:10:30,025 [myid:5] - INFO  [main:QuorumPeer@1039] - minSessionTimeout set to -1
  2018-02-23 14:10:30,026 [myid:5] - INFO  [main:QuorumPeer@1050] - maxSessionTimeout set to -1
  2018-02-23 14:10:30,026 [myid:5] - INFO  [main:QuorumPeer@1065] - initLimit set to 5
  2018-02-23 14:10:45,543 [myid:5] - ERROR [main:QuorumPeer@557] - Unable to load database on disk
  java.io.IOException: Transaction log: /data/zookeeper/logs/version-2/log.24f7000209f2 has invalid magic number 1331917856 != 1514884167
  at org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.inStreamCreated(FileTxnLog.java:584)
  at org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.createInputArchive(FileTxnLog.java:600)
  at org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.goToNextLog(FileTxnLog.java:566)
  at org.apache.zookeeper.server.persistence.FileTxnLog$FileTxnIterator.next(FileTxnLog.java:648)
  at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:158)
  ```
  加载数据数据失败
  处理方法:
  删除 dataDir 目录下除文件myid外的其他文件或目录,然后重启zk




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660577-1-1.html 上篇帖子: 运维之我的docker 下篇帖子: ZooKeeper监控(taokeeper)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表