zookeeper 프로젝트 에서 의 실제 응용

4419 단어 zookeepercurator
ZooKeeper 가 제공 하 는 서 비 스 는 주로 데이터 구조 Node + 원 어 + watcher 메커니즘 을 통 해 이 루어 집 니 다.
ZooKeeper 는 분포 식 작은 파일 시스템 으로 선거 알고리즘 과 클 러 스 터 복 제 를 통 해 단일 고장 을 피 할 수 있 습 니 다.
파일 시스템 이기 때문에 모든 ZooKeeper 노드 를 모두 끊 어도 데 이 터 를 잃 어 버 리 지 않 습 니 다.
서버 를 다시 시작 하면 데이터 가 복 구 됩 니 다.
ZooKeeper 가 실현 하 는 모든 기능 은 ZK 노드 의 특성 과 이 노드 와 관련 된 데이터 로 이 루어 집 니 다.
어떤 데이터 와 관련 이 있 는 지 는 네가 무슨 일 을 하 느 냐 에 달 려 있다.
① 클 러 스 터 관리: 임시 노드 특성 을 이용 하여 노드 와 관련 된 것 은 기계 의 호스트 이름, IP 주소 등 관련 정보 이 고 클 러 스 터 단일 고장 도 이 범주 에 속한다.
② 통일 적 인 이름: 주로 노드 의 유일 성과 디 렉 터 리 노드 트 리 구 조 를 이용 합 니 다.
③ 설정 관리: 노드 와 관련 된 것 은 설정 정보 입 니 다.
④ 분포 식 자물쇠: 노드 와 관련 된 것 은 경쟁 할 자원 이다.
다음은 프로젝트 의 실제 응용 이다.
1. watcher 메커니즘 을 이용 하여:
vqsapi 가 6 개의 인터페이스 로 데 이 터 를 보 낼 때 zookeeper 로 현재 살아 있 는 mongodb 와 api 를 모니터링 할 수 있 습 니 다.
vqsapi 동적 가 져 오기, mongodb 와 api 가 모두 살아 있 는 인터페이스 로 데 이 터 를 보 냅 니 다.
2. 임시 노드 의 특성 활용
운영 인터페이스 탐지, 모든 서버 가 zookeeper 에 임시 노드 를 등록 할 수 있 습 니 다. 인터페이스 가 끊 겼 을 때,
session 차단, 모니터링 목적 달성
3. 노드 의 유일한 특성 활용
분산 식 잠 금, 같은 자원 을 동시에 조작 하면 병발 문제 가 발생 할 수 있 습 니 다.
원생 의 zookeeper 문 구 는 비교적 번 거 롭 고 이해 하기 어렵 기 때문에 curator 프레임 워 크 가 잘 실현 되 었 습 니 다. 다음은 잠 금 작업 입 니 다. 
String path = String.format(LockPathScheme.STRATEGY_MODEL_ROUTE, modelId, isp,province,value);
       
	   //    
       CuratorFramework curator = CuratorFrameworkFactory.builder().retryPolicy(new ExponentialBackoffRetry(10000, 3)).connectString(zookeeperserver).build();
       curator.start();
       InterProcessMutex lock = new InterProcessMutex(curator, path);
       try {
    	   boolean b = lock.acquire(3, TimeUnit.SECONDS);
    	   if (!b) {
    		   resultMap.put("statusCode", 300);
              resultMap.put("message", "       !");
              return resultMap;
           }
           //   ,      
    	    resultMap = this.strategyRoute_dnspod_save_detail(request, id, modelId, modelName, category, province, isp, containCname, type, remark, node, value, ttl, weight, status,customerViewId);
    	   return resultMap;
    	   
       }catch(Exception e){
	    	   e.printStackTrace();
	    	   resultMap.put("statusCode", 300);
	           resultMap.put("message", "    !");
	           return resultMap;
       }finally {
       
          //        
    	   try{
               lock.release();
           }catch (Exception e){
               System.out.println(path + "     " + e);
           }
            CloseableUtils.closeQuietly(curator);
       }

