返回顶部
首页 > 资讯 > 后端开发 > Python >Python与ZooKeeper集群连接
  • 872
分享到

Python与ZooKeeper集群连接

集群PythonZooKeeper 2023-01-31 05:01:43 872人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

由于项目的需要,需要学习python客户端连接ZooKeeper集群,并实现创建临时节点、获得指定的路径下的信息、监听子节点变化的功能。 环境配置 ZooKeeper集群的安装可以参考Http://blog.csdn.net/mr

由于项目的需要,需要学习python客户端连接ZooKeeper集群,并实现创建临时节点、获得指定的路径下的信息、监听子节点变化的功能。

环境配置

ZooKeeper集群的安装可以参考Http://blog.csdn.net/mrbcy/article/details/54767484

使用下面的命令安装kazoo

pip install kazoo

基本使用

这一部分可参考官方文档:http://kazoo.readthedocs.io/en/latest/basic_usage.htm

监听子节点变化

下面的代码实现了创建一个临时、顺序的节点,并且可以监听子节点的变化。

#-*- coding: utf-8 -*-
import time
from kazoo.client import KazooClient
from kazoo.recipe.watchers import ChildrenWatch




class ValidatorDetector:

    def __init__(self):
        self.zk = KazooClient(hosts='amaster:2181,anode1:2181,anode2:2181')
        self.validator_children_watcher = ChildrenWatch(client=self.zk,path='/mproxy/validators',func=self.validator_watcher_fun)
        self.zk.start()

    def validator_watcher_fun(self,children):
        print "The children now are:", children

    def create_node(self):
        self.zk.create('/mproxy/validators/validator',b'validator_huabei_1',ephemeral=True,sequence=True,makepath=True)

    def __del__(self):
        self.zk.close()





if __name__ == '__main__':
    detector = ValidatorDetector()
    detector.create_node()
    time.sleep(10)

ZooKeeper原生提供了监听节点变化及值的变化的api。关于这一部分可以参考http://blog.csdn.net/mrbcy/article/details/54790758。但是这些API只能生效一次,一旦被触发过一次以后就不会再触发了,除非再次注册。而kazoo则在这个基础上封装了更上层的API,可以持续的触发。这就是上面的ChildrenWatch,除此之外kazoo还封装了一个DataWatch,用于监听数据的变化。下面我们也会用到。

