Linux实战——Zookeeper集群安装部署

Posted 会不了一点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux实战——Zookeeper集群安装部署相关的知识,希望对你有一定的参考价值。

Zookeeper集群安装部署

简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

除了为Hadoop和HBase提供协调服务外,Zookeeper也被其它许多软件采用作为其分布式状态一致性的依赖,比如Kafka,又或者一些软件项目中,也经常能见到Zookeeper作为一致性协调服务存在。

Zookeeper不论是大数据领域亦或是其它服务器开发领域,涉及到分布式状态一致性的场景,总有它的身影存在。

安装

Zookeeper是一款分布式的集群化软件,可以在多台服务器上部署,并协同组成分布式集群一起工作。

  1. 首先,要确保已经完成了集群化环境前置准备环节的全部内容【集群化环境前置准备

  2. 【node1上操作】下载Zookeeper安装包,并解压

    # 下载
    wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
    
    # 确保如下目录存在,不存在就创建
    mkdir -p /export/server
    
    # 解压
    tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
    
  3. 【node1上操作】创建软链接

    ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper
    
  4. 【node1上操作】修改配置文件(找到对应项,进行修改)

    # 可以直接修改它给我们的实例配置文件,先将名字改为zoo.cfg
    mv /export/server/zookeeper/conf/zoo_sample.cfg /export/server/zookeeper/conf/zoo.cfg
    
    vim /export/server/zookeeper/conf/zoo.cfg
    
    
    # 修改内容如下:
    
    tickTime=2000
    # 其中dataDir:zookeeper数据存储目录
    dataDir=/export/server/zookeeper/data 
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=node1:2888:3888
    server.2=node2:2888:3888
    server.3=node3:2888:3888
    
  5. 【node1上操作】配置myid

    # 1. 创建Zookeeper的数据目录
    mkdir /export/server/zookeeper/data
    
    # 2. 创建文件,并填入1
    vim /export/server/zookeeper/data/myid
    # 在文件内填入1即可
    
  6. 【在node2和node3上操作】,创建文件夹

    mkdir -p /export/server
    
  7. 【node1上操作】将Zookeeper 复制到node2和node3(复制软链接是没有用的!!!)

    cd /export/server
    
    scp -r apache-zookeeper-3.5.9-bin node2:$PWD
    scp -r apache-zookeeper-3.5.9-bin node3:$PWD
    
  8. 【在node2上操作】

    # 1. 创建软链接
    ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper
    
    # 2. 修改myid文件
    vim /export/server/zookeeper/data/myid
    # 修改内容为2
    
  9. 【在node3上操作】

    # 1. 创建软链接
    ln -s /export/server/apache-zookeeper-3.5.9-bin /export/server/zookeeper
    
    # 2. 修改myid文件
    vim /export/server/zookeeper/data/myid
    # 修改内容为3
    
  10. 【在node1、node2、node3上分别执行】启动Zookeeper

    # 启动命令
    /export/server/zookeeper/bin/zkServer.sh start
    # 启动Zookeeper
    
  11. 【在node1、node2、node3上分别执行】检查Zookeeper进程是否启动

    jps
    # 结果中找到有:QuorumPeerMain 进程即可
    

    Reference:

    jps是jdk提供的一个查看当前java进程的小工具(全称是JavaVirtual Machine Process Status Tool)

    语法:jps [options] [hostid]
    options:

    • -q :仅输出VM标识符,不包括class

    • -l :输出完全的包名,应用主类名,jar的完全路径名

    • -v:输出jvm参数

    • -V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件

    jps –l    #输出主类或者jar的完全路径名
    jps –v    #输出jvm参数
    jps –q    #仅仅显示java进程号
    
  12. 【node1上操作】验证Zookeeper

    /export/server/zookeeper/bin/zkCli.sh
    
    # 进入到Zookeeper控制台中后,执行
    ls /
    
    # 如无报错即配置成功
    

至此Zookeeper安装完成

Zookeeper实战之单机集群模式

前一篇文章介绍了Zookeeper的单机模式的安装及应用,但是Zookeeper是为了解决分布式应用场景的,所以通常都会运行在集群模式下。今天由于手头机器不足,所以今天打算在一台机器上部署三个Zookeeper服务来组成一个Zookeeper集群。这里解压Zookeeper的安装包到/opt目录下,这里用三个目录来代表三个Zookeeper实例,分别是/opt/zookeeper1,/opt/zookeeper2和/opt/zookeeper3.

1. 首先编辑每个Zookeeper目录下的conf/zoo.cfg文件。三个配置配置文件的内容分别如下

