zoukankan      html  css  js  c++  java
  • Citus 官方docker demo 中membership-manager原理简单说明

    Citus 官方的dcoker demo 使用了membership-manager 进行节点的自动发现注册以及自动移除
    同时demo 官方也放在了github 中,原理很简单,以下就是一个简单的说明

    代码地址

    https://github.com/citusdata/membership-manager

    核心代码文件

    manager.py

    代码说明

    原理上是通过连接docker 的unix socket 并监听时间,基于label 进行类型识别,同时进行worker注册
    以及移除

    • 事件监听以及代码处理
     
    def docker_checker():
        client = docker.DockerClient(base_url='unix:///var/run/docker.sock')
        actions = {'health_status: healthy': add_worker, 'destroy': remove_worker}
        # creates the necessary connection to make the sql calls if the master is ready
        conn = connect_to_master()
        # introspect the compose project used by this citus cluster
        my_hostname = environ['HOSTNAME']
        this_container = client.containers.get(my_hostname)
        compose_project = this_container.labels['com.docker.compose.project']
        # we only care about worker container health/destroy events from this cluster
        print("found compose project: %s" % compose_project, file=stderr)
        filters = {'event': list(actions),
                   'label': ["com.docker.compose.project=%s" % compose_project,
                             "com.citusdata.role=Worker"],
                   'type': 'container'}
        # touch a file to signal we're healthy, then consume events
        print('listening for events...', file=stderr)
        open('/manager-ready', 'a').close()
        for event in client.events(decode=True, filters=filters):
            worker_name = event['Actor']['Attributes']['name']
            status = event['status']
     

    说明,对于不同事件的处理,通过了配置字典提供不同的action
    add_worker:
    实际上就是调用函数SELECT master_add_node(%(host)s, %(port)s)
    remove_worker:
    这个处理的就比较简单粗暴了,具体就是移除关于此worker 的数据分片原数据,然后调用函数
    SELECT master_remove_node(%(host)s, %(port)s) 移除节点
    删除分片原数据配置DELETE FROM pg_dist_placement WHERE groupid = (SELECT groupid FROM pg_dist_node WHERE nodename ='' AND nodeport = '' LIMIT 1);

    说明

    以上是对于membership-manager 原理的一个简单说明,可以加深下对于Citus 的一些理解,实际上官方文档提供了
    比较全的说明,学习这些比较重要,是处理citus 灾备的方法支撑(除非购买企业版)

    参考资料

    https://github.com/citusdata/membership-manager/blob/master/manager.py
    http://docs.citusdata.com/en/v9.2/admin_guide/cluster_management.html

  • 相关阅读:
    关于jqGrid组件数据显示不出问题
    jq修改导航栏样式(选中、使用两张图片替代的是否选中效果)
    jq获取图片并转换为base64
    jq怎么给图片绑定上传文件按钮
    ajax上传文件
    layui超链接追加tab选项卡必须手动刷新才出现问题
    thinkphp5中使用excel导出数据表格(包涵图片)
    关于php条形码生成(barcode),修改样式
    php中对象赋值问题
    数组小工具2
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/12444633.html
Copyright © 2011-2022 走看看