• Zookeeper笔记(三)部署与启动Zookeeper


    下载zookeeper安装包

    去Zookeeper官网,下载地址http://zookeeper.apache.org/releases.html
    建议下载稳定版本,
    我下载的是zookeeper-3.4.6.tar.gz,解压到合适的目录,
    就可以进行配置和启动。

    为了操作简便,配置环境变量:
    #Set ZooKeeper Enviroment
    export ZK_HOME=/data/zookeeper-3.4.6
    export PATH=$PATH:$ZK_HOME/bin:$ZK_HOME/conf

    修改配置文件zoo.cfg

    1.单机模式

    tickTime=2000
    dataDir=/data/zookeeper/data
    dataLogDir=/data/zookeeper/logs
    clientPort=2182

    tickTime: zookeeper中使用的基本时间单位, 毫秒值
    dataDir: 数据目录. 可以是任意目录
    dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数,将使用和dataDir相同的设置
    clientPort: 监听client连接的端口号

    2.集群模式

    tickTime=2000
    dataDir=/data/zookeeper/data
    dataLogDir=/data/zookeeper/logs
    clientPort=2182
    initLimit=5
    syncLimit=2
    server.1=192.168.106.101:2888:3888
    server.2=192.168.106.102:2888:3888
    server.3=192.168.106.103:2888:3888

    initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s.
    syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.
    server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.

    3.伪集群模式

    tickTime=2000
    dataDir=/data/zookeeper/data
    dataLogDir=/data/zookeeper/logs
    clientPort=2182
    server.1=127.0.0.1:2880:3880
    server.2=127.0.0.1:2881:3881
    server.3=127.0.0.1:2882:3882

    启动和关闭zookeeper

    ./zkServer.sh start
    ./zkServer.sh stop

    启动zookeeper中的常见问题

    1. 启动zookeeper后出现noClassFound等等错误,例如:

    Exception in thread "main" java.lang.NoSuchMethodError: method java.lang.management.ManagementFactory.getPlatformMBeanServer with signature ()Ljavax.management.MBeanServer; was not found.

      at org.apache.zookeeper.jmx.ManagedUtil.registerLog4jMBeans(ManagedUtil.java:48)

      at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:114)

      at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:103)

      at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:7

    可能原因是该服务器的jdk版本不正确,或是环境变量未设置好。

    例如,原来的linux下已经装有jdk-1.4,然后又安装了新版本的jdk-1.6,我们按照网上教程的步骤安装好zookeeper并设置环境变量后,

    echo $JAVA_HOME显示java-1.6,

    但是用java -version命令发现,仍然显示java-1.4,说明环境变量未配好。zookeeper读取的jdk版本仍然是旧版本的jdk-1.4。

    解决方法是在/etc/bashrc文件的末尾,

    export JAVA_HOME=/usr/java/jdk1.6.0_23

    export JRE_HOME=$JAVA_HOME/jre

    export PATH=JAVAHOME/bin:JAVAHOME/bin:PATH

    //这里要注意,应该将PATHPATH放在尾部而不是放在头部,网上有安装教程写的是PATH :JAVAHOME/binzookeeperJAVAHOME/bin,这样zookeeper读取的将是PATH中的jdk旧版本而出错。

    export CLASSPATH=.:$JAVA_HOME/lib/*.jar

    2. 当一台或某台机器反复出现cannot open channel to xxxx:2888/3888,报错(例如无法与leader进行同步等等错误),无法完成选举(这个错误以前一直有出现,但是时有时无,不知道为什么)。

    可能原因是防火墙开启,导致某台机器的端口不能开启,一般是2888不能开启。linux下的很多分布式应用会要求关闭防火墙。。。所以还是干脆关闭算了。今天把防火墙直接关闭后zookeeper启动正常。

    用命令service iptables status查看,显示一系列消息,表示防火墙处于开启状态;可以用service iptables stop关闭防火墙。但是这个只是临时关闭防火墙。

    要使系统启动时不自动启动防火墙,则可以使用命令chkconfig –list iptables查看防火墙信息,chkconfig iptables off关闭防火墙。以后若要打开,用chkconfig iptables on命令。

    3.Zookeeper能够正常启动,但是显示如下错误:

    Starting zookeeper…

    ./zkServer.sh: line 80: /home /sysdata/zookeeper/zookeeper-data/zookeeper_server.pid: No such file or directory

    STARTED

    在配置文件zoo.cfg文件中指定了zookeeper启动的pid文件的生成位置:dataDir=/home /sysdata/zookeeper/zookeeper-data,但是我们发现该pid并没有生成。而且想要停止zookeeper显然也不能成功:

    Stopping zookeeper ...

    error: could not find file /zookeeper_server.pid。

    zoo.cfg文件中的给dataDir路径赋值前多了一个空格,zookeeper在读取此配置文件时会把空格也读进文件名,将此空格删去后zookeeper启动、关闭就正常了。

  • 相关阅读:
    LinqToSQL4
    java 连接数据库操作
    javadoc生成文档报错 java.lang.IllegalArgumentException
    maven下载依赖jar包,Could not transfer artifact xxxxx
    关于meaven导入依赖出现Failed to read artifact descriptor for ***包
    mybatis-plus项目自动生成代码
    Spring boot 出现 "org.springframework.beans.factory.UnsatisfiedDependencyException" 错误
    vs 调试显示用户关闭隐式函数计算
    vue api排放顺序及属性,用于理解vue
    vue 拦截器
  • 原文地址:https://www.cnblogs.com/binyue/p/4744085.html
Copyright © 2020-2023  润新知