kazoo还实现了自动续订功能,使得在会话过期后我们不需要再次初始化ZooKeeper客户端(这里可以参考http://blog.csdn.net/mrbcy/article/details/55062713),也是非常方便的。

注册验证器

有了上面的知识就可以做一个注册类和一个监测类了。

#-*- coding: utf-8 -*-
import threading
import time
from kazoo.client import KazooClient
from kazoo.protocol.states import KazooState

class InfoKeeper(threading.Thread):
    def __init__(self,reGISter):
        threading.Thread.__init__(self)
        self.register=register

    def run(self):
        time.sleep(0.25)
        if self.register.zk_node is None:
            print "create method has not been called"
            return
        check_result = self.register.zk.exists(self.register.validator_path)
        if check_result is None:
            # redo the regist
            print "redo the regist"
            self.register.regist()
        else:
            print "the path remain exists"

class ValidatorRegister:
    def __init__(self):
        self.zk = KazooClient(hosts='amaster:2181,anode1:2181,anode2:2181')
        self.zk_node = None
        self.validator_path = '/mproxy/validators/'
        self.zk.add_listener(self.conn_state_watcher)
        self.zk.start()


    def __del__(self):
        self.zk.close()

    def regist(self):
        self.zk_node = self.zk.create(self.validator_path + 'validator',bytes('validator_huabei_1'),ephemeral=True,sequence=True,makepath=True)

    def close(self):
        self.zk.stop()
        self.zk.close()

    def conn_state_watcher(self, state):
        if state == KazooState.CONNECTED:
            print "Now connected"

            if self.zk_node is None:
                print "create method has not been called"
                return
            info_keeper = InfoKeeper(self)
            info_keeper.start()
        elif state == KazooState.LOST:
            print "Now lost"
        else:
            print "Now suspended"

监测类:

#-*- coding: utf-8 -*-
import time
from kazoo.client import KazooClient
from kazoo.recipe.watchers import ChildrenWatch




class ValidatorDetector:

    def __init__(self):
        self.validator_path = '/mproxy/validators/'
        self.zk = KazooClient(hosts='amaster:2181,anode1:2181,anode2:2181')
        self.validator_children_watcher = ChildrenWatch(client=self.zk,path=self.validator_path,func=self.validator_watcher_fun)
        self.zk.start()

    def validator_watcher_fun(self,children):
        for child in children:
            validator_name = self.zk.get(path=self.validator_path + str(child))
            print validator_name[0]
        print "The children now are:", children


    def __del__(self):
        self.zk.close()

注册类这里稍微复杂了一点,做了一个在会话过期后重新注册的机制,如果会话过期,重新注册之前的注册信息。

监听子节点值的变化

嗯,这个需求仔细想过后可以通过监听子节点的变化来代替,所以暂时不实现了。

--结束END--

本文标题: Python与ZooKeeper集群连接

本文链接: https://www.lsjlt.com/news/188873.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python与ZooKeeper集群连接
    由于项目的需要,需要学习Python客户端连接ZooKeeper集群,并实现创建临时节点、获得指定的路径下的信息、监听子节点变化的功能。 环境配置 ZooKeeper集群的安装可以参考http://blog.csdn.net/mr...
    99+
    2023-01-31
    集群 Python ZooKeeper
  • 【Zookeeper】zookeeper集群安装
    单节点安装参考:http://blog.sina.com.cn/s/blog_6f6bc30e0101pb13.html zookeeper集群安装 注意事项: 1....
    99+
    2024-04-02
  • python连接redis3.x集群并做
    notes------- (1)redis3.x集群模式操作需要List of all supported python versions.2.7/3.2/3.3/3.4.1+/3.5 #!/usr/bin/python # -*- ...
    99+
    2023-01-31
    集群 并做 python
  • kafka---- zookeeper集群搭建
    1.准备工作:##准备3个节点,要求配置好主机名称,服务器之间系统时间保持一致##注意/etc/hostname 和/etc/hosts 配置主机名称(在这个里我准备Prac-zk-133, Prac-zk-134 , Prac-zk-13...
    99+
    2023-08-30
    kafka zookeeper debian
  • Python3 redis集群连接 (
    环境:python 3.7.4redis集群 单集群(无slave) 很多文章都说redis密码,今天验证的了很多次失败,查了相关资料有才知道连接方式,一下为代码,修改123456为自己代码就可以使用了 from rediscluste...
    99+
    2023-01-31
    集群 redis
  • Zookeeper 集群角色、原理
    Zookeeper 的集群角色 集群中的 server 分为三种角色:leader, follower, observer。 其中observer是配置zoo.cfg明确定义的,角色leader 在一个zookeeper集群中...
    99+
    2016-01-11
    Zookeeper 集群角色 原理
  • Zookeeper集群如何搭建
    这篇文章主要介绍“Zookeeper集群如何搭建”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Zookeeper集群如何搭建”文章能帮助大家解决问题。一、Zookeeper原理简介ZooKeeper...
    99+
    2023-06-28
  • 怎么配置ZooKeeper集群
    在配置ZooKeeper集群之前,首先需要确认每台服务器的主机名、IP地址和端口号,并且确保它们之间可以相互通信。以下是配置ZooK...
    99+
    2024-04-02
  • Zookeeper集群搭建以及python操作zk
    ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper设计目的最终一致性:client不论连接到那个Server,展示给它的都是同一个...
    99+
    2023-01-31
    集群 操作 Zookeeper
  • Zookeeper集群管理与选举怎么理解
    本篇内容主要讲解“Zookeeper集群管理与选举怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Zookeeper集群管理与选举怎么理解”吧!  1.集群机器监控  这通常用于那种对集群...
    99+
    2023-06-02
  • 如何进行Zookeeper分析与集群搭建
    本篇文章为大家展示了如何进行Zookeeper分析与集群搭建,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Zookeeper简介Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理、命...
    99+
    2023-06-02
  • Zookeeper分布式集群搭建
    文中Zookeeper分布式集群搭建在Linux CentOS7系统之上。搭建大数据分布式集群,不建议使用root用户直接操作,故文中使用bigdata用户进行集群的搭建。 一、环境准备 软件 版本 Linux系统 CentOS7...
    99+
    2015-10-26
    Zookeeper分布式集群搭建
  • docker怎么部署zookeeper集群
    这篇“docker怎么部署zookeeper集群”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“docker怎么部署zooke...
    99+
    2023-07-06
  • Zookeeper集群管理与选举方法是什么
    这篇文章主要讲解了“Zookeeper集群管理与选举方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Zookeeper集群管理与选举方法是什么”吧!  1.集群机器监控  这通常用于...
    99+
    2023-06-02
  • springboot怎么连接es集群
    要连接ES集群,你可以按照以下步骤进行配置: 在Spring Boot项目的pom.xml文件中添加ES的依赖: or...
    99+
    2023-10-23
    springboot es
  • java怎么连接kafka集群
    要连接Kafka集群,您需要使用Kafka的Java客户端库,并在代码中配置正确的连接参数。以下是一个示例代码片段,展示了如何连接到...
    99+
    2023-10-20
    java kafka
  • java怎么连接redis集群
    要连接Redis集群,您需要使用Java的Redis客户端库。以下是一个使用Jedis库连接Redis集群的示例代码: import...
    99+
    2023-10-25
    java redis
  • java如何连接mongodb集群
    要连接MongoDB集群,需要使用MongoDB的Java驱动程序。以下是一些步骤可以帮助你连接MongoDB集群: 在Java项...
    99+
    2024-04-17
    java mongodb
  • ZooKeeper集群操作及集群Master选举搭建启动
    目录ZooKeeper介绍ZooKeeper特征分层命名空间搭建ZK集群启动zk集群zk集群master选举ZooKeeper介绍 ZooKeeper 是一个为 分布式应用 提供的 ...
    99+
    2022-11-13
    ZooKeeper集群操作选举 ZooKeeper集群Master
  • Zookeeper的配置与集群管理方法是什么
    这篇文章主要讲解了“Zookeeper的配置与集群管理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Zookeeper的配置与集群管理方法是什么”吧!4.1 配置文件ZooKeep...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作