754632 发表于 2014-6-17 09:16:57

一个同步zookeeper节点的python脚本

因zk的写性能不高,为了不让监控上报类的服务影响现网服务,我们把zk集群分离开。而有个上报接入agent需要在两个不同zk集群中注册节点,框架只支持一个zk集群,修改还需下个版本。
临时写了个脚本完成节点同步:

    #!/usr/bin/env python
    #coding=utf-8

    import logging
    logging.basicConfig()

    from kazoo.client import KazooClient
    def diff_zk_child(src_host, dst_host):
      zk_src=KazooClient(hosts=src_host)
      zk_src.start()
      zk_dst=KazooClient(hosts=dst_host)
      zk_dst.start()
      zk_src_child=zk_src.get_children('/app_config/flume_agent/nodes')
      zk_dst_child=zk_dst.get_children('/app_config/flume_agent/nodes')
      #zk_src have but zk_dst not
      add_nodes=list(set(zk_src_child).difference(set(zk_dst_child)))
      delete_nodes=list(set(zk_dst_child).difference(set(zk_src_child)))
      print "add:"
      for node in add_nodes:
            print node
            if not zk_dst.exists('/app_config/flume_agent/nodes/'+str(node)):
                zk_dst.create('/app_config/flume_agent/nodes/'+str(node), b'node rsync')
      print "delete:"
      for node in delete_nodes:
            print node
            if zk_dst.exists('/app_config/flume_agent/nodes/'+str(node)):
                zk_dst.delete('/app_config/flume_agent/nodes/'+str(node))
      zk_src_child=zk_src.get_children('/app_config/flume_agent/nodes')
      zk_dst_child=zk_dst.get_children('/app_config/flume_agent/nodes')


    if __name__ == "__main__":
      diff_zk_child('zk.prod.oa.com:2181', 'zk.mm.oa.com:2181')

这里没用zookeeper自带的python客户端,而是用的kazoo,没有依赖。

页: [1]
查看完整版本: 一个同步zookeeper节点的python脚本