Zookeeper Golang Client :
Zookeeper에서 제공하는 Client Library는 Java와 C 두 종류 밖에 없는듯 하다. Zookeeper 앙상블을 구성하고, Golang으로 작성된 프로그램에서 Zookeeper를 사용하기 위해 Client Library를 검색해 보았고, 가장 Star가 많길래.. 한번 사용해 보았다.
package zookeeper
import (
"fmt"
"log"
"time"
"github.com/go-zookeeper/zk"
)
/*
connectAddr의 경우 zookeeper앙상블의 모든 zookeeper Server의
IP:Port형식을 String slice에 담아서 전달한다.
*/
func ConnectZooKeeper(connectAddr ...string) (*zk.Conn, error) {
conn, _, err := zk.Connect(connectAddr, time.Second*10)
if err != nil {
log.Fatalf("err: %v\n", err)
}
return conn, err
}
func GetZnode(conn *zk.Conn, path string) ([]byte, *zk.Stat, error) {
data, stat, err := conn.Get(path)
return data, stat, err
}
func GetChildren(conn *zk.Conn, path string) ([]string, *zk.Stat, error) {
data, stat, err := conn.Children(path)
return data, stat, err
}
func Exist(conn *zk.Conn, path string) (bool, *zk.Stat, error) {
exist, stat, err := conn.Exists(path)
return exist, stat, err
}
CreateContainer()
- flag에 TTL이포함되어야 한다. 그렇지 않으면 Invalid Flag Error
ACL
PermAll로 설정한 경우 (DigestACL은 user:passwd 설정) 리턴되는 ACL 형태
- AuthACL()
- [{Perms:31 Scheme:auth ID:}]
- DigestACL()
- [{Perms:31 Scheme:digest ID:user:MkkAAWC5ibFpYWKu1Zr/JdiwisA=}]
- WorldACL()
- [{Perms:31 Scheme:world ID:anyone}]
Method Postfix "W"의 의미
GetW(), ExistW(), ChildrenW()처럼 기존에 존재하는 메서드인 Get(), Exist(), Children()의 뒤에 W가 붙은 형태는 추가적으로 Watch를 설정하는 메서드
Create()
- Parent Node까지 한번에 생성은 불가능하다.
- "/parent" 노드가 없는 상황에서, "/parent/child" 노드 생성은 불가능
FLW
FLW는 Four-letter-word로 zookeeper에서 정의한 4글자 명령어이다. conf, ruok, srvr, stat.. 등이 있다.
Sync()
- Zookeeper 앙상블에서 Leader, Follower간 Sync의 인자로 준 path 노드를 동기화하는 메서드
'Etc > Zookeeper' 카테고리의 다른 글
Zookeeper 활용 시나리오 (Recipes And Solutions) (0) | 2020.12.24 |
---|---|
zookeeper Replication (3 host clustering) 설정하기 (0) | 2020.12.22 |
Zookeeper 설치 및 환경설정 (0) | 2020.12.21 |
Apache zookeeper란? (0) | 2020.12.19 |