`
tcspecial
  • 浏览: 914358 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Zookeeper

    博客分类:
  • java
阅读更多

 

Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级 的服务,比如同步,配置管理,集群管理,名空间。

 

集群搭建

zookeeper集群组建需最少提供3台服务器,其中一台充当leader,负责写和数据同步,剩下的为follower,提供读服务。

 

数据存储

zookeeper数据以key,value方式存储,key表现为分层的文件系统目录树结构。

节点类型

zookeeper有四种类型节点

1. PERSISTENT 永久性节点,创建后一直存在

2. EPHEMERAL  临时节点,客户端创建后,若退出,则移除。可用于检测服务器是否存在

3. SEQUENTIAL 序列节点,与1,2配合使用,创建节点序号会不断增长,可用于实现主备切换。最先注册的节点序号值最小,后注册的节点序号会增加,选择序号值最小的节点作为主机。

 

接口

zookeeper提供了java,C两种语言的绑定。C接口提供了单线程和多线程版本,添加_THREADED调用多线程版本库。

 

C版本主备切换实现:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zookeeper.h>

void WatchEvent( zhandle_t *zh,int type,int state,const char *path,void *ctx );
void GetNodeId( const char *buf );
void CheckLeader();

zhandle_t *zh = NULL;
char myid[10] = {};
char buf[210] = {};

/// 系统入口
int main(int argc,char **argv)
{
    zoo_set_debug_level( ZOO_LOG_LEVEL_ERROR );

    // API具有重连机制
    zh = zookeeper_init( "127.0.0.1:2181,127.0.0.1:2182",		// 集群服务以,分隔
                         WatchEvent,
                         10000,
                         0,
                         NULL,
                         0 );

    // 注册节点
    char buf[100];
    int rc = zoo_create( zh,
                         "/servers/member",		// 节点前缀,成功后member-00000000001
                         "0",
                         1,
                         &ZOO_OPEN_ACL_UNSAFE,
                         ZOO_SEQUENCE|ZOO_EPHEMERAL,
                         buf,
                         sizeof(buf) - 1 );

    if( rc != ZOK )
    {
        printf( "zoo:create %d\n",rc );
        return 1;
    }

    // 获取节点ID
    GetNodeId( buf );
    CheckLeader();
	
	// 监控主备节点
    struct String_vector strings;
    rc = zoo_wget_children( zh,
                            "/servers",      // 父目录
                            WatchEvent,
                            NULL,
                            &strings );
    while(1) sleep(1);
    return 0;
}


// 获取节点序号
void GetNodeId( const char *buf )
{
    const char *p = buf;
    int i = strlen(buf) - 1;

    for( ; i>=0; i-- )
    {
        if(*(p+i) == '/')
            break;
    }

    strcpy( myid,p+i+1 );
    return;
}


// 回调函数
void WatchEvent( zhandle_t *zh,int type,int state,const char *path,void *ctx )
{
    if( type == ZOO_SESSION_EVENT )			// 连接事件
    {
        printf( "Connect Status:%d\n",state );
    }
    else if( type == ZOO_CHILD_EVENT )		// 子节点事件
    {
		// 节点变化,重新检测主备状态
        CheckLeader();

        // 重新监听
        struct String_vector strings;
        zoo_wget_children( zh,
                           "/servers",
                           WatchEvent,
                           ctx,
                           &strings );
    }
}


/// 检测主备机
void CheckLeader()
{
    struct String_vector strings;
    int rc = zoo_get_children( zh,"/servers",0,&strings );
    if( rc != ZOK )
    {
        printf( "zoo:children %d\n",rc );
        return;
    }

    // 只有主机
    if( strings.count == 1 )
    {
    	printf("I'm Master\n");
        return;
    }

    bool flag = true;

    // 比较最小的ID
    for( int i=0; i<strings.count; i++ )
    {
        if( strcmp( myid,strings.data[i] ) > 0 )
        {
            flag = false;
        }
    }

    if( !flag )
    {
    	printf("I'm Slave\n");
    }
}

 编译:

 g++ -g -o test2 test2.cpp \

        -L/usr/local/lib -lzookeeper_mt \

        -I/home/zookeeper/include \

        -D_THREADED

 

 

分享到:
评论

相关推荐

    zookeeper-3.4.6_zookeeper_

    《Zookeeper:分布式服务治理的核心组件》 Zookeeper,作为Apache的一个开源项目,是分布式应用程序协调服务的基石,它是一个高可用、高性能的分布式一致性服务。在标题“zookeeper-3.4.6_zookeeper_”中,我们可以...

    apache-zookeeper(apache-zookeeper-3.7.1-bin.tar.gz)

    apache-zookeeper分布式框架,压缩包内容:(apache-zookeeper-3.7.1-bin.tar.gz、apache-zookeeper-3.7.1.tar.gz、apache-zookeeper-3.6.4-bin.tar.gz、apache-zookeeper-3.6.4.tar.gz、apache-zookeeper-3.5.10-...

    ZooKeeper-分布式过程协同技术详解 和从Paxos到Zookeeper

    《ZooKeeper:分布式过程协同技术详解》与《从Paxos到Zookeeper:分布式一致性原理与实践》这两本书深入探讨了分布式系统中的关键组件ZooKeeper及其背后的一致性算法Paxos。ZooKeeper是由Apache软件基金会开发的一个...

    zookeeper-3.6.3.zip

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给...

    zookeeper 3.6.3 源码下载

    ZooKeeper 3.6.3 是一个广泛用于分布式系统的协调服务,它为分布式应用程序提供了高效且可靠的命名服务、配置管理、集群同步、分布式锁等核心功能。在深入理解源码之前,我们需要先了解ZooKeeper的基本概念和工作...

    Zookeeper_安装和配置

    Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    centos8安装zookeeper3.8.0详细步骤

    CentOS 8 安装 ZooKeeper 3.8.0 详细步骤 ZooKeeper 是一个分布式应用程序协调服务,提供了配置管理、名称服务、分布式同步和提供组服务等功能。下面是 CentOS 8 安装 ZooKeeper 3.8.0 的详细步骤。 1. 下载安装包...

    zookeeper-3.9.1.zip

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式应用程序的运行状态,提供诸如命名服务、配置管理、分布式同步、组服务等分布式基础服务。Zookeeper的设计目标...

    linux中zookeeper安装包zookeeper-3.4.8.tar

    在IT领域,Zookeeper是一个非常重要的分布式协调服务,由Apache Hadoop项目开发并维护。它在大规模分布式系统中被广泛用于数据管理、配置共享、命名服务、群组服务以及分布式同步。Zookeeper-3.4.8是其一个稳定版本...

    zookeeper可视化工具

    **Zookeeper可视化工具详解** Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供高度可靠的命名服务、配置管理、集群同步、领导选举等核心功能。在运维和开发过程中,为了更方便地管理和监控...

    zookeeper-3.4.12版本

    Zookeeper是Apache软件基金会的一个开源项目,主要用于分布式协调服务,它是集群管理的基石,被广泛应用于大数据、云计算等领域。Zookeeper 3.4.12是该系统的一个稳定版本,提供了解压即用的便利性。 一、Zookeeper...

    zookeeper版本为zookeeper-3.4.10.tar.gz

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效、功能稳定的系统提供给用户。...

    apache-zookeeper-3.5.6-bin.tar

    Apache ZooKeeper 是一个分布式协调服务,它为分布式应用程序提供了一个高度可用、高性能的框架,用于管理数据和配置信息,处理命名服务、分布式同步以及组服务等问题。ZooKeeper 的设计目标是简化分布式环境中的...

    apache-zookeeper-3.8.4-bin.tar

    Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着分布式应用程序,提供了诸如配置维护、命名服务、分布式同步、组服务等这些分布式基础服务。Zookeeper是Apache Hadoop...

    zookeeper集群升级方案

    ### Zookeeper 集群升级方案详解 #### 一、需求背景 随着业务的发展和技术的进步,现有的Zookeeper集群系统版本过低(当前版本为3.3.4),导致某些功能特性无法得到支持或表现不佳,这直接影响到了业务的正常运行...

    zookeeper-3.8.0安装包下载

    Apache ZooKeeper 是一个高度可靠的分布式协调系统,广泛应用于云原生环境中的服务发现、配置管理、命名服务等场景。Zookeeper-3.8.0 是该系统的最新版本,提供了更稳定和高效的服务。 Zookeeper 的核心概念包括...

    zookeeper连接工具zktools

    《Zookeeper连接工具ZkTools详解》 Zookeeper作为一个分布式协调服务,在云原生环境中扮演着至关重要的角色。它提供了一种可靠的方式来管理和维护配置信息、命名服务、集群同步、分布式锁等。为了方便开发者与...

    zookeeper-3.4.12官方包

    Zookeeper是Apache Hadoop项目下的一个分布式协调服务,它提供了一种在大型分布式系统中维护配置信息、命名服务、分布式同步、组服务等机制。Zookeeper-3.4.12是该服务的一个稳定版本,它包含了对之前版本的改进和...

    zookeeper限制ip版

    《Zookeeper 3.4.14 IP限制功能详解及源码改造》 Apache ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。...

    ZooKeeper3.4.9 windos和linux

    《ZooKeeper 3.4.9:在Windows与Linux上的部署与应用》 ZooKeeper,一个由Apache基金会开发的分布式协调服务,是许多大型分布式系统中的关键组件。3.4.9版本是ZooKeeper的一个稳定版本,提供了一系列增强功能和性能...

Global site tag (gtag.js) - Google Analytics