ZooKeeper 입문

6337 단어
소개
홈 페이지:http://zookeeper.apache.org/
ZooKeeper 는 Hadoop 의 정식 서브 프로젝트 로 대형 분포 식 시스템 에 대한 신뢰성 있 는 조율 시스템 으로 제공 하 는 기능 은 유지 보수, 이름 서비스, 분포 식 동기 화, 그룹 서비스 등 을 포함한다.ZooKeeper 의 목 표 는 복잡 하고 오류 가 발생 하기 쉬 운 관건 적 인 서 비 스 를 밀봉 하고 간단 하고 사용 하기 쉬 운 인터페이스 와 성능 이 효율 적 이 고 기능 이 안정 적 인 시스템 을 사용자 에 게 제공 하 는 것 이다.
ZooKeeper 코드 버 전에 서 는 분포 식 잠 금, 선거, 대기 열의 인 터 페 이 스 를 제공 합 니 다. 코드 는 zookeeper - x. x \ src \ recipes 에 있 습 니 다.그 중에서 분포 자물쇠 와 대열 은 자바 와 C 두 가지 버 전이 있 고 선 거 는 자바 버 전 만 있다.
ZooKeeper 는 클 러 스 터 로 복사 할 수 있 으 며, 클 러 스 터 간 에는 Zab (ZooKeeper Atomic Broadcast) 프로 토 콜 을 통 해 데이터 의 일치 성 을 유지 할 수 있 습 니 다.
원리:http://cailin.iteye.com/blog/2014486/
설치
1.1 전제
Java 실행 환경 설정 필요
1.2 다운로드
http://mirrors.cnnic.cn/apache/zookeeper
https://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
1.3 스트레스 해소
원 하 는 디 렉 터 리 에 압축 을 풀 면 됩 니 다.
1.4 설정
복사 conf/zoo_sample.cfg 파일 을 통 해 zoo. cfg 라 고 명명 한 다음 수정 할 수 있 습 니 다.
예시
# ZooKeeper                         ,      tickTime           。
tickTime=2000

#      leader      
initLimit=10

#     follower    leader                     (tickTime   )
syncLimit=5

#        
dataDir=D:\\zookeeper\\data
#         
dataLogDir=D:\\zookeeper\\log

#        
clientPort=2181

