zoukankan      html  css  js  c++  java
  • 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例

    centos7.1下 ZooKeeper 集群安装配置+Python实战范例

    下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

    解压: tar zxvf zookeeper-3.4.9.tar.gz -C /opt/

    改名:cd /opt/ && mv zookeeper-3.4.9 zookeeper && cd zookeeper 

    建立 data目录 
    mkdir data

    分布式模式配置
    ZooKeeper集群一般被称为ZooKeeper ensemble,或者 quorum.

    2.1 准备5台机器
    假设有五台机器,hostname和ip对应关系是: 
    192.168.48.13 hzmaster1
    192.168.48.17 hzmaster2
    192.168.48.16 hzslave1
    192.168.48.5 hzslave2
    192.168.48.12 hzslave3

    ZooKeeper不存在明显的master/slave关系,各个节点都是服务器,leader挂了,会立马从follower中选举一个出来作为leader.
    由于没有主从关系,也不用配置SSH无密码登录了,各个zk服务器是自己启动的,互相之间通过TCP端口来交换数据。

    2.2 修改配置文件/opt/zookeeper/conf/zoo.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/zookeeper/data
    clientPort=2181
    server.0=192.168.48.13:2888:3888
    server.1=192.168.48.17:2888:3888
    server.2=192.168.48.16:2888:3888
    server.3=192.168.48.5:2888:3888
    server.4=192.168.48.12:2888:3888

    我一般把服务器程序,即需要启动daemon进程的程序,放在单独的用户里安装;且用户的数据,放在local/var下面,所以我的dataDir是/home/zookeeper/local/var/zookeeper。

    2.3 myid文件
    要在每台机器的dataDir下,新建一个myid文件,里面存放一个数字,用来标识当前主机。
    hzmaster1:$ echo "0" >>/opt/zookeeper/data/myid
    hzmaster2:$ echo "1" >>/opt/zookeeper/data/myid
    hzslave1:$ echo "2" >>/opt/zookeeper/data/myid
    hzslave2:$ echo "3" >>/opt/zookeeper/data/myid
    hzslave3:$ echo "4" >>/opt/zookeeper/data/myid

    2.4 启动每台机器
    hzmaster1:$ /opt/zookeeper/bin/zkServer.sh start
    hzmaster2:$ /opt/zookeeper/bin/zkServer.sh start
    hzslave1:$ /opt/zookeeper/bin/zkServer.sh start
    hzslave2:$ /opt/zookeeper/bin/zkServer.sh start
    hzslave3:$ /opt/zookeeper/bin/zkServer.sh start
    启动顺序无关

    2.5 查看状态
    $ /opt/zookeeper/bin/zkServer.sh status
    3 使用java客户端连接ZooKeeper集群
    找一台机器,解压zookeeper压缩包,不用配置,就可以使用Java客户端连接ZooKeeper集群中的任意一台服务器了。

    $ /opt/zookeeper/bin/zkCli.sh -server hzmaster2

    常用命令:
    1. 启动ZK服务:       sh bin/zkServer.sh start
    2. 查看ZK服务状态: sh bin/zkServer.sh status
    3. 停止ZK服务:       sh bin/zkServer.sh stop
    4. 重启ZK服务:       sh bin/zkServer.sh restart

    客户端工具
    ./zkCli.sh
    ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作.  使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。
    命令行工具的一些简单操作如下:
    1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
    2. 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
    3. 创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
    4. 获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
    5. 修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
    6. 删除文件: delete /zk 将刚才创建的 znode 删除
    7. 退出客户端: quit
    8. 帮助命令: help

    删除要逐层删除才可以,子节点下如果还有内容就不能删除!

    一段python代码:
    #coding=utf-8
    __author__ = 'huangzhi'

    import kazoo
    import logging
    from time import sleep
    from kazoo.client import KazooClient
    import time
    import logging
    logging.basicConfig()


    zk = KazooClient(hosts='192.168.51.19:2181,192.168.51.85:2181,192.168.51.196:2181,192.168.51.225:2181,192.168.51.227:2181')
    # zk = KazooClient(hosts='192.168.51.19:2181')
    zk.start(timeout=2)
    print (zk.state)

    def myWatch(handler):
        # 保证可以被重复监听,值发生变化后会立即触发
        value = zk.get('/test', myWatch)
        print(value[0].decode())

    print(zk.hosts)
    """An ephemeral node will be automatically removed by ZooKeeper
            when the session associated with the creation of the node
            expires.
    """
    # zk.create("/test", value=b"a test value", ephemeral=True) #退出后自动删除
    # zk.create("/test", value=b"a test value", ephemeral=False) #退出后不自动删除
    # zk.set('test', b"hello I'm")

    value = zk.get('/test', myWatch)
    print(value[0].decode())
    for v in value:
        print(v)
    # print (zk.state) #CONNECTED

    # print (zk.randomize_hosts)
    # Ensure a path, create if necessary

    # zk.ensure_path("/test/failure_detection")
    #
    # # Create a node with data
    # zk.create("/test/failure_detection/worker", value=b"a test value", ephemeral=True)

    while True:
        # print ("I am alive!")
        time.sleep(1)

    zk.stop()

    python3.6下运行完美,收工!任何疑问请联系我本人 QQ:99923309
  • 相关阅读:
    使用charles proxy for Mac来抓取手机App的网络包
    NProxy——Mac和Linux平台下的Fiddler
    NProxy——Mac和Linux平台下的Fiddler
    NProxy——Mac和Linux平台下的Fiddler
    【HTTP】Fiddler(二)
    ORA-12541: TNS: 无监听程序、监听程序当前无法识别连接描述符中请求的服务
    一些网站
    oracle 11g 创建普通用户
    ORACLE VARCHAR2
    LEFT JOIN , RIGHT JOIN ,INNER JOIN
  • 原文地址:https://www.cnblogs.com/bdccloudy/p/7665262.html
Copyright © 2011-2022 走看看