ZEO ZooKeeper
项目描述
管理地址,尤其是端口是个麻烦。ZooKeeper可以用作服务注册。服务器可以在这里注册自己,客户端可以在这里找到服务。《zc.zkzeo》包提供了注册ZEO服务器和从ZooKeeper获取地址的ZEO客户端存储的支持。
运行ZEO服务器
要运行ZEO服务器并将其注册到ZooKeeper,首先创建一个ZEO配置文件
<zeo> address 127.0.0.1 </zeo> <zookeeper> connection zookeeper.example.com:2181 path /databases/demo </zookeeper> <filestorage> path demo.fs </filestorage>
ZEO配置文件具有与通常相同的选项,还有一个包含两个选项的zookeeper部分
- 连接
一个ZooKeeper连接字符串。这通常是一系列由逗号分隔的HOST:PORT对。
- 路径
注册服务器的路径。该路径必须已存在。当服务器启动时,它将通过创建路径的子节点来注册自己,该子节点的名称由其地址组成。
(您还可以使用session-timeout选项指定ZooKeeper会话超时时间,以毫秒为单位。)
在指定ZEO地址时,您可以省略端口号,操作系统将为您分配它。
要启动服务器,请使用zkrunzeo脚本
$ bin/zkrunzeo -C FILENAME
其中FILENAME是您创建的配置文件的名称。
包括一个zc.monitor监控服务器
zc.monitor包提供了一个简单的可扩展命令服务器,用于收集监控数据或提供对服务器的运行时控制。如果zc.monitor在Python路径中,zc.zkzeo可以启动一个监控服务器并将其地址作为服务器临时端口的monitor属性提供。为了请求此功能,我们在zookeeper部分使用一个monitor-server选项
<zeo> address 127.0.0.1 </zeo> <zookeeper> connection zookeeper.example.com:2181 path /databases/demo monitor-server 127.0.0.1 </zookeeper> <filestorage> path demo.fs </filestorage>
该值是要监听的地址。
使用上述配置,如果我们启动服务器并使用 zc.zk 包查看 ‘/databases/demo’ 的 ZooKeeper 树,我们会看到如下内容
>>> zk.print_tree('/databases/demo') /demo /127.0.0.1:64211 monitor = u'127.0.0.1:11976' pid = 5082
您还可以指定一个 Unix 域套接字名称
<zeo> address 127.0.0.1 </zeo> <zookeeper> connection zookeeper.example.com:2181 path /databases/demo monitor-server ./monitor.sock </zookeeper> <filestorage> path demo.fs </filestorage>
当使用 Unix 域套接字时,监视地址不包括在树中
>>> zk.print_tree('/databases/demo') /demo /127.0.0.1:64213 pid = 5082
关于监视服务器的几点说明
如果没有注册一些命令插件,监视服务器将没有用处。
zc.monitor 不是 zc.zkzeoc 的依赖项,除非您安装它,否则它不会在 Python 路径中。
监控
zkzeo 包提供了一个 Nagios 插件。该插件接受 ZooKeeper 连接字符串和查找 ZEO 服务器的路径(使用 zc.zk 服务注册框架)。例如,要监视上面定义的服务器
zkzeo-nagios zookeeper.example.com:2181 /databases/demo
zkzeo nagios 监视器支持与 ZEO nagios 监视器相同的选项,因此例如要获取完整的指标
zkzeo-nagios -m -s statusfile zookeeper.example.com:2181 /databases/demo
有时,可能在同一路径注册多个服务器,例如在服务器复制的情况下。当监视单个服务器时,您需要知道要检查哪个。如果您有一个监视 ZEO 进程的服务器,就像我们上面做的那样,那么您可以使用它来确定要使用哪一个。只需提供监视服务器地址
zkzeo-nagios -m -M ./monitor.sock zookeeper.example.com:2181 /databases/demo
还有一个对其他监视器有用的辅助函数
>>> import zc.zkzeo.nagios >>> [zc.zkzeo.nagios.find_server( ... 'zookeeper.example.com:2181', ... '/databases/demo', ... None)] == zk.get_children('/databases/demo') True >>> [zc.zkzeo.nagios.find_server( ... 'zookeeper.example.com:2181', ... '/databases/demo', ... './monitor.sock')] == zk.get_children('/databases/demo') True
定义ZEO客户端
您可以通过两种方式定义客户端:从 Python 和使用配置文件。
使用Python定义ZEO客户端
从 Python,使用 zc.zkzeo.client
>>> import zc.zkzeo >>> client = zc.zkzeo.client( ... 'zookeeper.example.com:2181', '/databases/demo', ... max_disconnect_poll=1)
您传递一个 ZooKeeper 连接字符串和一个路径。Client 构造函数将创建一个客户端存储,其中包含给定路径作为子节点找到的地址,并且它将调整客户端存储地址,当节点作为路径的子节点被添加和删除时。
您可以将所有其他 ZEO.ClientStorage.ClientStorage 参数(除地址外)作为额外的位置和关键字参数传递。
数据库和连接便利函数
您通常并不真正关心获取存储对象。您真正想要的是数据库对象
>>> db = zc.zkzeo.DB( ... 'zookeeper.example.com:2181', '/databases/demo', ... max_disconnect_poll=1)
或者,通常是数据库连接
>>> conn = zc.zkzeo.connection( ... 'zookeeper.example.com:2181', '/databases/demo', ... max_disconnect_poll=1)
在配置文件中定义ZEO客户端
在配置文件中,使用 zkzeoclient 存储部分
%import zc.zkzeo <zodb> <zkzeoclient> zookeeper zookeeper.example.com:2181 server /databases/demo max-disconnect-poll 1 </zkzeoclient> </zodb>
zkzeoclient 的选项与标准 ZODB zeoclient 部分的选项相同,但
有一个额外的必需的 zookeeper 选项,用于提供 ZooKeeper 连接字符串。
只能有一个 server 选项,并且它用于提供可能找到地址的 ZooKeeper 中的路径。
变更历史
1.0.1 (2015-01-11)
解决了固定包装问题(当然)。
1.0.0 (2015-01-11)
更新为与 ZEO/ZODB 一起使用,而不是与 ZODB3 一起使用。
添加了 Nagios 监视插件,zkzeo-nagios 脚本
0.3.2 (2012-07-10)
修复:不支持与 ZConfig 最近支持的显式配置端口 0,该端口无法使用。
0.3.1 (2012-06-26)
修复:设置 Unix 域套接字上的监视服务器不起作用。
0.3.0 (2012-02-07)
添加了一个静态额外功能,以强制依赖 zc-zookeeper-static。
在测试模式下,使用较短的 asynore 循环超时,以便服务器可以更快地关闭。
修复:zc.zkzeo 依赖于 zc.zk [static],这强制安装 zc-zookeeper-static,而它应该是可选的。
修复:测试没有通过,因为 zc.zk 中处理空主机名注册的最近更改。
修复:包装:distribute 无法安装带有符号链接的发行版,因此停止在发行版中使用符号链接。
0.2.1 (2011-12-14)
修复了错误:在 ZooKeeper 服务器配置部分中的 "path" 键是必需的,而它不应该如此。
0.2.0 (2011-12-13)
使用 ZEO 地址设置从 ZooKeeper 注册主机名。(这通常是一个空字符串,而 zc.zk 将其转换为完全限定的域名。)
修复了处理监视服务器时的错误。实际的地址设置被忽略。
0.1.1 (2011-12-12)
修复了包装错误。
0.1.0 (2011-12-11)
初始发布。
项目详情
zc.zkzeo-1.0.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 22ed28a947125f0862c4cabe5d9dfb8a0bfa8c3f2e1ad2877f4e72e53e2aab55 |
|
MD5 | 2ab587168a68ee37356fb61fc22f360c |
|
BLAKE2b-256 | 56052d9c476eb2273c770a9d00c817188b85b1a8a8d0e0286ba37c5027ec7d18 |