• zookeeper3.5.5集群部署


           ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。ZooKeeper是作为分布式协调服务,是不需要依赖于Hadoop的环境,也可以为其他的分布式环境提供服务。

          zookeeper有单机、伪集群、集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式。下边对这三种部署方式逐一进行讲解。

    一、单机安装

    准备:

    关闭防火墙:systemctl stop firewalld.service
    禁止防火墙自动启动:systemctl disable firewalld.service

    关闭selinux : setenforce 0
    禁止selinux启动:vim /etc/selinux/config

    SELINUX=disabled

    各节点的host解析:

    10.0.0.11 node01
    10.0.0.12 node02
    10.0.0.13 node03

    1.1 下载
    进入要下载的版本的目录,选择.tar.gz文件下载,这里我们选择最新版
    下载链接:http://archive.apache.org/dist/zookeeper/

    wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz

    1.2 安装
    使用tar解压要安装的目录即可
    这里以解压到/usr/local,实际安装根据自己的想安装的目录修改(注意如果修改,那后边的命令和配置文件中的路径都要相应修改)

    tar xf apache-zookeeper-3.5.5-bin.tar.gz
    -C /usr/local/src/ ln -s /usr/local/src/apache-zookeeper-3.5.5-bin /usr/local/zookeeper

    1.3 配置
    在主目录下创建data和logs两个目录用于存储数据和日志:

    mkdir  -p /data/zookeeper/{data,logs}

    在conf目录下新建zoo.cfg文件,写入以下内容保存:

    vim /usr/local/zookeeper/conf/zoo.cfg

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

    添加环境变量:

    echo -e 'export ZOOKEEPER_HOME=/usr/local/zookeeper
    export PATH=$ZOOKEEPER_HOME/bin:$PATH' >>/etc/profile
    source /etc/profile

    1.4 启动和停止
    进入bin目录,启动、停止、重启(start、stop、restart和status)分和查看当前节点状态(包括集群中是何角色)别执行:

    zkServer.sh start

    二、伪集群模式
    伪集群模式就是在同一主机启动多个zookeeper并组成集群,下边以在node01主机上创3个zookeeper组集群为例。将单节点的zookeeper,复制成zookeeper1/zookeeper2/zookeeper3三份。

    2.1 zookeeper1配置
    zookeeper1配置文件修改如下:

    vim /usr/local/zookeeper1/conf/zoo.cfg

    tickTime=2000
    dataDir=/usr/local/zookeeper1/data
    dataLogDir=/usr/local/zookeeper1/logs
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=node01:2888:3888
    server.2=node01:4888:5888
    server.3=node01:6888:7888

    zookeeper1的/data/zookeeper/data/myid配置如下:

    echo '1' > /data/zookeeper/data/myid

    2.2 zookeeper2配置
    zookeeper2配置文件conf/zoo.cfg修改如下:

    vim /usr/local/zookeeper2/conf/zoo.cfg

    tickTime=2000
    dataDir=/usr/local/zookeeper2/data
    dataLogDir=/usr/local/zookeeper2/logs
    clientPort=3181
    initLimit=5
    syncLimit=2
    server.1=node01:2888:3888
    server.2=node01:4888:5888
    server.3=node01:6888:7888

    zookeeper2的/data/zookeeper/data/myid配置如下:

    echo '2' > /data/zookeeper/data/myid

    2.3 zookeeper3配置
    zookeeper3配置文件conf/zoo.cfg修改如下:

    vim /usr/local/zookeeper3/conf/zoo.cfg

    tickTime=2000
    dataDir=/usr/local/zookeeper3/data
    dataLogDir=/usr/local/zookeeper3/logs
    clientPort=4181
    initLimit=5
    syncLimit=2
    server.1=node01:2888:3888
    server.2=node01:4888:5888
    server.3=node01:6888:7888

    zookeeper3的/data/zookeeper/data/myid配置如下:

    echo '3' > /data/zookeeper/data/myid

    启动zookeeper,启动顺序随意没要求。

    zkServer.sh start

    三、集群模式
    集群模式就是在不同主机上安装zookeeper然后组成集群的模式;下边以在node01、node02和node03三台主机为例。将第1.1到1.3步中安装好的zookeeper打包复制到node02和node03上,并都解压到同样的目录下。

    3.1 conf/zoo.cfg文件修改
    三个zookeeper的conf/zoo.cfg修改如下:

    vim /usr/local/zookeeper/conf/zoo.cfg

    tickTime=2000
    dataDir=/data/zookeeper/data
    dataLogDir=/data/zookeeper/logs
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=node01:2888:3888
    server.2=node02:2888:3888
    server.3=node03:2888:3888

    #2888端口号是zookeeper服务之间通信的端口,而3888是zookeeper与其他应用程序通信的端口,对于137和138,由于安装目录都是zookeeper所以dataDir和dataLogDir不需要改变,又由于在不同机器上所以clientPort也不需要改变
    所以此时137和138的conf/zoo.cfg的内容与136一样即可。
    3.2 /data/zookeeper/data/myid文件修改
    136 /data/zookeeper/data/myid修改如下:

    echo '1' > /data/zookeeper/data/myid

    137 /data/zookeeper/data/myid修改如下:

    echo '2' > /data/zookeeper/data/myid

    138 /data/zookeeper/data/myid修改如下:

    echo '3' > /data/zookeeper/data/myid

    启动zookeeper集群,启动顺序随意没要求。

    zkServer.sh start

    四、 验证Zookeeper集群是否安装成功。
    可以验证一下是否启动成功:

    ps -ef | grep zookeeper

    4.1分别在3台虚拟机上查看zookeeper的状态。

    zkServer.sh status

    4.2连接其中一台的zookeeper

    zkCli.sh -server node02:2181

    4.3写入数据

    create /test data

    4.4再连接另外一台的zookeeper

    zkCli.sh -server node03:2181

    4.5如果能获取到刚才写入的数据,则Zookeeper集群安装成功。

    get /test

    五、报错及处理
    应用连接zookeepr报错:Session 0x0 for server node01/node01:2181,unexpected error,closing socket connection and attempting reconnect;
    先看端口能否telnet通,如果通则使用zkServer.sh status查看zk是否确实已启动,没启查看zookeeper.out中的报错。
    zookeeper.out中报错:“zookeeper address already in use”;显然端口被占用,要么是其他进程占用了配置的端口,要么是上边配置的clientPort和server中的端口有重复。
    zookeeper.out中报错:Cannot open channel to 2 at election address /node01:3888;这应该只是组成集群的node02节点未启动,到node02启动起来zk即会正常。

  • 相关阅读:
    log4j日志基本配置
    MyBatis基本应用
    Java properties配置文件
    Java DAO模式
    Java方式 MySQL数据库连接
    bug 复制代码没有审查,没有完全就该变量名
    cocos3 深入理解tiledmap
    cocos3 深入理解单例模式
    cocos3 CC_BREAK_IF(m_pGameMap==NULL);
    cocos2d3 宏定义屏幕宽高,这样就不用重复获取了
  • 原文地址:https://www.cnblogs.com/wzxmt/p/11031480.html
Copyright © 2020-2023  润新知