前言
- 基于docker环境和docker-compose
- 当前zk 3.7.0
目录结构
![在这里插入图片描述](https://img-blog.csdnimg.cn/e742a7906b6e46a4b3a93908a203b952.png#pic_center)
zk1,2,3 组成集群
zk0 为单机
docker-compose.yml 如下
docker compose up .
version: '3.8'
networks:
zknet:
name: zk-net
services:
zk1:
image: zookeeper:latest
restart: always
hostname: zk1
container_name: zk1
environment:
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=0.0.0.0:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888;2181
volumes:
- ./zoo1/data:/data
- ./zoo1/datalog:/datalog
ports:
- 2181:2181
- 18081:8080
networks:
- zknet
zk2:
image: zookeeper:latest
hostname: zk2
container_name: zk2
environment:
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zk1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3:2888:3888;2181
volumes:
- ./zoo2/data:/data
- ./zoo2/datalog:/datalog
ports:
- 2182:2181
- 18082:8080
networks:
- zknet
zk3:
image: zookeeper:latest
hostname: zk3
container_name: zk3
environment:
- ZOO_MY_ID=3
- ZOO_SERVERS=server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=0.0.0.0:2888:3888;2181
volumes:
- ./zoo3/data:/data
- ./zoo3/datalog:/datalog
ports:
- 2183:2181
- 18083:8080
networks:
- zknet
zk0:
image: zookeeper:latest
hostname: zk0
container_name: zk0
volumes:
- ./zoo0/data:/data
- ./zoo0/datalog:/datalog
ports:
- 2184:2181
- 18084:8080
networks:
- zknet
golang测试代码
package main
import (
"fmt"
"github.com/samuel/go-zookeeper/zk"
"time"
)
func main() {
var hosts = []string{"localhost:2184"}
option := zk.WithEventCallback(callback)
conn, _, err := zk.Connect(hosts, time.Second*5, option)
defer conn.Close()
if err != nil {
panic(err)
}
flag, err := conn.Create("/TEST", []byte("123123"), zk.FlagEphemeral, zk.WorldACL(zk.PermAll))
if err != nil {
panic(err)
}
_, _, ch, err := conn.ExistsW("/TEST")
if err != nil {
panic(err)
}
go watchCreataNode(ch)
bytes, _, err := conn.Get("/TEST")
if err != nil {
panic(err)
}
println(string(bytes))
flag, err = conn.Create("/TEST", []byte("123123"), zk.FlagSequence, zk.WorldACL(zk.PermAll))
if err != nil {
panic(err)
}
println(string(flag))
time.Sleep(5*time.Second)
}
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 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("-------------------")
}