2015년 8월 31일 월요일

Druid (Interactive Analytics at Scale) - Cluster Setting

RealTime Analytics Layer 에서 사용가능한 NoSQL 중 설치는 다소 복잡하지만, 튜닝을 적절히 해주면 꽤 좋은 성능을 얻을 수 있는 Druid.

아래는 Druid Production Cluster 를 위한 간략한 버전의 Cluster Setting 설치기 이다. 간략해 보이지만, 실제 웹사이트 메뉴얼에 부족한 부분 위주로 정리한거라 실제는 이것보다 훨씬 방대한 설치 세팅 작업이 필요하다. 한가지 아쉬운점은 웹상 메뉴얼데로 설치하면 난관을 30번쯤 만난 다는 점.. 아래는 난관을 해결한 Key 위주로만 적은 내용이라, 실제 설치시에는 메뉴얼과 함께 보면서 설치해야 한다.

우선 메뉴얼을 속독 하면서 보았던, 인상깊은 문구....
When talking about query speed it is important to clarify what "fast" means: with Druid it is entirely within the realm of possibility (we have done it) to achieve queries that run in single-digit seconds across a 6TB data set.


본 Cluster 노드 세팅 스크립트를 메모하면서 수행한 시점에 동원된 Node 는 총 7대 이며, 일전에 세팅한 Single Node 로 세팅된 환경을 VM Template 화 하여 7대로 증분 시키고, 필요없는 데몬을 끄거나, 재 설정 하는 식으로 세팅하였다.

[그림1] VM6대 노드 구성


구성한 노드의 구성은 아래와 같다.

vm-broker01 : broker (32core,244GB,SSD), 32G Heap
vm-druid01 : historical (32core,244GB,SSD), 32G Heap
vm-druid02 : middleManager (32Core,244GB,SSD), 32G Heap
vm-druid03 : realtime -> (32Core,244GB,SSD), 32G Heap
vm-druid04 : zookeeper01, coordinator (8Core)
vm-druid05 : zookeeper02, mysql , overlord (8Core) - for indexing Service

[그림2] web datasource 콘솔


[그림3] web task 콘솔


[그림4] middlemanager 모니터링


  1. mysql 세팅 변경 ( at vm-druid05 )
    1. default 패스워드 변경
      1. http://blog.naver.com/gihyunkwak/220329365505
    2. 원격 접속 허용되도록 변경
      1. http://nsinc.tistory.com/70
    3. Template 화 Copy 된 Node 이므로 vm-druid06 Node 를 제외한 전체 노드에서 Mysql데몬 중지. 그리고 druid05에만 구동.
      • sudo service mysqld stop
      • sudo service mysqld start
  2. zookeeper 세팅 변경 ( at vm-druid06 )
    1. zoo.cfg 변경
      • dataDir=/data02/zookeeper/data
    2. zookeeper 세팅 복제 및 복제 서버 세팅
      • 상세 세팅 방법은 Zookeeper 페이지 메뉴얼에 잘 나와 있으므로 skip
    3. zookeeper 구동
      • bin/zkServer.sh start &   ( & 안해도 되긴 하지만... )
    4. zookeeper AutoStart 설정
  3. dervy 설치: 아래 dervy 모드는 최초 설치 테스트 시점에만 사용. dervy로 설치 성공 이후에는, 실 Production 용에서는 AWS 와 Hadoop Yarn 모드로 변경 세팅 해야 함. (설치 메뉴얼 그데로 구성하였으므로 이 부분은 설치 메뉴얼 정리 skip)
    1. wget http://apache.mirror.cdnetworks.com//db/derby/db-derby-10.11.1.1/db-derby-10.11.1.1-bin.tar.gz
    2. 기타 세팅
      1. http://db.apache.org/derby/papers/DerbyTut/ns_intro.html
      2. 서버 모드 실행
        1. http://db.apache.org/derby/papers/DerbyTut/ns_intro.html
        2. java -jar derbyrun.jar server start
        3. lib 폴더로 가서 위 2를 수행하면 path 안잡아줘도 수행 가능.
  4. common 세팅 ( all node )
    1. config 수정 : 메뉴얼 내용과 유사하지만.. 수치 값에는 데이타 크기와 Job 성격에 따른 실험적 튜닝이 필요함.
    2. SCP 로 전체 노드에 복사
      • scp common.runtime.properties moneymall@vm-druid01.cloudapp.net:/data01/druid/druid-0.7.0/config/_common/
  5. overload 실행
    1. config 수정 : 메뉴얼 내용과 유사하지만.. 수치 값에는 데이타 크기와 Job 성격에 따른 실험적 튜닝이 필요함.
    2. SCP 로 전체 노드에 복사
    3. run 스크립트 작성 : 메뉴얼 내용과 동일
  6. middle manager node 실행
    1. config 수정 : 메뉴얼 내용과 유사하지만.. 수치 값에는 데이타 크기와 Job 성격에 따른 실험적 튜닝이 필요함.
    2. scp 로 전체 노드에 복사
    3. run 스크립트 작성 
  7. coordinator 실행
  8. historical 실행
  9. broker 실행
    1. config 수정
      1. 아래 부분 수치를 메뉴얼 데로 하면 안됨. 1의 자리 숫자 8을 7로 바꿈.
      2. druid.processing.buffer.sizeBytes=2147483647
  10. 기타 장애 해결
    1. 중요 batch 수행 장애 해결 tip1
      1. batch 수행을 05번 노드 (overload 노드)에서 수행하였는데, ddl 이 담겨져 있는 json 에서(overload 노드에 존재하는..) 가리키는 물리 path 는 실은 05번 노드가 아닌, middlemanager 가 접근하는 path 로 적어져 있어야 함. middlemanager 가 복수개 이므로, 어떤 manager 에 할당될지 모르는 환경에서는 hdfs 등 공유 스토리지가 아닌 경우 path 설정에 유의할 필요가 있음.
    2. 중요 batch 수행 장애 해결 tip2
      1. config 디렉토리는 모두 실제 존재하고 적절한 퍼미션이 있어야 함.
      2. 특히, jvm 옵션중에 존재하는 tmp 디렉토리 또한 실제 물리적으로 존재하고 퍼미션이 적절해야 에러 없이 수행 됨.
    3. 인덱스가 다이나믹 하게 되도록 수정. 
      1. http://druid.io/docs/0.7.1.1/Indexing-Service-Config.html





댓글 없음:

댓글 쓰기