Zookeeper 클 러 스 터 배치 및 사용

Zookeeper 는 Apache Hadoop 의 Zookeeper 서브 프로젝트 에서 발 전 했 고 Google Chubby 의 오픈 소스 가 실현 되 었 습 니 다.이것 은 분포 식 응용 프로그램 조율 서비스 로 제공 하 는 기능 은 설정 관리, 이름 서비스, 분포 식 동기 화, 대기 열 관리, 클 러 스 터 관리 등 을 포함한다.디자인 모델 의 측면 에서 볼 때 관찰자 모델 디자인 을 바탕 으로 하 는 분포 식 서비스 관리 구조 로 모두 가 관심 을 가 지 는 데 이 터 를 저장 하고 관리 한 다음 에 관찰자 의 등록 을 받는다. 이런 데이터 의 상태 가 바 뀌 면 Zookeeper 는 이미 Zookeeper 에 등 록 된 관찰자 에 게 해당 하 는 반응 을 알 릴 것 이다.클 러 스 터 에서 Master / Slave 관리 모델 과 유사 합 니 다.
Zookeeper 는 두 가지 실행 모드 가 있 습 니 다.
독립 모드 (standalone mode): 한 서버 에서 만 실행 되 며 테스트 환경 에 적합 합 니 다. 복사 모드 (replicated mode): 한 클 러 스 터 에서 실행 되 며 생산 환경 에 적합 합 니 다. 이 컴퓨터 클 러 스 터 는 '집합체' (ensemble) 라 고 합 니 다.
복제 모드 의 Zookeeper 는 복 제 를 통 해 높 은 가용성 을 구현 합 니 다. 집합체 의 절반 이상 이 사용 가능 한 상태 라면 서 비 스 를 계속 할 수 있 습 니 다. 이것 은 Zookeeper 의 복사 정책 과 관련 이 있 습 니 다. Zookeeper 는 zno de 트 리 의 모든 변경 사항 을 집합체 의 절반 이 넘 는 기계 로 복사 할 수 있 도록 합 니 다. Zookeeper 서 비 스 는 두 가지 역할 이 있 습 니 다. 하 나 는 leader, 마이너스 입 니 다.책 쓰기 서비스 와 데이터 동기 화, 나머지 는 follower 입 니 다. 읽 기 서 비 스 를 제공 합 니 다. leader 가 효력 을 잃 으 면 follower 에서 새로운 leader 를 다시 선택 합 니 다. 전체 Zookeeper 클 러 스 터 모드 에서 전체 클 러 스 터 는 하나의 전체 입 니 다. 클 러 스 터 의 모든 Zookeeper 노드 에서 전체 클 러 스 터 의 서 비 스 를 공유 합 니 다.
  • 환경:
        :CentOS Linux release 7.3.1611 (Core)

    Zookeeper: zookeeper - 3.4.12PP: 10.5.2.81 - 83Zookeeper 다운로드 주소:http://zookeeper.apache.org/releases.html#download
  • 배치: 1. 배치 수정
    [root@zk-2-82-0001 soft]# tar -xvf zookeeper-3.4.12.tar.gz
    [root@zk-2-82-0001 soft]# mv zookeeper-3.4.12 zookeeper
    [root@zk-2-82-0001 soft]# mv zookeeper /app
    [root@zk-2-82-0001 soft]# cd /app/zookeeper
    [root@zk-2-82-0001 zookeeper]# mkdir data
    [root@zk-2-82-0001 zookeeper]# mv conf/zoo_sample.cfg  conf/zoo.cfg
    [root@zk-2-82-0001 zookeeper]# vim conf/zoo.cfg
    # The number of milliseconds of each tick
    tickTime=2000   //Zookeeper                         ,  tickTime          ,    ,   session     tickTime   ,ZK               。
    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10    //        (   leader      )   leader          ,   tickTime       ,                                    ,                           。   10.                               。。         initLimit * tickTime  。
    #LeaderServes           Leader             ,    Leader          ,      。
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5     //   Leader   Follower       ,         ,          tickTime      ,         syncLimit * tickTime   ,                     ,          。   5.                 。
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/app/zookeeper/data     //Zookeeper              ,   /tmp/zookeeper,          ,         。
    dataLogDir=/app/zookeeper/logs  //        ,        dataDir。zookeeper              , ZK            ,       ,      ZK            ,                   , ZK                   。dataLogDir         (WAL),       version-2   (  log.1  ),                 ,        ZK       ,       。       64M,                   。 dataDir           snapshot,      。         ,     dataDir dataLogDir        ,                      。       ,ZK                              
    # the port at which the clients will connect
    clientPort=2181     //Zookeeper        ,           。
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60             ZK       ,          ,   IP        。  0        。                    ,             。  60.
    #minSessionTimeout=120             ,   tickTime 2 。           tickTime 。      ZK              ZK        ,       。
    #maxSessionTimeout=2400             ,   20          。           tickTime 。      ZK              ZK        。                     ,        ZK                        。                         ,               。
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3                    ,                        ,   3,        3         3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1                           ,           ,         。     ZK                ,  ZK                ,            ,           ,     2        ,    ZK                       ,             ,   ZK         Linux        。0           。
    #globalOutstandingLimit    ZK        ,        ,             ,                。
    #preAllocSize       ZK           ,   64M
    #snapCount                        ,   10 。   10                   
    #clientPortAddres               ZK   ,     IP           。
    #fsync.warningthresholdms         ZK                     ,                    。
    #electionAlg        Leader    ,          ,      。
    #cnxTimeout      Leader             TCP        ,   5.
    #forceSync               ZK                   (LINUX     ),   YES。
    #jute.maxbuffer                   ,   1MB。          ,    Zookeeper                    
    #skipACL        ACL  ,   no,              acl  。
    server.1=10.55.2.81:2888:3888
    server.2=10.55.2.82:2888:3888
    server.3=10.55.2.83:2888:3888
    // server.n n     ,           ;“=”            IP  ,     2888        (follower)       (leader)   ,     leader    ,                   ;     3888      leader        。
  • initLimit, syncLimit, Leader Serves, server. x 를 클 러 스 터 로 설정 합 니 다. 각 노드 의 zoo. cfg 설정 이 같 습 니 다. 직접 복사 하면 됩 니 다. 단일 컴퓨터 설치 와 클 러 스 터 설정 은 기본적으로 같 습 니 다. 클 러 스 터 설정 파일 의 내용 은 "server. id = host: port: port" 설정 이 많 을 뿐 데이터 Dir 디 렉 터 리 에 있 는 my id 파일 과 같 습 니 다.
    2. 로그 설정
    $ZK HOME / bin / zkEnv. sh 를 편집 하여 ZOO LOG DIR 설정 과 ZOO LOG4J PROP 의 위 치 를 찾 습 니 다 (대략 Line 56, Line 61).
    if [ "x${ZOO_LOG_DIR}" = "x" ] 
    then 
        #  zookeeper         
        ZOO_LOG_DIR="/home/xxx/zookeeper-2181/logs" 
    fi 
    
    if [ "x${ZOO_LOG4J_PROP}" = "x" ] 
    then 
        #        ,            
        ZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE,TRACEFILE" 
    fi

    Log4J 설정 파일 log4j. properties 를 편집 합 니 다. 이 부분 은 Log4J 설정 을 참고 합 니 다.
    # Define some default values that can be overridden by system properties 
    zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE, TRACEFILE 
    zookeeper.console.threshold=INFO 
    zookeeper.log.dir=. 
    zookeeper.log.file=zookeeper.log 
    zookeeper.log.threshold=ERROR 
    zookeeper.tracelog.dir=. 
    zookeeper.tracelog.file=zookeeper_trace.log 
    log4j.rootLogger=${zookeeper.root.logger}

    서버 상태: LOOKING: Leader 를 찾 습 니 다. 서버 에 이 상태 가 나타 나 면 현재 클 러 스 터 에 Leader 가 없다 고 생각 하기 때문에 선거 에 들 어가 야 합 니 다. FOLLOWING: 따 르 는 사람 상태, 현재 Follower 캐릭터 LEADING: Leader 상태, 현재 리더 각 색 OBSERVING: 관찰자 상태, 현재 서버 가 Observer 역할 임 을 나 타 냅 니 다.
    3. myid 파일 을 추가 하면 zoo. cfg 설정 파일 을 수정 하 는 것 외 에 클 러 스 터 모드 에서 자신의 신분, 즉 자신의 ID 값 파일 myid 를 설정 합 니 다. 이 파일 은 zoo. cfg 에서 dataDir 가 지정 한 디 렉 터 리 에 있 습 니 다. 이 파일 에는 하나의 숫자 만 있 습 니 다. 이 숫자 는 server. n 의 n 과 일치 합 니 다. 이 값 범 위 는 1 - 255 사이 일 수 있 습 니 다. Zookeeper 가 시작 할 때 읽 습 니 다.파일, 안에 있 는 데이터 와 zoo. cfg 의 설정 정 보 를 비교 하여 그 server 인지 판단 합 니 다.
    [root@zk-2-82-0001 zookeeper]# echo "2">data/myid

    기타 두 노드 유사 4, jdk 설치
    [root@zk-2-82-0001 soft]# rpm -ivh jdk-8u151-linux-x64.rpm  

    5. 서비스 시작
    [root@zk-2-82-0001 zookeeper]# cd bin/
    [root@zk-2-82-0001 bin]# ls
    README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
    [root@zk-2-82-0001 bin]# ./zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/bin/../conf/zoo.cfg
    Error contacting service. It is probably not running.       //          ,      ,    pid     , zookeeper.out         
    [root@zk-2-82-0001 bin]# rm -rf ../conf/zoo_sample.cfg   
    [root@zk-2-82-0001 bin]# ./zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    [root@zk-2-82-0001 bin]#

    jps - m 를 사용 하면 프로 세 스 를 조회 할 수 있 습 니 다. Zookeeper 의 프로 세 스 는 QuorumPeerMain 입 니 다.
    [root@zk-2-82-0001 bin]# jps -m
    1744 WrapperSimpleApp CloudResetPwdUpdateAgent
    2528 QuorumPeerMain /app/zookeeper/bin/../conf/zoo.cfg
    21745 Jps -m
    [root@zk-2-82-0001 bin]#

    6. 노드 상태 보기
    [root@zk-2-82-0001 bin]# ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/bin/../conf/zoo.cfg
    Mode: leader
    [root@zk-2-82-0001 bin]#
    
    [root@zk-2-81 bin]# ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/bin/../conf/zoo.cfg
    Mode: follower
    [root@zk-2-81 bin]# 
    
    [root@zk-2-82-0002 bin]# ./zkServer.sh status
    ZooKeeper JMX enabled by default
    Using config: /app/zookeeper/bin/../conf/zoo.cfg
    Mode: follower
    [root@zk-2-82-0002 bin]# 

    로그
    [root@zk-2-82-0001 bin]# tail -500f zookeeper.out 
    2018-06-21 15:24:59,618 [myid:] - INFO  [main:QuorumPeerConfig@136] - Reading configuration from: /app/zookeeper/bin/../conf/zoo.cfg
    2018-06-21 15:24:59,626 [myid:] - INFO  [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 10.55.2.81 to address: /10.55.2.81
    2018-06-21 15:24:59,626 [myid:] - INFO  [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 10.55.2.83 to address: /10.55.2.83
    2018-06-21 15:24:59,626 [myid:] - INFO  [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 10.55.2.82 to address: /10.55.2.82
    2018-06-21 15:24:59,626 [myid:] - INFO  [main:QuorumPeerConfig@398] - Defaulting to majority quorums
    2018-06-21 15:24:59,628 [myid:2] - INFO  [main:DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
    2018-06-21 15:24:59,628 [myid:2] - INFO  [main:DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
    2018-06-21 15:24:59,628 [myid:2] - INFO  [main:DatadirCleanupManager@101] - Purge task is not scheduled.
    2018-06-21 15:24:59,635 [myid:2] - INFO  [main:QuorumPeerMain@130] - Starting quorum peer
    2018-06-21 15:24:59,639 [myid:2] - INFO  [main:ServerCnxnFactory@117] - Using org.apache.zookeeper.server.NIOServerCnxnFactory as server connection factory
    2018-06-21 15:24:59,642 [myid:2] - INFO  [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.0.0:2181
    2018-06-21 15:24:59,646 [myid:2] - INFO  [main:QuorumPeer@1158] - tickTime set to 2000
    2018-06-21 15:24:59,646 [myid:2] - INFO  [main:QuorumPeer@1204] - initLimit set to 10

    7. ZooKeeper 접근
    [root@zk-2-82-0001 bin]# ./zkCli.sh -server 10.55.2.82:2181   //  loader  ,        
    Connecting to 10.55.2.82:2181
    2018-06-21 18:15:33,887 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
    ......
    WATCHER::
    
    WatchedEvent state:SyncConnected type:None path:null   //  
    [zk: 10.55.2.82:2181(CONNECTED) 0] ls /      //      、  , ls /        ,      zookeeper  。
    [zookeeper]
    [zk: 10.55.2.82:2181(CONNECTED) 0] help    //      
    ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history 
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port
    [zk: 10.55.2.82(CONNECTED) 0] ls2 /     //      、  ,                   
    [zookeeper, 20180621]
    cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x100000004
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 2 
    [zk: 10.55.2.82:2181(CONNECTED) 1] create /20180621 "201806211950"  //           ,       znode  “ 20180621 ”          
    Created /20180621
    [zk: 10.55.2.82:2181(CONNECTED) 2] ls /
    [zookeeper, 20180621]
    [zk: 10.55.2.82:2181(CONNECTED) 3] get /20180621     //      ,   znode              
    201806211950
    cZxid = 0x100000004
    ctime = Thu Jun 21 19:50:05 CST 2018
    mZxid = 0x100000004
    mtime = Thu Jun 21 19:50:05 CST 2018
    pZxid = 0x100000004
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 12
    numChildren = 0
    [zk: 10.55.2.82(CONNECTED) 3] set /20180621 "justin 51cto"     //      ,  20180621            
    cZxid = 0x100000004
    ctime = Thu Jun 21 19:50:05 CST 2018
    mZxid = 0x10000000b
    mtime = Thu Jun 21 20:23:43 CST 2018
    pZxid = 0x100000004
    cversion = 0
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 12
    numChildren = 0
    [zk: 10.55.2.82(CONNECTED) 4] get /20180621
    justin 51cto
    cZxid = 0x100000004
    ctime = Thu Jun 21 19:50:05 CST 2018
    mZxid = 0x10000000b
    mtime = Thu Jun 21 20:23:43 CST 2018
    pZxid = 0x100000004
    cversion = 0
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 12
    numChildren = 0
    [zk: 10.55.2.82(CONNECTED) 5] delete /20180621    //      ,       znode   ;        (    )  :rmr    
    [zk: 10.55.2.82:2181(CONNECTED) 4] quit
    Quitting...
    2018-06-21 19:50:28,534 [myid:] - INFO  [main:ZooKeeper@687] - Session: 0x200004654110000 closed
    2018-06-21 19:50:28,535 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@521] - EventThread shut down for session: 0x200004654110000
    [root@zk-2-82-0001 bin]# 

    이 때 다른 노드 에 로그 인하 면 볼 수 있 습 니 다. data 디 렉 터 리 에서 snapshot. 0: 메모리 에 데 이 터 를 저장 하 는 스냅 샷 입 니 다. zookeeper 서비스 가 시작 되 었 을 때 데이터 log. 100000001 을 복원 해 야 합 니 다. 로그 파일 은 기본적으로 데이터 디 렉 터 리 에 저 장 됩 니 다. 8. ssh 원 격 으로 Zookeeper 서 비 스 를 시작 합 니 다.
    [root@zk-2-82-0001 bin]# ssh 10.55.2.81 "source /etc/profile;/app/zookeeper/bin/zkServer.sh status"

    이렇게 하면 우 리 는 스 크 립 트 를 통 해 3 개의 노드 를 동시에 관리 할 수 있 습 니 다. 9, 4 자 명령 은 4 자 명령 을 통 해 서버 정 보 를 더욱 편리 하 게 얻 을 수 있 습 니 다. 4 자 명령 의 용법: echo 4 자 명령 | netcat localhost 2181, 자주 사용 하 는 4 자:
    conf: Zookeeper 서버 설정 에 대한 자세 한 정 보 를 출력 합 니 다 cons: 서버 에 연 결 된 모든 클 라 이언 트 의 완전한 연결 / 세 션 에 대한 자세 한 정 보 를 출력 합 니 다. "수신 / 발송" 을 포함 합 니 다.패키지 수량, 세 션 ID, 작업 지연, 마지막 작업 수행 등 dump: 처리 되 지 않 은 세 션 과 임시 노드 envi 출력: 서버 실행 환경 에 대한 자세 한 정 보 를 출력 합 니 다 reqs: 처리 되 지 않 은 요청 을 출력 합 니 다 ruok: 서비스 가 올 바른 상태 인지 테스트 합 니 다. 만약 "imok" 으로 돌아 갑 니 다.그렇지 않 으 면 stat: 성능 과 연결 에 관 한 클 라 이언 트 의 목록 을 출력 합 니 다. (이 명령 을 통 해 노드 가 leader 인지 follower 인지 확인 할 수 있 습 니 다)wchs: 출력 서버 watch 의 상세 한 정보 wchc: session 을 통 해 서버 watch 의 상세 한 정 보 를 보 여 줍 니 다. 출력 은 watch 와 관련 된 세 션 의 목록 wchp 입 니 다. 경 로 를 통 해 서버 watch 의 상세 한 정 보 를 보 여 줍 니 다. session 과 관련 된 경로 mntr 를 출력 합 니 다. 일부 Zookeeper 가 실 행 될 때 정 보 를 출력 합 니 다. 이 반환 결 과 를 분석 하면 감독 할 수 있 습 니 다.제어 효과 netcat 다운로드 주소:http://sourceforge.net/projects/netcat/files/netcat/
    [root@zk-2-82-0001 soft]# echo conf|netcat 10.55.2.81 2181

    데이터 및 로그 유지보수
    Zookeeper 의 데이터 파일 은 설정 에서 지정 한 dataDir 에 저 장 됩 니 다. 모든 데이터 파일 이름 은 snapshot 으로 시작 합 니 다. 모든 데이터 파일 은 zookeeper 의 특정한 시간 에 데이터 의 전체 스냅 샷 입 니 다. zookeeper 에서 데이터 에 대한 업데이트 작업 은 노드 생 성, 노드 내용 업데이트, 노드 삭제 등 을 포함 하여 트 랜 잭 션 로 그 를 기록 합 니 다. 클 라 이언 트 가 ZK 에 대한 업데이트 작업 은 영구적 이 며 영구적 이지 않 습 니 다.되 돌 릴 수 있 습 니 다. 이 를 위해 ZK 는 매번 업데이트 작업 을 트 랜 잭 션 로그 형식 으로 디스크 에 기록 합 니 다. 기록 에 성공 한 후에 야 클 라 이언 트 에 응답 합 니 다. zookeeper 는 몇 번 의 트 랜 잭 션 로그 (snapCount) 를 완성 합 니 다.나중에 스냅 샷 을 생 성 합 니 다. 현재 zk 의 모든 노드 상 태 를 하 드 디스크 에 파일 형식 으로 덤 프 하여 snapshot 파일 을 생 성 합 니 다. 이 곳 의 트 랜 잭 션 횟수 는 설정 할 수 있 습 니 다. 기본 값 은 100000 개 입 니 다. zookeeper 서버 에 서 는 트 랜 잭 션 로그, 스냅 샷 로그, log4j 로그 세 가지 로 그 를 생 성 합 니 다.
  • 시스템 로 그 는 log4j 를 사용 하여 관리 합 니 다. log4j 는 zookeeper 클 러 스 터 서버 실행 로 그 를 기록 하 는 데 사 용 됩 니 다. 이 로그 의 설정 주 소 는 conf / 디 렉 터 리 에 있 는 log4j. properties 파일 에 있 습 니 다. 이 파일 에는 'zookeeper. log. dir =' 라 는 설정 항목 이 있 습 니 다. log4j 일지 파일 이 실행 프로그램 (zkServer. sh) 과 있 음 을 표시 합 니 다.같은 디 렉 터 리 에 있 습 니 다. zkServer. sh 를 실행 할 때 이 폴 더 아래 에 zookeeper. out 로그 파일 이 생 깁 니 다.
  • zoo. cfg 에 서 는 설정 항목 dataDir 만 있 습 니 다. 이 설정 항목 은 zookeeper 스냅 샷 로그 와 트 랜 잭 션 로그 의 저장 주 소 를 설정 하 는 데 사 용 됩 니 다. 트 랜 잭 션 로그 에 저장 주 소 를 따로 설정 할 수도 있 습 니 다. 설정 항목 이름 은 dataLogDir 이 며, zoo sample. cfg 에 서 는 나타 나 지 않 습 니 다. dataLogDir 설정 항목 이 없 을 때 zookeeper 는 기본적으로 트 랜 잭 션 로그 파일 과 스냅 샷 로그 파일 을 저장 합 니 다.dataDir 에 대응 하 는 디 렉 터 리 에 있 습 니 다. 트 랜 잭 션 로그 (dataLogDir) 와 스냅 샷 로그 (dataLog) 를 사용 하 는 것 을 권장 합 니 다.zookeeper 클 러 스 터 가 잦 은 데이터 읽 기와 쓰기 작업 을 할 때 대량의 트 랜 잭 션 로그 정 보 를 생 성하 고 두 가지 로 그 를 분리 하여 저장 하면 시스템 성능 을 향상 시 킬 수 있 으 며, 두 가지 로 그 를 서로 다른 저장 매체 에 저장 하여 디스크 의 압력 을 줄 일 수 있 습 니 다.
  • 트 랜 잭 션 로그
    트 랜 잭 션 로 그 는 zookeeper 시스템 이 정상적으로 실행 되 는 과정 에서 모든 업데이트 작업 에 대해 클 라 이언 트 에 게 '업데이트 성공' 을 되 돌려 주 는 것 을 말 합 니 다.응답 하기 전에 zookeeper 는 이번 업데이트 작업 의 트 랜 잭 션 로 그 를 디스크 에 기록 할 것 을 보증 합 니 다. 그래 야 전체 업데이트 작업 이 적 용 됩 니 다. dataLogDir 가 지정 한 디 렉 터 리 에 폴 더 version - 2 가 존재 합 니 다. 이 폴 더 에는 사물 로그 파일 이 저 장 됩 니 다.
    [root@zk-2-82-0001 data]# cd version-2/
    [root@zk-2-82-0001 version-2]# ls
    acceptedEpoch  currentEpoch  log.100000001
    [root@zk-2-82-0001 version-2]# 

    로그 파일 의 이름 규칙 은 log 입 니 다. 로 그 를 기록 하 는 첫 번 째 트 랜 잭 션 의 ID, 16 진수 입 니 다.
    트 랜 잭 션 로그 시각 화
    zookeeper 의 트 랜 잭 션 로 그 는 바 이 너 리 파일 입 니 다. vim 등 도 구 를 통 해 직접 접근 할 수 없습니다. zookeeper 가 가지 고 있 는 jar 패 키 지 를 통 해 트 랜 잭 션 로그 파일 을 읽 을 수 있 습 니 다. 다음 명령 을 수행 하 십시오.
    [root@zk-2-82-0001 zookeeper]# java -classpath .:lib/slf4j-api-1.7.25.jar:zookeeper-3.4.12.jar org.apache.zookeeper.server.LogFormatter data/version-2/log.100000001 
    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: Defaulting to no-operation (NOP) logger implementation
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    ZooKeeper Transactional Log File with dbid 0 txnlog format version 2
    6/21/18 6:15:33 PM CST session 0x1000045eba30000 cxid 0x0 zxid 0x100000001 createSession 30000
    
    6/21/18 6:59:45 PM CST session 0x1000045eba30000 cxid 0x2 zxid 0x100000002 closeSession null
    6/21/18 7:47:53 PM CST session 0x200004654110000 cxid 0x0 zxid 0x100000003 createSession 30000
    
    6/21/18 7:50:05 PM CST session 0x200004654110000 cxid 0x1 zxid 0x100000004 create '/20180621,#323031383036323131393530,v{s{31,s{'world,'anyone}}},F,1
    
    6/21/18 7:50:28 PM CST session 0x200004654110000 cxid 0x5 zxid 0x100000005 closeSession null
    6/21/18 7:51:01 PM CST session 0x1000045eba30001 cxid 0x0 zxid 0x100000006 createSession 30000
    
    6/21/18 7:53:30 PM CST session 0x1000045eba30001 cxid 0x4 zxid 0x100000007 closeSession null
    6/21/18 8:18:55 PM CST session 0x200004654110001 cxid 0x0 zxid 0x100000008 createSession 30000
    
    6/21/18 8:21:15 PM CST session 0x200004654110002 cxid 0x0 zxid 0x100000009 createSession 30000
    
    6/21/18 8:21:36 PM CST session 0x200004654110001 cxid 0x0 zxid 0x10000000a closeSession null
    6/21/18 8:23:43 PM CST session 0x200004654110002 cxid 0x6 zxid 0x10000000b setData '/20180621,#6a757374696e20353163746f,1
    
    6/21/18 8:25:09 PM CST session 0x200004654110002 cxid 0xa zxid 0x10000000c delete '/20180621
    
    6/21/18 8:34:46 PM CST session 0x200004654110002 cxid 0xb zxid 0x10000000d closeSession null
    EOF reached after 13 txns.
    [root@zk-2-82-0001 zookeeper]#

    스냅 로그
    zookeeper 의 데 이 터 는 메모리 에 트 리 구조 로 저 장 됩 니 다. 스냅 샷 은 일정 시간 마다 전체 DataTree 의 데 이 터 를 정렬 하여 디스크 에 저장 합 니 다. 이것 이 바로 zookeeper 의 스냅 샷 파일 입 니 다. dataDir 가 지정 한 디 렉 터 리 에 폴 더 version - 2 가 존재 합 니 다. 이 폴 더 에는 스냅 샷 로그 파일 이 저 장 됩 니 다.
    [root@zk-2-82-0002 version-2]# ls
    acceptedEpoch  currentEpoch  log.100000001  snapshot.100000000
    [root@zk-2-82-0002 version-2]# 

    zookeeper 스냅 샷 파일 의 이름 규칙 은 snapshot 입 니 다. zookeeper 가 스냅 샷 을 터치 하 는 순간 제출 한 마지막 트 랜 잭 션 의 ID 를 표시 합 니 다.
    로그 정리
    zookeeper 3.4.0 이후 zookeeper 는 snapshot 과 트 랜 잭 션 로그 자동 청소 기능 을 제공 합 니 다. zoo. cfg 의 autopurge. snapRetainCount 와 autopurge. purgeInterval 두 매개 변 수 를 설정 하여 로그 파일 의 정시 청 소 를 실현 합 니 다. autopurge. snapRetainCount 이 매개 변 수 는 유지 해 야 할 파일 수 를 지정 합 니 다. 기본적으로 3 개 를 유지 합 니 다. autopurge. purgeInterval 이라는 매개 변 수 는청소 빈 도 를 정 했 습 니 다. 단 위 는 시간 입 니 다. 1 또는 더 큰 데 이 터 를 작성 해 야 합 니 다. 0 은 자동 청소 기능 을 켜 지 않 음 을 표시 합 니 다.
    [root@zk-2-82-0001 bin]# grep -in "autopurge" ../conf/zoo.cfg 
    21:# administrator guide before turning on autopurge.
    26:#autopurge.snapRetainCount=3
    29:#autopurge.purgeInterval=1
    [root@zk-2-82-0001 bin]# 

    또는 명령 을 통 해 정기 적 으로 청소 하기:
    #!/bin/bash
    #snapshot file dir
    dataDir=/opt/zookeeper/zkdata/version-2
    #tran log dir
    dataLogDir=/opt/zookeeper/zkdatalog/version-2
    #Leave 66 files
    count=66
    count=$[$count+1]
    ls -t $dataLogDir/log. | tail -n +$count | xargs rm -f
    ls -t $dataDir/snapshot. | tail -n +$count | xargs rm -f    

    두 디 렉 터 리 에 해당 하 는 파일 을 삭제 하고 최신 66 개의 파일 을 저장 합 니 다. crontab 에 기록 할 수 있 습 니 다. 매일 새벽 2 시 에 한 번 실행 하도록 설정 하면 됩 니 다. ZK 자신 도 스 크 립 트 를 썼 습 니 다. bin / zkCleanup. sh 에 있 기 때문에 이 스 크 립 트 를 직접 사용 해도 청소 작업 을 수행 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기