docker 搭建zk集群/单机

前言

  1. 基于docker环境和docker-compose
  2. 当前zk 3.7.0

目录结构

在这里插入图片描述

zk1,2,3 组成集群
zk0 为单机

docker-compose.yml 如下

# cd zk/ 
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:2181", "localhost:2182", "localhost:2183"} //server端host
	var hosts = []string{"localhost:2184"} //server端host
	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("-------------------")
}

/*
GOROOT=/Users/zyj/go/go1.16 #gosetup
GOPATH=/Users/zyj/go #gosetup
/Users/zyj/go/go1.16/bin/go build -o /private/var/folders/18/c2k36qyx3hl6d3dg8ccs876r0000gn/T/___go_build_lib_demo_zk lib_demo/zk #gosetup
/private/var/folders/18/c2k36qyx3hl6d3dg8ccs876r0000gn/T/___go_build_lib_demo_zk #gosetup
*******************
path: 
type: EventSession
state: StateConnecting
-------------------
*******************
path: 
type: EventSession
state: StateConnected
-------------------
2022/05/29 11:53:05 Connected to 127.0.0.1:2184
*******************
path: 
type: EventSession
state: StateHasSession
-------------------
2022/05/29 11:53:05 authenticated: id=72057602412707841, timeout=5000
2022/05/29 11:53:05 re-submitting `0` credentials after reconnect
123123
/TEST0000000006
*******************
path: /TEST
type: EventNodeDeleted
state: unknown state
-------------------
2022/05/29 11:53:10 recv loop terminated: err=EOF
2022/05/29 11:53:10 send loop terminated: err=<nil>
*******************
path: /TEST
type: EventNodeDeleted
state: unknown state
-------------------
*******************
path: 
type: EventSession
state: StateDisconnected
-------------------

Process finished with exit code 0

*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mars'Ares

请我喝杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值