[plain] view plain copy
 print?技术分享技术分享
  1. $ cat /opt/zookeeper1/conf/zoo.cfg  
  2. tickTime=2000  
  3. dataDir=/opt/zookeeper1/data  
  4. clientPort=2181  
  5. initLimit=10  
  6. syncLimit=5  
  7. server.1=127.0.0.1:2881:3881  
  8. server.2=127.0.0.1:2882:3882  
  9. server.3=127.0.0.1:2883:3883  

 

[plain] view plain copy
 print?技术分享技术分享
  1. $ cat /opt/zookeeper2/conf/zoo.cfg  
  2. tickTime=2000  
  3. dataDir=/opt/zookeeper2/data  
  4. clientPort=2182  
  5. initLimit=10  
  6. syncLimit=5  
  7. server.1=127.0.0.1:2881:3881  
  8. server.2=127.0.0.1:2882:3882  
  9. server.3=127.0.0.1:2883:3883  

 

[plain] view plain copy
 print?技术分享技术分享
  1. $ cat /opt/zookeeper3/conf/zoo.cfg  
  2. tickTime=2000  
  3. dataDir=/opt/zookeeper3/data  
  4. clientPort=2183  
  5. initLimit=10  
  6. syncLimit=5  
  7. server.1=127.0.0.1:2881:3881  
  8. server.2=127.0.0.1:2882:3882  
  9. server.3=127.0.0.1:2883:3883  


其中有几点需要注意
* dataDir: 三个Zookeeper实例的dataDir目录要区别开,这里分别指定到各个Zookeeper实例目录下的data目录。
* clientPort: 定义Zookeeper客户端连接Zookeeper服务端时使用的端口,这里因为是在一台机器上做的集群,所以三个实例的端口要区分开。
* server.: 定义Zookeeper集群的各个实例的的ip和端口,这里因为是在一台机器上做的集群,所以IP都定义的是127.0.0.1,但是后面的端口要区分开。

2. 创建data目录和实例id文件

 

[plain] view plain copy
 print?技术分享技术分享
  1. mkdir /opt/zookeeper1/data  
  2. mkdir /opt/zookeeper2/data  
  3. mkdir /opt/zookeeper3/data  
  4. echo 1 > /opt/zookeeper1/data/myid  
  5. echo 2 > /opt/zookeeper2/data/myid  
  6. echo 3 > /opt/zookeeper3/data/myid  

这里要注意需要在每个Zookeeper的dataDir目录下创建myid文件,内容是记录各个Zookeeper的实例ID。

3. 启动Zookeeper服务
分别进入各个Zookeeper的bin目录,然后运行“./zkServer.sh start”来启动一个Zookeeper服务。

4. 客户端连接
随便进入一个Zookeeper的bin目录,然后运行下面的命令来分别连接Zookeeper服务。

[plain] view plain copy
 print?技术分享技术分享
  1. ./zkCli.sh -server 127.0.0.1:2181  
  2. ./zkCli.sh -server 127.0.0.1:2182  
  3. ./zkCli.sh -server 127.0.0.1:2183  

在其中的一个client上创建一个znode节点

[plain] view plain copy
 print?技术分享技术分享
  1. create /mykey myvalue  

然后在别的client上查看新创建zonde节点

[plain] view plain copy
 print?技术分享技术分享
  1. get /mykey  

 

5. 查看Zookeeper状态
启动Zookeeper之后,由于Zookeeper自己会有一套leader的选举算法,所以此时如果想知道那个Zookeeper是leader可以在各个Zookeeper的bin目录运行“./zkServer.sh status”命令来查看。

如果是Leader

[plain] view plain copy
 print?技术分享技术分享
  1. $ ./zkServer.sh status  
  2. JMX enabled by default  
  3. Using config: /opt/zookeeper1/bin/../conf/zoo.cfg  
  4. Mode: leader  


如果不是Leader

 

 

[plain] view plain copy
 print?技术分享技术分享
  1. $ ./zkServer.sh status  
  2. JMX enabled by default  
  3. Using config: /opt/zookeeper3/bin/../conf/zoo.cfg  
  4. Mode: follower  

此时可以把leader的那个节点停了,然后再看查看其它两个Zookeeper实例,此时剩下的两个Zookeeper实例就会再选举出一个leader。

以上是关于Linux实战——Zookeeper集群安装部署的主要内容,如果未能解决你的问题,请参考以下文章

Zookeeper集群安装部署(超详细操作演示)—— Linux

Zookeeper实战之单机集群模式

3. linux centos6.8环境下部署zookeeper集群

Zookeeper实战分布式安装部署&客户端命令行操作(开发重点)

大数据之Zookeeper:Zookeeper分布式安装部署

Linux环境快速部署Zookeeper集群