zookeeper zkCli 을 이용한 znode 생성,읽기,삭제 및 쓰기
ZooKeeper CLI (Command Line Interface)는 개발 목적으로 ZooKeeper 앙상블과 상호 작용하는 데 사용됩니다.
데이터 모델 및 계층 적 네임 스페이스
ZooKeeper가 제공하는 이름 공간은 표준 파일 시스템과 비슷합니다. 이름은 슬래시 (/)로 구분 된 경로 요소의 순서입니다. ZooKeeper의 이름 공간에있는 모든 노드는 경로로 식별됩니다.
z 노드 유형
znode를 생성하기 전에 znode의 유형에 대해 간략하게 설명하겠습니다. persistent, ephemeral, and sequential입니다
- Persistent Znodes
ZooKeeper의 기본 z 노드입니다. zookeeper 서버에 영구적으로 존재합니다. - Ephemeral Znodes
일시적인 z 노드 (세션 z 노드라고도 함)는 임시 z 노드입니다.
영구 z 노드와 달리 생성자 클라이언트가 ZooKeeper 서버에서 연결이 종료되자마자 파손됩니다. - sequential Znodes
연속 z 노드에는 이름 끝에 숫자 순서로 10 자리 숫자가 지정됩니다.
client1 이 a를 만든다고 가정 해 보겠습니다 .
sznode1. ZooKeeper 서버에서는 다음 sznode1과 같이 이름이 지정됩니다.sznode0000000001경우 CLIENT1이 다른 순차적 znode를 만들고,이 시퀀스에서 다음 숫자를 맺을 것입니다. 따라서 다음 순차 z 노드가 호출 <znode name>0000000002됩니다.
ZooKeeper CLI 작업을 수행하려면 먼저 ZooKeeper 서버를 시작합니다.
/zookeeper/bin/zkServer.sh start
ZooKeeper 클라이언트( zkCli.sh )를 실행하시면 됩니다.
/zookeeper/bin/zkCli.sh
ZooKeeper 클라이언트( zkCli.sh )가 시작되면 다음 작업을 수행 할 수 있습니다.
- z 노드 생성
- z노드 읽기
- z노드 데이터 설정
- z노드 삭제
- z노드 목록
아래는 zkCli 실행후 화면입니다.
./zkCli.sh Connecting to localhost:2181 2019-08-05 15:36:19,428 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT 2019-08-05 15:36:19,431 [myid:] - INFO [main:Environment@100] - Client environment:host.name=zookeeper01 2019-08-05 15:36:19,431 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_141 2019-08-05 15:36:19,433 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2019-08-05 15:36:19,433 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141.x86_64/jre 2019-08-05 15:36:19,433 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/sw/zookeeper/bin/../build/classes:/sw/zookeeper/bin/../build/lib/*.jar:/sw/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/sw/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/sw/zookeeper/bin/../lib/netty-3.10.5.Final.jar:/sw/zookeeper/bin/../lib/log4j-1.2.16.jar:/sw/zookeeper/bin/../lib/jline-0.9.94.jar:/sw/zookeeper/bin/../zookeeper-3.4.9.jar:/sw/zookeeper/bin/../src/java/lib/*.jar:/sw/zookeeper/bin/../conf: 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:os.version=4.9.32-15.41.amzn1.x86_64 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:user.name=ec2-user 2019-08-05 15:36:19,434 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/home/ec2-user 2019-08-05 15:36:19,435 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/sw/zookeeper-3.4.9/bin 2019-08-05 15:36:19,436 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4b272332 Welcome to ZooKeeper! 2019-08-05 15:36:19,456 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2019-08-05 15:36:19,469 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@876] - Socket connection established to localhost/127.0.0.1:2181, initiating session 2019-08-05 15:36:19,476 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x16c5edd5fb40001, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0]
z 노드 생성
znode는 기본적으로 영구적입니다.
z 노드를 만들려면 경로를 지정해야합니다 .
이제 모든 znode의 경로는 항상 루트 znode로 시작합니다.
znode를 작성하기위한 명령 구문은 다음과 같습니다
create -[options] /[znode-name] [znode-data]
다음은 type별 znode를 작성하는 예제입니다.
persistent(기본값) : create /znode my_data Ephemeral : create –e /eznode my_data Sequential : create –s /sznode my_data
각 znode에는 하위 znode가있을 수도 있습니다.
하위 znode를 작성하기위한 명령 구문은 다음과 같습니다
create /[parent_znode]/[child_znode] [child_znode_data]
z노드 읽기
get특정 z 노드의 데이터를 가져 오는 명령을 사용합니다.
get /[znode_name]
z노드 데이터 설정
set명령을 사용하여 z 노드 데이터를 덮어 씁니다.
set /[znode_name] [new_data]
z노드 삭제
delete명령을 사용하여 z 노드 삭제합니다.
delete /[znode_name]
[zk: localhost:2181(CONNECTED) 17] ls / [zookeeper, znode, sznode0000000010, eznode] [zk: localhost:2181(CONNECTED) 18] delete /znode [zk: localhost:2181(CONNECTED) 19] ls / [zookeeper, sznode0000000010, eznode]
z노드 목록
ls [znode_name]
[zk: localhost:2181(CONNECTED) 19] ls / [zookeeper, znode, sznode0000000010, eznode] [zk: localhost:2181(CONNECTED) 8] ls /znone [znode_sub15, znode_sub14]