1.5 운행
더 블 클릭 bin/zkServer.cmd 으로 ZooKeeper 시작 서버 를 시작 합 니 다.bin\zkCli.cmd -server 127.0.0.1:2181 클 라 이언 트 작업 을 시작 합 니 다.
2 구조
ZooKeeper 의 핵심 은 간단 한 파일 시스템 과 유사 하 며 간단 한 조작 과 첨부 파일 의 추상 화 (예 를 들 어 znode 의 정렬 과 watch) 를 제공 합 니 다.
4 가지 노드 유형 이 있 습 니 다.
유형
설명 하 다.
지속 노드 (PERSISTENT)
노드 를 만 든 후에 삭제 작업 이 있 을 때 까지 이 노드 를 주동 적 으로 제거 합 니 다.
지속 순서 노드 (PERSISTENT SEQUENTIAL)
지속 화 노드, 모든 부모 노드 는 그의 첫 번 째 하위 노드 에 단조 로 운 증 가 를 유지 합 니 다.
임시 노드 (EPHEMERAL)
임시 노드 의 생명주기 와 클 라 이언 트 세 션 이 연결 되 어 있 습 니 다.즉, 클 라 이언 트 세 션 이 효력 을 잃 으 면 이 노드 는 자동 으로 삭 제 됩 니 다.
임시 순서 노드 (EPHEMERAL SEQUENTIAL)
임시 노드, 모든 부모 노드 는 그의 첫 번 째 하위 노드 에 단조 로 운 증 가 를 유지 하고 분포 식 잠 금 을 실현 할 수 있 습 니 다.
3 상용 명령
  • help: 실행 가능 한 명령 보기
  • quit: 클 라 이언 트 종료
  • ls: 특정한 노드 의 데이터 보기
  • create: 특정한 노드 에서 하위 노드 만 들 기
  • delete: 하위 노드 삭제
  • rmr: 경로 삭제
  • get: 노드 데이터 가 져 오기
  • set: 노드 데이터 설정
  • 4 자바 에서 사용
    해당 jar 패 키 지 를 가 져 옵 니 다. Maven 을 사용 하여 jar 패 키 지 를 관리 합 니 다. 다음 설정 입 니 다.
    3.4.10
    0.10
    
    
    	org.apache.zookeeper
    	zookeeper
    	${zookeeper.version}
    
    
    	com.101tec
    	zkclient
    	${zkclient.version}
    
    
    org.apache.zookeeper.ZooKeeper 의 사용
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.KeeperException;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.ZooDefs.Ids;
    import org.apache.zookeeper.ZooKeeper;
    import org.apache.zookeeper.data.Stat;
    
    public class ZooKeeperTest {
    	private static final String ZK_CONNECT_URL = "127.0.0.1:2181";
    	private static final int SESSION_TIMEOUT = 3000;
    	
    	//       Exception,             
    	public static void main(String[] args) throws Exception {
    		ZooKeeper zooKeeper = new ZooKeeper(ZK_CONNECT_URL, SESSION_TIMEOUT, null);
    		//      
    		zooKeeper.register(new ZkWatcher(zooKeeper, "/root"));
    		
    		//   root  ,       “root data”,              ,          
    		zooKeeper.create("/root", "root data".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    		
    		//       ,-1    ,                   
    		zooKeeper.setData("/root", "new data".getBytes(), -1);
    		
    		//       
    		Stat stat = new Stat();
    		System.out.println(new String(zooKeeper.getData("/root", false, stat)));
    
    		//      
    		zooKeeper.create("/root/child", "child".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
    		
    		//     ,               ,     
    		zooKeeper.delete("/root/child", -1);
    		zooKeeper.delete("/root", -1);
    	}
    	
    	//      
    	private static class ZkWatcher implements Watcher {
    		private ZooKeeper zooKeeper;
    		private String path;
    		
    		public ZkWatcher(ZooKeeper zooKeeper, String path) {
    			this.zooKeeper = zooKeeper;
    			this.path = path;
    		}
    		
    		@Override
    		public void process(WatchedEvent event) {
    			System.out.println("watcher:" + event.getType());
    			//   Watcher         ,        ,    ZkClient    
    			try {
    				zooKeeper.exists(path, true);
    			} catch (KeeperException e) {
    				e.printStackTrace();
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    
    org.I0Itec.zkclient.ZkClient 의 사용
    import org.I0Itec.zkclient.IZkDataListener;
    import org.I0Itec.zkclient.ZkClient;
    import org.apache.zookeeper.CreateMode;
    
    public class ZkClientTest {
    	private static final String ZK_CONNECT_URL = "127.0.0.1:2181";
    	private static final String PATH = "/zkclient";
    	
    	public static void main(String[] args) {
    		ZkClient zkClient = new ZkClient(ZK_CONNECT_URL);
    		
    		zkClient.subscribeDataChanges(PATH, new IZkDataListener() {
    			
    			@Override
    			public void handleDataDeleted(String dataPath) throws Exception {
    				System.out.println("handleDataDeleted dataPath:" + dataPath);
    			}
    			
    			@Override
    			public void handleDataChange(String dataPath, Object data) throws Exception {
    				System.out.println("handleDataChange dataPath:" + dataPath + " data:" + data);
    				
    			}
    		});
    		
    		//     
    		zkClient.create(PATH, "Hello", CreateMode.PERSISTENT);
    		
    		//       
    		zkClient.writeData(PATH, "new");
    		
    		//     
    		System.out.println(zkClient.readData(PATH));
    		
    		//      
    		zkClient.create(PATH + "/child", "child", CreateMode.PERSISTENT);
    		
    		//        
    		System.out.println(zkClient.getChildren(PATH));
    		
    		//     
    		zkClient.delete(PATH + "/child");
    		zkClient.delete(PATH);
    	}
    
    }
    

    참고 자료
  • http://zookeeper.apache.org/
  • http://zookeeper.apache.org/doc/r3.4.10/api/index.html
  • http://zookeeper.apache.org/doc/r3.4.10/zookeeperStarted.html
  • 진 강현 의
  • 좋은 웹페이지 즐겨찾기