마지막 으로 아주 완벽 한 예 는 zookeeper 프레임 의 다양한 특성 을 잘 사 용 했 습 니 다.
전환 하 다   http://www.cnblogs.com/wuxl360/p/5817549.html
우리 의 군집 이 있다 고 가정 하면:
(1) 20 개의 검색엔진 서버: 총 색인 중 일 부 를 담당 하 는 검색 작업 입 니 다.
① 검색엔진 의 서버 중 15 개 서버 는 현재 검색 서 비 스 를 제공 하고 있다.
② 5 개 서버 에서 색인 생 성 중.
이 20 개의 검색엔진 서버 는 검색 서 비 스 를 제공 하고 있 는 서버 가 서 비 스 를 제공 하지 않 고 색인 을 만 들 기 시작 하거나 색인 을 만 드 는 서버 가 색인 생 성 을 완료 하면 검색 서 비 스 를 제공 할 수 있 습 니 다.
(2) 총 서버: 이 20 개의 검색엔진 서버 에 검색 요청 을 보 내 고 결과 집합 을 통합 합 니 다.
(3) 예비 총 서버: 총 서버 가 다운 되 었 을 때 총 서버 를 교체 하 는 것 을 책임 집 니 다.
(4) 웹 cgi: 전체 서버 에 검색 요청 을 보 냅 니 다.
Zookeeper 를 사용 하면 보증 할 수 있 습 니 다:
(1) 총 서버: 검색엔진 을 제공 하 는 서버 가 얼마나 되 는 지 자동 으로 감지 하고 이 서버 에 검색 요청 을 합 니 다.
(2) 예비 총 서버: 다운 되면 예비 총 서버 를 자동 으로 사용 합 니 다.
(3) 웹 의 cgi: 총 서버 의 네트워크 주소 변 화 를 자동 으로 알 수 있 습 니 다.
(4) 다음 과 같이 실현 한다.
① 검색엔진 을 제공 하 는 서버 는 Zookeeper 에 znode, zk. create ("/ search / nodes / node 1", "hostname", getBytes (), Ids. OPEN ACL UNSAFE, CreateFlags. EPHEMERAL) 를 만 듭 니 다.
② 총 서버 는 Zookeeper 에서 znode 의 하위 노드 목록, zk. getChildren ("/ search / nodes", true) 을 가 져 올 수 있 습 니 다.
③ 총 서버 가 이 하위 노드 를 옮 겨 다 니 며 하위 노드 의 데 이 터 를 가 져 와 검색엔진 을 제공 하 는 서버 목록 을 생 성 한다.
④ 총 서버 가 하위 노드 가 변 경 된 이벤트 정 보 를 받 으 면 두 번 째 단계 로 되 돌아 갑 니 다.
⑤ 총 서버 는 Zookeeper 에 노드, zk. create ("/ search / master", "hostname", getBytes (), Ids. OPEN ACL UNSAFE, CreateFlags. EPHEMERAL) 를 만 듭 니 다.
⑥ 예비 서버 는 Zookeeper 의 '/ search / master' 노드 를 모니터링 합 니 다.이 znode 의 노드 데이터 가 바 뀌 었 을 때 자신 을 전체 서버 로 시작 하고 자신의 네트워크 주소 데 이 터 를 이 노드 에 넣 습 니 다.
⑦ 웹 의 cgi 는 Zookeeper 의 '/ search / master' 노드 에서 전체 서버 의 네트워크 주소 데 이 터 를 가 져 와 검색 요청 을 보 냅 니 다.
⑨ 웹 의 cgi 는 Zookeeper 의 '/ search / master' 노드 를 모니터링 합 니 다. 이 zno de 의 노드 데이터 가 바 뀌 었 을 때 이 노드 에서 전체 서버 의 네트워크 주소 데 이 터 를 가 져 오고 현재 총 서버 의 네트워크 주 소 를 변경 합 니 다.

좋은 웹페이지 즐겨찾기