zookeeper 介绍 安装 及 简单用法

14 篇文章 0 订阅

介绍

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

简单来说zookeeper=文件系统+监听通知机制。

Zookeeper入门看这篇就够了

 

安装

推荐docker

docker pull zookeeper                                                                                                                           
docker run -d -p 2181:2181  zookeeper 

 

非docker

先安装jdk

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz
cp conf/zoo_sample.cfg conf/zoo.cfg

bin/zkServer.sh start

使用

Zookeeper Golang客户端:go-zookeeper的基本使用

go get -u -v github.com/samuel/go-zookeeper
package main

import(
	"fmt"
	"time"
	"github.com/samuel/go-zookeeper/zk"
)

func callback(event zk.Event) {
	fmt.Println("*******************")
	fmt.Println("path:", event.Path)
	fmt.Println("type:", event.Type.String())
	fmt.Println("state:", event.State.String())
	fmt.Println("-------------------")
}

func main() {
//	option := zk.WithEventCallback(callback)

	var hosts = []string{"192.168.13.2:2181"}//server端host
//	conn, _, err := zk.Connect(hosts, time.Second*5, option)
	conn, _, err := zk.Connect(hosts, time.Second*5)
	defer conn.Close()
	if err != nil {
		fmt.Println(err)
		return
	}
	
	fmt.Println("connect ok")

	var path="/test"
	var data=[]byte("hello zk")
	var flags=int32(0)
	//flags有4种取值:
	//0:永久,除非手动删除
	//zk.FlagEphemeral = 1:短暂,session断开则改节点也被删除
	//zk.FlagSequence  = 2:会自动在节点后面添加序号
	//3:Ephemeral和Sequence,即,短暂且自动添加序号
	var acls=zk.WorldACL(zk.PermAll)//控制访问权限模式

	exist,sta,err := conn.Exists(path)
	if err != nil {
		fmt.Println(err)
		return
	}
	if !exist {
		p,err_create:=conn.Create(path,data,flags,acls)
		if err_create != nil {
			fmt.Println(err_create)
		}
		fmt.Println("create:",p)
	}

	_, _, ech, err := conn.ExistsW(path)
	if err != nil {
		fmt.Println(err)
		return
	}
	go watchCreataNode(ech)


	exist,sta,err = conn.Exists(path)
	if err != nil {
		fmt.Println(err)
		return
	}
	if exist {
		sta,err = conn.Set(path,[]byte("wjs"),sta.Version)
		fmt.Println(sta,err)
	}
	

	b, sta, err := conn.Get(path)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(b))
	fmt.Println(sta.Version)

	//输出 create:/test

}

func watchCreataNode(ech <-chan zk.Event){
	event:=<-ech
	fmt.Println("*******************")
	fmt.Println("path:", event.Path)
	fmt.Println("type:", event.Type.String())
	fmt.Println("state:", event.State.String())
	fmt.Println("-------------------")
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值