• 使用Python访问Zookeeper获取数据


    Python如何获取zookeeper中的数据,本文将简单介绍Python访问zookeeper中设置了权限的目录信息。


    1、环境准备
    1.1 安装Python环境

    1)安装依赖包

    # yum install sqlite-devel readline-devel bzip2-devel libffi-devel gcc openssl-devel
    
    • 1

    2)下载安装包并解压:

    # tar xzf Python-2.7.5.tgz
    
    • 1

    3)进入解压后的文件夹,并进行编译安装:

    # cd Python-2.7.5
    # ./configure
    # make install
    
    • 1
    • 2
    • 3

    4)安装完成后验证:

    # python
    Python 2.7.5 (default, Sep 26 2023, 14:48:56) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    
    • 1
    • 2
    • 3
    • 4
    1.2 安装Zookeeper环境

    1)解压安装包

    # tar -xzvf zookeeper-3.4.12.tar.gz
    
    • 1

    2)修改配置文件

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zookeeper/data
    clientPort=2181
    maxClientCnxns=60
    server.1=192.168.112.121:2888:3888
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • tickTime: 这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳
    • initLimit:这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是tickTime)长度后Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是5*2000=10秒
    • syncLimit:这个配置项标识Leader与Follower之间发送消息,请求和应答时间长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是5*2000=10秒
    • clientPort:这个端口就是客户端连接Zookeeper服务器的端口,Zookeeper会监听这个端口,接受客户端的访问请求
    • server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
    • 192.168.112.121为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888

    3)在data目录创建zookeeper所需的目录

    # pwd	
    /usr/local/zookeeper/data
    # mkdir zookeeper
    
    • 1
    • 2
    • 3

    4)在~/data/zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的

    # echo "1" > myid
    # cat myid
    1
    
    • 1
    • 2
    • 3

    5)启动zookeeper

    ./bin/zkServer.sh start
    
    • 1

    6)监控端口已启用

    # netstat -an|grep 2181
    tcp6       0      0 :::2181                 :::*                    LISTEN
    
    • 1
    • 2
    1.3 Zookeeper中添加授权用户

    1)连接zookeeper并创建目录

    # ./bin/zkCli.sh --127.0.0.1:2181
    [zk: localhost:2181(CONNECTED) 1] create /test "123"
    Created /test
    #查看数据
    [zk: localhost:2181(CONNECTED) 5] get /test
    123
    cZxid = 0x2
    ctime = Tue Sep 26 11:13:13 CST 2023
    mZxid = 0x2
    mtime = Tue Sep 26 11:13:13 CST 2023
    pZxid = 0x2
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2)设置访问权限及授权用户访问

    [zk: localhost:2181(CONNECTED) 15] addauth digest testuser:testuser 
    [zk: localhost:2181(CONNECTED) 16] setAcl /test auth:testuser:testuser:cdrwa
    cZxid = 0x2
    ctime = Tue Sep 26 11:13:13 CST 2023
    mZxid = 0x2
    mtime = Tue Sep 26 11:13:13 CST 2023
    pZxid = 0x2
    cversion = 0
    dataVersion = 0
    aclVersion = 1
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    [zk: localhost:2181(CONNECTED) 17] getAcl /test                             
    'digest,'testuser:lgLFo8g8g30ow2QI0iDoLGPlXQo=
    : cdrwa
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3)设置完成后再重新登录提示没有权限

    [zk: localhost:2181(CONNECTED) 1] ls /test
    Authentication is not valid : /test
    
    • 1
    • 2
    2、使用Python访问Zookeeper获取数据

    使用Python访问zookeeper数据,需要使用kazoo库,安装KazooClient

    >>> from kazoo.client import KazooClient
    Traceback (most recent call last):
      File "", line 1, in 
    ImportError: No module named kazoo.client
    
    • 1
    • 2
    • 3
    • 4

    下载kazoo包并安装

    # cd kazoo-2.9.0
    # python setup.py install
    
    • 1
    • 2
    2.1 无权限限制访问

    使用Python访问zookeeper服务,获得zookeeper中存储的数据,具体实现如下:

    from kazoo.client import KazooClient  
      
    # 创建Zookeeper客户端  
    client = KazooClient(hosts='localhost:2181')  
      
    # 连接Zookeeper  
    client.start()  
      
    # 获取指定节点数据 
    data, stat = client.get('/test01')  
      
    # 打印节点数据  
    print(data)  
      
    # 关闭Zookeeper连接  
    client.stop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    如果访问的是授权管理的目录,直接访问会提示NoAuthError

    Traceback (most recent call last):
      File "get_zk_noauth1.py", line 10, in 
        data, stat = client.get('/test')  
      File "/usr/local/lib/python2.7/site-packages/kazoo-2.9.0-py2.7.egg/kazoo/client.py", line 1165, in get
        return self.get_async(path, watch=watch).get()
      File "/usr/local/lib/python2.7/site-packages/kazoo-2.9.0-py2.7.egg/kazoo/handlers/utils.py", line 86, in get
        raise self._exception
    kazoo.exceptions.NoAuthError
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2.2 授权访问

    授权访问,在zookeeper连接的时候添加auth_data配置用户和密码,如下所示:

    from kazoo.client import KazooClient  
    
    zk_ip='127.0.0.1'
    zk_port='2181'
    zk_user='testuser'
    zk_pwd='testuser'
      
    # 创建Zookeeper客户端  
    client = KazooClient(hosts=zk_ip+':'+zk_port,auth_data=[("digest",zk_user+':'+zk_pwd)])  
      
    # 连接Zookeeper  
    client.start()  
      
    # 获取指定节点数据  
    data, stat = client.get('/test')  
      
    # 打印节点数据  
    print(data)  
      
    # 关闭Zookeeper连接  
    client.stop()
    client.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    运行脚本,正常返回结果

  • 相关阅读:
    【官宣】游戏革命刚刚开始!
    mPEG-Cholesterol,mPEG-CLS,胆固醇-聚乙二醇-马来酰亚胺科研试剂供应
    企业IT机房中使用什么灭火器?
    Git - 安装与配置
    基于人工智能的机动车号牌检测与推理系统v1.0
    申报国家高新技术企业认定,这八大错误认识不能有 。
    ES6基本语法之扩展运算符、解构赋值、箭头函数
    ST-LINK 下载器的使用
    [SpringBoot系列]数据层技术解析
    python实现常用排序算法
  • 原文地址:https://blog.csdn.net/solihawk/article/details/133338081