레이블이 Couchbase인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Couchbase인 게시물을 표시합니다. 모든 게시물 표시

2016년 9월 30일 금요일

Couchbase ( 설치 및 설정 가이드 )

Couchbase 설치 및 설정 가이드


  1. Linux 커널 파라미터 조정 

    1. Swappiness 조정

      1. vi /etc/sysctl.conf  파일에  아래 값을 등록 후 저장 합니다. ( 영구적 저장 )
        vm.swappiness = 0
      2. sysctl 명령어로 현재 Dynamic 환경 설정 
        sysctl -w vm.swappiness = 0


    2.  Disable  Transparent Huge Pages ( THP )
      1. Setting 확인
        cat /sys/kernel/mm/*transparent_hugepage/enabled
        cat /sys/kernel/mm/*transparent_hugepage/defrag
        -> 위 두 파라미터의 결과값이 Never 이여야 Page 할당에 따른 성능저하를 방지할 수 있습니다.
      2. Setting 변경 
        vi /etc/rc.local 에 아래 값을 등록 후 저장
        for i in /sys/kernel/mm/*transparent_hugepage/enabled; do
             echo never > $i; 
        done 
         
        for i in /sys/kernel/mm/*transparent_hugepage/defrag; do
             echo never > $i; 
        done 
      3. 현재값 변경 
        echo "never" > /sys/kernel/mm/*transparent_hugepage/enabled

        echo "never" > 
        /sys/kernel/mm/*transparent_hugepage/defrag

    3. 사용자 리소스 제한값 ulimit 수정  
      1. 확인 
        ulimit -a
      2. 수정 (최소 8192 개로 설정 필요) 
        ulimit -n 10240
  2. 다운로드 

    1. Couchbase Download Website 에서 RPM Package Download 
      1. http://www.couchbase.com/nosql-databases/downloads External Link
      2. Community Edition Tab 에서 3.0.1 Version 을 Download
  3. 설치 

    1. Root 권한으로 Rpm 설치를 할 경우 RPM 에서 자동으로 Couchbase 유저를 생성하여 설치를 하게 되므로, RPM Package Download 후에 RPM 으로 설치를 수행합니다.  
      root> rpm -ivh couchbase-server-community-3.0.1-centos6.x86_64.rpm
    2.  RPM 으로 설치 이후에 Couchbase 가 기동 되며, Service 에 자동으로 등록되어 Couchbase 의 시작과 중지는 다음과 같이 수행할 수 있습니다. 
      시작 : sudo service couchbase-server start
      중지 :  sudo service couchbase-server stop
  4. Server 설정

    1. Couchbase 는 Admin 및 Monitoring 을 위한 Web Console 을 제공하고 있으며,  최초 설정은 Web 으로 설정하는 것이 보다 편리 합니다.  
    2. Web Browser 에서 http://<host>:8091/index.html 을 입력하여 Admin Console 에 접속 합니다.
    3. 위 Setup Click 하여 최초 설정을 진행합니다. 
    4. 개발 서버로 사용할 경우 Setup 이후 Default 설정을 따라 진행하나, Game 성능 QA 또는 상용 서버로 사용될 경우 아래 상세 설정을 참고 하여 Setting 을 진행 할 것을 권장합니다.  

  5. 상세 설정 ( Configure Server )

    1. Disk 설정

      1. Database Path 와 Indices Path 는 Disk I/O 성능 병목을 방지하기 위해 물리적으로 분할하여 지정 합니다.
    2. Hostname 설정

      1. Hostname 은 실서버의 IP 를 지정합니다. ( 노드 간 Clustering 을 위해 사용되므로, IP 를 지정합니다. ) 
    3. Cluster 설정

      1. Cluster 설정은 최초로 설정되는 서버의 경우에는 Start a new Cluster 로 Cluster 를 구성해야 하며, 최초 구성 이후 Scale-Out 으로 사용될 Second 이후 서버는 Join a Cluster Now 로 진행합니다.  
    4. RAM Quota 설정

      1. 서버당 Ram Quota 는 Couchbase 에서 사용될 Server 당 가용 메모리 Max Limit 설정이며, OS 가 사용할 Kernel 및 Cache 등의 Memory 영역 2~4GB 를 제외하고 설정하는 것을 권장합니다.
        (Physical Memory 16GB 서버의 경우 3GB~4GB 여유 메모리를 제외하고 12GB ~13GB 를 Server RAM Quota 로 설정 ) 
      2. RAM Quota 는 Online 상에서 변경 가능합니다. 
    5. 설정 UI


    6. Next 를 Click 하여 다음 Setting 화면으로 넘어가면 , Test 를 위한 Sample Bucket Setting 을 할 수 있으며 선택하지 않고 계속 진행하도록 합니다.

  6. 상세 설정 ( Create Default Bucket )

    1. Default Bucket 설정

      1. Default Bucket 은 사용자가 User Bucket 을 생성하기 전에 만들어지는 Default Bucket 이며, 모든 Setting 을 완료한 이후 삭제 할 수 있으므로 Bucket Type 은 Couchbase Bucket 로 설정하고
        Bucket RAM Quota 는 최소 Size 인 100M를 설정합니다.
      2. Cache Metadata 는 Value Eviction 으로 설정합니다.

        1. Value Eviction 은 Couchbase 가 Memory 확보 시에 Key 와 Meta 정보는 Memory 상에 두고,  Value Data 만 축출하는 옵션이며, Full Eviction 은 Key 와 Metadata, Value 모두를 축출하게 됩니다. 
        2. Full Eviction 은 Memory Overhead 를 줄일 수 있으나 성능저하에 원인이 될 수 있으므로 충분한 Memory 를 확보하고 Value Eviction 모드를 사용하는 것을 권장 합니다. 
    2. Replicas 설정 
      1. Replica 는 최소한 1개 Copies 를 설정합니다.  Memory Quota 산정 시 Memory 가 충분할 경우 안정성 확보를 위해 Replica 를 2로 설정할 수 있습니다.
    3. Disk I/O Optimization 
      1. Disk I/O priority 는 Low 로 설정 합니다. Data durability 확보를 위해 High 를 선택 할 경우 성능 지연 현상이 발생하므로, Disk I/O 우선 순위는 Low 로 설정합니다.
    4. Flush 
      1. Flush 를 활성화하면 Flush 명령어로 Bucket 의 데이터를 모두 삭제 할 수 있으나, 실제 서비스에는 비 활성화를 권장하므로, Enable 을 체크하지 않고 진행한다.
    5. 설정 UI


    6. Next 를 Click 한 이후 Notifications TAB 에서는 Update 알림을 Disable 하고 Next 를 Click 합니다.
  7. 상세 설정 (Configure Server)

    1.  계정 설정
      1. 각 서버의 계정을 설정하도록 합니다. 추가 노드가 Cluster 에 Join 할 때 해당 계정 및 Password 가 사용되며, Password 는 문자 및 특수문자가 포함된 8자 이상의 문자열로 설정하도록 합니다.



      2. 위 설정까지 완료 되면 최초 가용 노드의 설정이 완료 됩니다.
  8. 추가 노드 Join Cluster

    1. 4번 항목의 Server 설정 및 5번 항목의 상세 설정 ( Configure Server )  을 참조 하여 서버를 동일하게 설정합니다. 
    2. 해당 노드는 Cluster 에 Join 되야 하는 추가 노드이므로, Join Cluster 를 선택하여 최초에 설정한 Server 의 IP 및 Username/Password 를 입력하여 연결하도록 합니다.



    3. Join a cluster 가 완료 되고 나면, Cluster Meta 정보에 등록만 되고 바로 사용 할 수는 없습니다.  추가 노드를 Cluster 의 노드로 사용하려면 Bucket 데이터의 Rebalance 작업이 필요합니다. 
    4. 노드를 추가 한 이후 Server Nodes -> Pending Rebalance 정보 Tab 을 확인 하면 추가 된 노드를 확인 할 수 있으며 , Rebalace 를 Click 하면 Data 및 Meta 정보를 Rebalace 후 비로소 Cluster 에 참여하게 됩니다.




  9. 추가 튜닝 설정 

    1. Auto-Compaction 
      1. Couchbase 서버의 스토리지 엔진은 파일을 계속 붙여나가는 방식으로 확장 됩니다. (기존 Page 부분을 Update 방식이 아닌, 추가 적으로 ADD 하고 Flag 로 구분하는 방식  )
        이에 따라 파일의 오래된 정보들을 제거함으로서 스토리지 용량을 관리하게 되며, 이 기능이 Auto-Compaction 기능입니다.  
      2. Auto compaction 이 서비스 Peak Time 에 빈번하게 발생하면 전반적인 성능 저하가발생할 수 있으므로, Time Interval 을 설정하여, 서비스 부하가 가장 낮은 시간대에 수행될 수 있도록
        설정하는 것을 권장 합니다.
      3. 설정 UI
    2. Auto-Failover 설정 
      1. 특정 노드 서버 장애 시 지속적인 서비스 제공을 위해 Auto-Failover 를 설정 합니다.  Timeout 시간은 120초로 설정합니다.




  10. Default Bucket 삭제

    1. 상용 서비스 용으로 설정 시 Memory 의 확보를 위해 최초 설정 시 Setting 되었던 Default Bucket 은 삭제 하도록 합니다.  
    2. Bucket 정보에서 Edit 를 Click 하여 Bucket 을 삭제 할 수 있습니다.





Couchbase ( 시스템 산정 가이드 )

  1. 목적 

    1.  Couchbase 초기 세팅 시 플랫폼을 산정하기 위한 검토자료로 사용합니다. 

  2. CPU

    1. Couchbase 는 각 코어의 Clock Speed 보다 Multi Core 환경에 더 유용합니다. ( Multi-threaded Process 환경) 
    2. 물리적으로 노드 당 최소 CPU 4~8 Core 를 권고하며, 추가 확장 필요 시 Scale-Out 방식으로 노드를 추가한 후 Rebalancing 하는 것을 권고 합니다. 
    3. 기본 최소 4 Core 에
      Bucket 하나를 추가 할 경우  + CPU Core 1개 추가,
      Design Document 추가 시    + CPU Core 1개 추가 권장합니다.  
      1. 3개 Bucket 과 1 Design Document 를 사용시 ( 4 Core +  3 Core(3Buket) + 1 Core(1 Design Document) ) = 8 Core 권장 
    4. 원격 복제 XDCR 와 Views 를 사용할 경우 최소 CPU 6 Core 이상을 권장합니다.
  3. 메모리 산정 

    1. Memory Quota 산정
      • 목적 : Memory Quota 산정을 통해 필요 Node 개수를 확보하기 위함입니다.  

    2. 산정 대상 Variable 
      Variable
      Description
      Documents Count
      Working Set 으로 예상되는 Document 의 총 수 
      ID Size
      Documents ID 의 평균 Size ( Key )
      Value Size
      Value 의 평균 Size
      Number of Replicas
      복제(Replica) 의 수 
      Working Set Percentage
      Memory 에 상주하여 Data 를 사용할 percnetage
      Ram Quota Per Node
      노드당 Couchbase 를 위해 할당할 Ram Quota
      OS 와 특정 APP 가 사용할 최소 2GB 의 RAM 이상의 여유분을 제외하고 Quota  를 잡는 것을 권고 
      MetaData Per Document
      MetaData 는 Document 당 60 Byte 고정 (반드시 메모리에 상주)
      Headroom
      일종의 Metadata 를 위한 보정치
      SSD 를 사용하면 Memory 의 25% ,  Hard Disk 사용 시 Memory 의 30%
      High Water Mark
      Couchbase 에서 설정하는 RAM 의 High Water Mark
      Default 로 Node의 RAM 에 85% 로 설정 

    3. 산정 공식
       
      Variable
      Description
      Detail
      No_of_copies 
      1 +  Replica 의 수
      원본 노드와 Replica 의 수
      Total_metadata
      (Documents Count) * ( Metadata per Document + ID Size ) * (No_of_copies)
      Document Count 는 최대 증가 예상 수를 추측
      Total_Dataset
      (Documents Count) * ( Value Size ) * ( No_of_copies )
      Document Count 는 최대 증가 예상 수를 추측
      Working_Set
      Total_dataset * ( Working_set_percentage )
      메모리에 상주시킬 평균 Working Set 크기
      Cluster RAM quota Required
      (Total_metadata + Working_set ) * ( 1 + headroom) / ( high water mark)
      Cluster 에서 사용될 총 RAM 필요 크기
      Number of Nodes
      Cluster RAM quota required / RAM quota per node
      Cluster 구성에 필요한 노드 수
      RAM quota per node 는 Physical Memory - 2GB 권고


    4. 산정 공식 예시 (Input Variable)
      Input Variable
      Sample Value
      Document Count
      1,000,000 Row
      ID Size
      100 Byte
      Value Size
      10,000 Bye
      Number of Replicas
      1
      Working Set Percentage
      20 %
      Type Of Storage
       -- Overhead Percentage
      IF(HDD)THEN
      30% 
      Metadata Per Document
      60 Byte
      High Water Mark
      85 %
      RAM quota per node
      6 GB ( Physical Mem 8GB 시) 

    5. 산정 공식 대입 예시(Calculation)
      variable
      Calculation
      Detail
      No_of_copies
      1 + 1
      원본 노드와 Replica 수의 합
      Total_metaData
      1,000,000 * ( 60 + 100) *  (2) = 320,000,000 Byte
      1,000,000 Row 에 필요한 MetaData 크기 (반드시 RAM 에 상주)
      Total_Dataset
      1,000,000 * (10,000) * (2) =
      20,000,000,000  Byte
      Key 를 제외한 총 Data 의 크기
      Working_Set
      20,000,000,000 * (0.2) =
      4,000,000,000 Byte
      Working Set 으로 활용될 Memory 의 크기
      Cluster RAM Quota Required
      ( 320,000,000 +4,000,000,000) * ( 1+ 0.30 ) / (0.8) =
      7,020,000,000 Byte ( 6.6 GB)
      총 필요한 RAM 의 크기
      Number of Nodes
      6.6 GB / 6GB = 1.1 Node Or 2 Node
      Cluster 구성에 필요한 노드의 수는
      ( Cluster RAM Quota Required /노드당 Quota )

  4. Disk Throughput and sizing 

    1. Size
      • Key-Value Data Only : Disk 의 사이즈는 Key-value data 만을 유지하는 기준으로 저장될 모든 Dataset 의 size 의 2~3배를 권고합니다.
      • View 사용 : View 가 사용될 경우 View 는 실제 데이터를 저장하여 Indexing 으로 사용하기 때문에 View 의 개수에 따라 적절히 추가 산정해야 합니다.
    2. Throughpu
      1. Couchbase 는 데이터 영속성을 위해 Disk 에 Key-value 를 저장하게 되므로, Disk I/O 도 중요합니다. 
      2. Couchbase Server 의 Install 영역과 Data, Index(View) 영역을 물리적인 Disk 분할 함으로서 I/O 분산 효과로 성능이 향상됩니다.

        분류
        물리적 분할
        Mount
        Engine
        /dev/sda1
        /opt/couchbase
        Data
        /dev/sdb
        /data
        Index
        /dev/sdc
        /index

      3. RAID 구성은 필요조건은 아니나 RAID 0 or 10 을 권장합니다. 

  5. Network Bandwidth 

    1. 최소 1 Gig Bit 대역의 Network 으로 구성하는 것이 좋으며, Low latency 가 중요한 환경일 경우 10 Gig Bit 대역도 성능 향상에 도움이 됩니다.
  6. Couchbase Version

    1. 현재 Community Edition의 최신 버전을 사용할 것을 권장 
  7. 권장 SPEC 요약

    항목
    권장 SPEC
    CPU
    8 Core
    RAM(Physical)
    최소 16GB ~ 32GB ( 추가 확장 필요시 Scale-Out 으로 확장)
    Disk
    HDD Disk ( Data/Index 물리적 분활) , 예상 저장 DataSet 의 3배 권장
    Network
    1 Gig Bit Bandwidth
    Couchbase Version
    Community Edition 최신 버전 


2016년 9월 26일 월요일

Couchbase ( Tool 사용법 정리)


  • Couchbase server 3.0 버전 기준 Tool 정리
    1. 자세한 옵션의 내용은 추가 URL 의 Document 를 참조
       
  • TOOL 내용

    종류Tool내용사용법추가 설명 URL
    분석Cbanalyze-coreCore 파일 dump 분석 툴 cbanalyze-core -r [root] -f [reportfile] [corefile]http://docs.couchbase.com/admin/admin/CLI/cbanalyze-core_tool.html
    백업Cbbackup백업 툴 ( Cluster,single , bucket 당 가능 ) -- 전체 백업(Cluster)
    cbbackup http://HOST:8091 ~/backups \
              -u Administrator -p password
    http://docs.couchbase.com/admin/admin/CLI/cbbackup_tool.html
    복구Cbrestore복구 툴 cbrestore /backups/backup-42 couchbase://HOST:8091 \http://docs.couchbase.com/admin/admin/CLI/cbrestore_tool.html
    진단Cbcollect_info에러진단 수집 툴
    couchbase techincal support 를 위한 수집툴
    cbcollect_info collect.zip

    http://docs.couchbase.com/admin/admin/CLI/cbcollect_info_tool.html
    데이터cbdocloader

    Json 파일 로딩 툴cbdocloader -n 10.5.2.117:8091 -u Administrator -p password -b mybucket ../samples/gamesim.ziphttp://docs.couchbase.com/admin/admin/CLI/cbdocloader_tool.html
    관리cbepctl각종 Conf 조정 툴
    (thread pool 변경, log setting 변경 등)
    cbepctl [localhost]:11210 -b [bucket_name] -p [bucket-password] start

    cbepctl [localhost]:11210 -b [bucket_name] -p [bucket-password] stop
    cbepctl [localhost]:11210 -b [bucket_name] -p [bucket-password] set [command-type] [parameter] [value]

    http://docs.couchbase.com/admin/admin/CLI/cbepctl-intro.html
    점검cbhealthchecker Couchbase 점검 툴 cbhealthchecker -c 10.3.1.10:8091 -u Administrator -p passwordhttp://docs.couchbase.com/admin/admin/CLI/cbhealthchecker_tool.html
    관리cbreset_password

    Passwd 변경 툴cbreset_password 10.5.2.117:8091http://docs.couchbase.com/admin/admin/CLI/cbreset_password_tool.html
    이관cbtransfer 데이터 이관툴(복제,복원포함)cbtransfer http://SOURCE:8091 /backups/backup-42

    http://docs.couchbase.com/admin/admin/CLI/cbtransfer_tool.html
    데이터cbworkloadgen

    임의의 데이터 생성 cbworkloadgen -n 10.5.2.54:8091
            -r .9 -i 100000
            -s 100
            -b my-other-bucket
            -t 10
    http://docs.couchbase.com/admin/admin/CLI/cbworkloadgen_

    2016년 9월 23일 금요일

    Couchbase ( Compaction 시 응답 지연 현상 분석 )

    Couchbase Compaction시에 put 처리가 지연 되는 현상과 예상한 것 보다 Throughput 이 나오지 않는 현상을 테스트를 재현하였고, 이에 대한 원인 분석을 진행함. 

    1.     현상
    A.     Couchbase compaction ( 데이터 압축과 삭제 작업) 시 로그 적제 지연 현상
    B.      Throughput 이 예상한 것 보다 낮게 나오는 현상

    2.     문제
    A.     APP 에서 Couchbase 연결 옵션 중 Persist_to 옵션을 사용함으로 Compact 시에 발생되는 File Locking 으로 인해 Client 가 Request 에 대한 Sync 를 하지 못해 대기 하는 현상

    B.      Persist_to 와 Replica_to 옵션을 사용하므로 인해 Client 가 1 Tier 에서 성공 Return 을 받지 못하고 File I/O 와 Replica 전체에 Success 처리를하고 나서 응답을 받아야 하므로, Throughput 이 낮게 나오는 현상

    3.     용어 설명
    A.     SET 시 Durability 파라미터 지정 
                             i.         해당 파라미터는 성능을 위해 Insert Operation 시 메모리만 저장하고 리턴을 받을 것이냐, 안정성을 중요시하여 디스크에 Sync 를 확인하고  Return 받을 것이냐를
    소스 연결 옵션에서 지정하는 파라미터 입니다. NoSQL 특성 상(In-memory Cache 메커니즘을 가지고 있는) 안정성을 중시하여 Disk 에 Sync 하는 로직으로 사용하는 경우를 권장하지 않습니다.
    메모리 Cache 를 거의 활용하지 못하기 때문입니다.

    종류
    설명
    예시
    Persist_to : [0~4]

    기본적인 Insert Operation 은 데이터가 메모리 영역에 쓰고 나면 바로 Return 됩니다. 이는 빠른 성능을 위함입니다. 
    이파라미터를 사용하여 0~4 숫자를 지정하게 되면 해당 노드 수만큼 디스크에 쓰고 나서 콜백함수로 Return 을 하기 때문에 데이터의 영구성을 보장할 수 있습니다. 0~4까지 지정이 가능합니다. ( 성능을 위해서는 0을 권장합니다. NONE)
    bucket.insert(usert_id, doc, {persist_to :1, replicate_to : 1 } , function (err,result)
    {
         console.log(" TEST)"
    }
    Replicate_to : [0~3]

    Insert 를 통해 저장된 데이터가 얼마나 많은 복사본에 저장되고 나서 Return 될지에 대해 지정합니다. 복사본은 본인 노드를 제외하고 
    최대 세개까지 이므로 0~3까지 지정할 수 있습니다.  (성능을 위해서는 0을 권장합니다.NONE)

                            ii.         실제 경험상 위 프로퍼티 들을 쓰지 않아도, 서버 Crash 가 나는 경우 Commit 된 데이터가 사라지는 경우는 약 1초 이내 발생하여 Disk 에 영구저장하지 못한 데이터 정도 입니다.  
    1.      (위 프로퍼티들을 쓰지 않아도, 데이터는 영구 저장되나 순간적 Crash 상황 시 약간의 데이터 손실이 있을 수 있음. 그것을 방지하는 세션 프로퍼티임)

    4.     재현 및 확인 사항
    A.     Benchmark Tool 로 자주 사용하고 있는 3.0 버전 및 4.1.0 버전을 Persist_to 옵션과 Recplicate_to 옵션을 적용하여 재현 해본 결과 현재 서비스에서 나타나고 있는 Compaction 시
    응답지연 현상이 동일하게 발생하였습니다.   


    5.     권장 사항
    A.     couchbase 는  성능과 확장성을 위해 사용하게 되므로, 위 프로퍼티들을 모두 NONE 또는 0으로 하여 사용하시길 권장 드리며,  만약 반드시 100% 데이터 보장을 하셔야 한다면 1 이상은 권장하지 않습니다.  
    또한 이런 경우라면MSSQL 또는 Mysql 같은 RDB 를 사용하시는것이 더 효율적이며, 안정적일 수 있습니다.                                                                                                                                

    B.     APP  소스나 툴에서 위 프로퍼티들을 Disable 하여 사용하시길 권장 드립니다.
    C.     재현 Benchmark Tool 에서도 위 프로퍼티를 Disable 할 경우 Compaction 시에 응답 지연되는 현상은 발생하지 않았습니다.