• zookeeper-3.4.5安装&3台机器安装之后 ./zkServer.sh status 之后会显示“Error contacting service. It is probably not running.”的解决办法


    安装文件上传工具:
    yum install lrzsz
    成功安装后有如下的提示:
    Complete!
    [root@server01 apps]# yum install lrzsz
    Loaded plugins: fastestmirror, refresh-packagekit, security
    Loading mirror speeds from cached hostfile
    * base: mirrors.zju.edu.cn
    * extras: mirrors.sohu.com
    * updates: mirrors.sohu.com
    Setting up Install Process
    Package lrzsz-0.12.20-27.1.el6.i686 already installed and latest version
    Nothing to do
    [root@server01 apps]#
    如果要上传文件,则直接输入:rz
    可以直接选中文件,也可以直接拖动文件
    1.首先,复制2台机器,总共即为3台。具体命令为:
    ------------------------------------------------------------------------
    克隆流程:
    CentOS->右键->manager->clone->从当前克隆或者选择快照->Create a full clone->取名->完成。
    克隆原理:克隆之后,所有的东西都复制,网卡也一起复制过去。那么eth0会变成eth1.
    也即克隆之后的CentOS1会将eth0给停掉,进而重新分配一个网卡eth1.
    为了方便使用,我们将eth1改回至eth0:
    解决克隆后eth0不见的问题
    --------------------------------------------------------------这事实上是day01的杂记的内容------------------
    直接修改 /etc/sysconfig/network-script/ifcfg-eth0 用户修改ip
    删掉UUID HWADDR
    修改IPADDR

    配置静态地址(也可不配)

    保存vi的配置,还可以用快捷键:在一般模式下,按住SHIFT,连按两下ZZ。也可以保存退出。
    然后:
    rm -rf  /etc/udev/rules.d/70-persistent-net.rules
    当然,也可以不删除这个文件,而是将其中的eth1的物理地址复制给eth0,然后删掉eth1的配置。


    然后 reboot
    -------------------------------------------------------------------------
    全局窗口打开方式(即批量操作过程):查看-交互窗口
    --------------------------------------------------------------------------
    2.然后,为每一台服务器安装jdk(zookeeper是java程序,必须先有jdk环境)
    ##########安装jdk的过程:
    **解压安装包
    tar -zxvf jdk-7u45-linux-x64.tar.gz -C apps/
    **然后修改环境变量
    vi /etc/profile
    在文件最后添加
    export JAVA_HOME=/root/apps/jdk1.7.0_45
    export PATH=$PATH:$JAVA_HOME/bin
    保存退出

    **然后重新加载环境变量
    source /etc/profile

    **查看当前的PATH路径**
    $PATH
    -bash: /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin: No such file or directory
    3.接着,可以通过“发送交互到所有回话”的方式(即批量方式),为每一台服务器安装zookeeper。
    tar -zxvf zookeeper-3.4.5.tar.gz
    删除一些无关文件:
    rm -rf src/ *.xml *.txt
    rm -rf docs dist-maven/
    ---------------------
    然后,对zookeeper进行配置
    cd conf
    zoo_sample.cfg 是样本文件,不生效的,需要将其拷贝出来,生成zoo.cfg
    cp zoo_sample.cfg zoo.cfg
    对zoo.cfg进行修改
    将dataDir=/tmp/zookeeper 修改为dataDir=/apps/zkdata (这个路径是自由定义的,但是不要放在tmp目录下,因为这是临时文件)
    2181是端口问题,事实上还有其他的别的端口,这要在防火墙中进行配置,非常麻烦,正确的处理方法是把它关了,在正式环境中也是把它关了(一贯的做法),
    因为zookeeper是内部网络进行处理的,不会向外暴露。
    关闭防火墙:service iptables stop
    最关键的是,写一下这台机器里有几台机器:
    在zoo.cfg最后添加:(server后面的数字是自己写的,192.168.137.129是ip地址,也可以用主机名)
    server.1=192.168.137.129:2888:3888
    server.2=192.168.137.130:2888:3888
    server.3=192.168.137.131:2888:3888
    (1,2,3称为myid,需要记录到数据文件夹dataDir中)
    首先创建文件夹:
    mkdir /apps/zkdata
    进入目录:
    cd /apps/zkdata
    写文件进去,文件名称就叫myid:echo 1 > myid
    在其它的机器中分别写:echo 2 > myid
    echo 3 > myid
    ---------------然后关防火墙:service iptables stop
    然后批量操作,启动zookeeper:
    cd /apps
    -------------------------------------------------------------------------
    出现的问题:
    [root@server01 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running.
    就是通过命令jsp查询明明发现zookeeper已经在启动,可是./zkServer.sh status却显示Error contacting service. It is probably not running.
    这里有这么几个原因:
    1)zookeeper是集群的概念,务必保证2台或2台以上的机器正常启动,才有主从的概念(leader或者是follower)。
    另外jps这个命令是"可以列出本机所有Java进程的pid",因为zookeeper是java程序,所以通过jps命令来查看。
    正常启动的话会显示:
    [root@server02 bin]# jps
    3076 Jps
    2979 QuorumPeerMain
    2)如果确定已经至少是2台机器成功启动,仍然出现这种结果,则按照以下的方式可以解决。
    a)关闭防火墙:service iptables stop
    #查看防火墙状态
    service iptables status
    #关闭防火墙
    service iptables stop
    #查看防火墙开机启动状态
    chkconfig iptables --list
    #关闭防火墙开机启动
    chkconfig iptables off
    b)修改ip地址映射表 vi /etc/hosts,这里需要修改3台机器中的hosts文件。

    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.137.129 server01
    192.168.137.130 server02
    192.168.137.131 server03
    c)修改zookeeper的配置文件(3台服务器均要配置)
    进入/zookeeper-3.4.5/conf,将zoo_sample.cfg替换为zoo.cfg
    然后vi zoo.cfg,对zoo.cfg中的内容进行修改。第一个是dataDir要修改,dataDir=/apps/zkdata
    另一个是在文件的末尾添加:
    server.1=server01:2888:3888
    server.2=server02:2888:3888
    server.3=server03:2888:3888

    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just
    # example sakes.
    #dataDir=/tmp/zookeeper
    dataDir=/apps/zkdata
    # the port at which the clients will connect
    clientPort=2181
    #
    # Be sure to read the maintenance section of the
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    server.1=server01:2888:3888
    server.2=server02:2888:3888
    server.3=server03:2888:3888
    d)然后根据配置文件总的数据目录dataDir在相应的路径上建立文件夹
    mkdir /apps/zkdata
    进入文件夹: cd zkdata
    依次在三台服务器中写入3个文件myid
    在server01中的zkdta中:echo 1 > myid
    在server02中的zkdta中:echo 2 > myid
    在server03中的zkdta中:echo 3 > myid
    e)写完之后,可以启动zookeeper服务
    进入bin目录:
    cd /apps/zookeeper-3.4.5/bin
    可以批量启动:./zkServer.sh start
    查看启动后的状态: ./zkServer.sh status
    这时3台机器的结果如下:
    ----------------------第一台机器----------------------------------------

    [root@server01 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: follower
    ----------------------第二台机器----------------------------------------
    [root@server02 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: leader
    ----------------------第三台机器----------------------------------------
    [root@server03 bin]# ./zkServer.sh status
    JMX enabled by default
    Using config: /apps/zookeeper-3.4.5/bin/../conf/zoo.cfg
    Mode: follower
    -------------------------------------
    由此可见:有leader和follower这种主从之分了。
    f)服务已经启动之后,再次切换到zkdata目录下看看文件:
    [root@server03 apps]# cd zkdata
    [root@server03 zkdata]# ll
    total 12
    -rw-r--r--. 1 root root 2 Aug 4 23:55 myid
    drwxr-xr-x. 2 root root 4096 Aug 5 01:52 version-2
    -rw-r--r--. 1 root root 4 Aug 5 01:52 zookeeper_server.pid
    ----------
    这时候已经发现zkdata下面已经不是myid这一个文件了,多了2个。
    很多人说./zkServer.sh status 之后会显示Error contacting service. It is probably not running.(这是最大的问题
    然后又重新去配置hosts,之类之类。总是得不到结果。原因在于zkdata下的文件已经发生了变化。这就是所谓的脏数据
    所以正确的做法,把机器reboot一下。然后把zkdata下的文件全部删除:rm -rf /* 然后再echo 1 > myid 等等。
    这样一定能得到结果了。另外,单独启动一台仍然得不到结果,至少要两台以上才有leader和follower的区别了。

  • 相关阅读:
    yum命令速查
    5分钟理解编译系统
    Nginx(一)安装及启停
    Linux时间命令
    常用七种排序的python实现
    python迭代器、生成器、装饰器
    LeetCode【第217题】Contains Duplicate
    LeetCode【第1题】Two Sum
    python【第二十篇】Django表的多对多、Ajax
    不要问我DO在哪里?
  • 原文地址:https://www.cnblogs.com/osttwz/p/7290802.html
Copyright © 2020-2023  润新知