我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python与ZooKeeper集群连接

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python与ZooKeeper集群连接

由于项目的需要,需要学习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()

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

监听子节点值的变化

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python与ZooKeeper集群连接

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python与ZooKeeper集群连接

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

python怎么连接redis集群

连接Redis集群连接Redis集群涉及以下步骤:安装客户端库(如redis-py)获取集群节点信息创建连接池以优化连接性能获取Redis集群客户端执行Redis命令redis-py库将自动处理集群故障,包括故障转移另外,请考虑读写分离、哨兵监控和性能优化策略。安全措施,如密码身份验证和SSL加密,在生产环境中也至关重要。
python怎么连接redis集群
2024-04-09

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# -*- coding
2023-01-31

Python3 redis集群连接 (

环境:python 3.7.4redis集群 单集群(无slave)很多文章都说redis密码,今天验证的了很多次失败,查了相关资料有才知道连接方式,一下为代码,修改123456为自己代码就可以使用了from rediscluster
2023-01-31

Zookeeper集群管理与选举怎么理解

本篇内容主要讲解“Zookeeper集群管理与选举怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Zookeeper集群管理与选举怎么理解”吧!  1.集群机器监控  这通常用于那种对集群
2023-06-02

Zookeeper集群搭建以及python操作zk

ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper设计目的最终一致性:client不论连接到那个Server,展示给它的都是同一个
2023-01-31

如何进行Zookeeper分析与集群搭建

本篇文章为大家展示了如何进行Zookeeper分析与集群搭建,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Zookeeper简介Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理、命
2023-06-02

Zookeeper集群管理与选举方法是什么

这篇文章主要讲解了“Zookeeper集群管理与选举方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Zookeeper集群管理与选举方法是什么”吧!  1.集群机器监控  这通常用于
2023-06-02

java怎么连接kafka集群

要连接Kafka集群,您需要使用Kafka的Java客户端库,并在代码中配置正确的连接参数。以下是一个示例代码片段,展示了如何连接到Kafka集群:import org.apache.kafka.clients.consumer.Cons
2023-10-20

java怎么连接redis集群

Java连接Redis集群步骤:获取连接池(如Lettuce、Jedis、Redisson)初始化集群连接(设置节点地址,创建客户端,初始化连接池)管理连接(获取、释放、关闭)好处:提高连接效率避免连接耗尽故障容错客户端:Lettuce:轻量级、异步Jedis:简单、面向对象Redisson:分布式、丰富功能交互操作:读写操作:get、set、del发布订阅:publish、subscribe事务操作:watch、multi、exec管道操作:pipeline
java怎么连接redis集群
2024-04-10

java怎么连接redis集群

要连接Redis集群,您需要使用Java的Redis客户端库。以下是一个使用Jedis库连接Redis集群的示例代码:import redis.clients.jedis.HostAndPort;import redis.clients
2023-10-25

java怎么连接mongodb集群

Java连接MongoDB集群通过使用MongoDB驱动,Java应用程序可以轻松地与MongoDB集群建立连接。此连接涉及以下步骤:添加MongoDB驱动依赖项配置连接选项(服务器地址、认证等)使用MongoClientOptions创建连接启用认证(如果需要)利用集群的故障转移功能最后关闭连接连接集群提供了故障转移、负载均衡和高可用性等好处。通过遵循这些步骤,Java应用程序可以可靠地访问和操作MongoDB集群中的数据。
java怎么连接mongodb集群
2024-04-11

springboot怎么连接es集群

要连接ES集群,你可以按照以下步骤进行配置:在Spring Boot项目的pom.xml文件中添加ES的依赖:org.springframework.bootspring-boot-starter-data-elasticsearch在ap
2023-10-23

java如何连接mongodb集群

要连接MongoDB集群,需要使用MongoDB的Java驱动程序。以下是一些步骤可以帮助你连接MongoDB集群:在Java项目中添加MongoDB的Java驱动程序依赖。你可以在Maven或Gradle中添加以下依赖:
java如何连接mongodb集群
2024-04-17

Zookeeper的配置与集群管理方法是什么

这篇文章主要讲解了“Zookeeper的配置与集群管理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Zookeeper的配置与集群管理方法是什么”吧!4.1 配置文件ZooKeep
2023-06-04

如何连接一个redis集群

要连接到一个Redis集群,可以按照以下步骤进行操作:1. 安装和配置Redis集群:首先,需要在所有的节点上安装Redis,并在每个节点的配置文件中进行相应的配置。确保配置文件中的端口、节点IP地址和集群参数正确设置。2. 创建Redis
2023-09-01

redis集群无密码如何连接

Redis集群无密码认证时,可以通过以下方式连接:1. 使用redis-cli命令连接:```shellredis-cli -c -h -p ```其中,`-c`表示使用集群模式连接,`-h`表示指定redis集群地址,`-p`表示指定端
2023-09-04

java连接redis集群方式有哪些

Java连接Redis集群方式直接连接:简单,但需要手动处理连接和故障转移。JedisCluster:高级抽象,提供一致性哈希和故障转移处理。LettuceCluster:针对Redis集群优化,性能和并发性更好。SpringDataRedis:Spring框架模块,提供透明的集群访问和底层连接抽象。连接池:管理连接创建和销毁,提高性能和可扩展性。选择方式取决于应用程序需求:简单场景直接连接,高可用和性能需求使用高级库,使用Spring框架用SpringDataRedis,需要连接池优势就用连接池库。
java连接redis集群方式有哪些
2024-04-12

java连接redis集群方式有哪些

Java连接Redis集群的方式有以下几种:1. 使用Jedis Cluster:Jedis是Redis官方推荐的Java客户端之一,它内置了对Redis集群的支持。可以通过创建JedisCluster对象来连接Redis集群,并使用集群的
2023-09-16

如何为 MySQL 集群配置 SSL 连接

如何为 MySQL 集群配置 SSL 连接摘要:MySQL 是一个常用的开源关系数据库管理系统,可以用于存储和管理大量的数据。在互联网时代,数据的安全性越来越受到关注。为了保护数据库的安全,我们可以配置 SSL 连接来加密数据传输。本文将介
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录