728x90

이번 블로그는 클러스터를 구성하는 특정 노드가 재기동 시 메모리 Warmup 프로세스를 다루겠습니다. Couchbase 서버가 가 여러 가지 이유로 재기동하게 되면 메모리를 재구성하고 데이터 처리를 하게 되는데, 이 메모리 재구성 작업을 메모리 Warmup 프로세스로 부릅니다.

 

메모리 Warmup 프로세스는 다음과 같은 단계로 진행됩니다.

  1. 각 Bucket에 대해 디스크 내 데이터를 순차적으로 메모리에 적재
  2. 소요 시간은 노드의 시스템 용량, 노드에 저장된 데이터 용량, Bucket에 설정된 Ejection 정책(이후 블로그에서 다룰 예정) 등에 영향

 

특히 Data 서비스는 Access Scanner 프로그램에 의해 정해진 우선순위대로 데이터를 메모리에 적재합니다. 이 Access Scanner 프로그램은 다음 기준을 통해 작동합니다.

  • 전체 Active Bucket의 데이터 중 메모리에 적재되어 있는 데이터의 비율인 메모리 Resident Ratio를 기준으로 동작합니다. 즉 전체 Active Bucket의 데이터가 100 GB 인데, 메모리에 적재되어 있는 데이터가 80 GB 라면 메모리 Resident Ratio는 80%입니다.
  • 메모리 Resident Ratio가 95% 이하이면, 새로운 Access Log를 생성하고 최근 24시간 이내에 빈번하게 접근된 Document 정보를 기록하고 메모리 Warmup 프로세스의 최우선 순위로 선정합니다.
  • 메모리 Resident Ratio가 95% 초과이면, 새로운 Access Log를 생성하지 않고 기존 Access Log도 삭재합니다. 그리고 우선순위 없이 메모리 Warmup 프로세스 작업을 진행합니다.
  • Access Scanner 프로그램은 기본적으로 하루에 한 번 수행되지만 설정 가능합니다.

 

관련자료

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/memory.html#initialization-and-warmup

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Ejection  (0) 2022.08.16
[데이터]Storage 설정  (0) 2022.08.16
[데이터]메모리 관리 : 서비스 메모리 Quota  (0) 2022.08.15
[데이터]Caching & Persistence  (0) 2022.08.15
[데이터]Compression  (0) 2022.08.15
728x90

이번 블로그는 Couchbase의 메모리 관리 중 서비스 메모리 Quota을 다루도록 하겠습니다.

 

다음은 Couchbase의 서비스 메모리 관리 기준입니다.

  • 모든 서비스 별로 메모리 용량을 할당합니다.(단, Query 서비스, Backup 서비스는 제외)
  • 클러스터 내에 다수 노드에 분산된 서비스의 할당된 메모리 용량은 동일해야 합니다. 예를 들어 Analytic 서비스를 3 노드에서 운영 중이라면 모든 노드에 대해서 Analytic 서비스를 위한 메모리 용량은 동일합니다.
  • Data 서비스는 Bucket 별로 메모리 용량을 세부적으로 다시 할당합니다.
  • Couchbase 서버 및 서비스에 할당된 메모리가 물리 메모리의 90% 이하로 관리하는 것을 권장합니다.

 

다음은 서비스 별 최소 메모리 할당 용량입니다.

[출처 : docs.couchbase.com]

 

관련자료

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/memory.html#service-memory-quotas

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Storage 설정  (0) 2022.08.16
[데이터]메모리 Warmup  (0) 2022.08.15
[데이터]Caching & Persistence  (0) 2022.08.15
[데이터]Compression  (0) 2022.08.15
[데이터]vBucket  (0) 2022.08.15
728x90

이번 블로그는 데이터를 메모리 및 디스크에 저장하거나 Network 이동 시 압축을 통해 효율성을 높일 수 있는 기능을 소개합니다. 이 Compression 기능은 Enterprise Edition에서 제공됩니다.

 

Couchbase는 Compression을 위해 Snappy Open Source 라이브러리를 사용합니다.

 

다음은 Compression 기능을 사용할 수 있는 시나리오입니다.

  • SDK Client와 클러스터 간 데이터 이동
  • 클러스터 내 노드 간 데이터 복제
  • 클러스터 내 서비스 간 데이터 이동
  • 클러스터 외부 서비스(Backup, Connector, Sync Gateway)로 데이터 이동
  • 클러스터 간 데이터 복제(XDCR)
  • 메모리 내 Document 저장
  • 디스크 내 Document 저장, 특히 이 부분은 항상 Compression 적용

 

Bucket 단위로 Compression Mode를 설정할 수 있습니다. 다음은 설정 가능한 3 종류 Mode 입니다.

  • Off : Couchbase 서버는 외부에서 압축된 형태, 비압축 형태와 상관없이 전송받으면 메모리 내에서 비압축 상태로 저장, 압축된 형태로 디스크에만 저장하고 비압축 형태로 외부로 전송합니다.
  • Passive(기본값) : Couchbase 서버는 외부에서 압축된 형태로 전송받으면 메모리 및 디스크에 압축된 형태로 디스크에 저장하고 압축된 형태 혹은 비압축된 형태로 외부로 전송합니다.(클라이언트에 따라) 또한 Couchbase 서버는 외부에서 비압축된 형태로 전송받으면 메모리 내에서 비압축 상태로 저장, 압축된 형태로 디스크에 저장하고 비압축된 형태로 외부로 전송합니다.
  • Active : Couchbase 서버는 외부에서 압축된 형태, 비압축 형태와 상관없이 전송받으면 메모리 및 디스크에 압축된 형태로 디스크에 저장하고 압축된 형태로 혹은 비압축된 형태로 외부로 전송합니다.(클라이언트에 따라)

 

Compression Ratio는 1.2입니다. 이는 Compression 적용 시 압축 전 Document 크기가 압축 후 Document 크기의 1.2 배에 미달하면 Compression 효율성이 없다고 판단하여 Compression을 적용하지 않습니다.

 

참고자료

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/compression.html

728x90

이전 블로그에서 Couchbase의 기본 데이터 저장 단위인 Bucket에 대해 다루었습니다. 이번 블로그는 Bucket에 대한 물리적 분산 저장 단위인 vBucket(Shard로도 표현)에 대한 내용입니다.

 

Bucket에 저장되는 Document를 Key 값에 따라 자동으로 1024 개의 vBucket으로 나누어 저장하고 이 vBucket들을 클러스터를 구성하는 노드에 균일하게 분산합니다. 분산에 참여하는 노드는 Data Service가 구동되어 있어야 합니다. 이를 통해 Workload를 균등하게 분산할 수 있습니다.

 

vBucket은 다음의 2 종류로 나눌 수 있습니다.

  • Active : Document의 read/write가 발생합니다.
  • Replica : 변경된 Document에 대한 복제가 발생합니다.

 

Document와 vBucket 매칭 방법

  • Document의 Key 값에 대한 CRC32 Hash 알고리즘 결과 값을 기준으로 vBucket No.를 선정
  • vBucket은 Cluster Manager에 의해 특정 Data Service 노드에 할당
  • 이러한 vBucket 정보는 Cluster Map 형태로 SDK 클라이언트에 자동 Update

[출처 : docs.couchbase.com]

노드 추가/삭제, Rebalanc, Fail-over 등으로 클러스터 구성의 변경으로 vBucket의 위치가 변경되면 Cluster Manager가 Cluster Map을 수정하고 SDK 클라이언트에 자동 Update합니다.

 

참고자료

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/vbuckets.html

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Caching & Persistence  (0) 2022.08.15
[데이터]Compression  (0) 2022.08.15
[데이터]Bucket Storage Engine  (0) 2022.08.15
[보안]Role Based Access Control(RBAC)  (0) 2022.08.15
[데이터]Bucket의 보안  (0) 2022.08.15
728x90

이번 블로그는 Coucbase Bucket의 Storage Engine 종류에 대한 내용입니다.

Couchbase 7.1 부터 Couchstore라는 기본 Storage Engine외에 Magma를 지원하고 있습니다.

 

2 종류 Storage Engine의 개략적인 특징입니다.

  • Couchstore : 소용량의 데이터에 적합한 기존 Storage Engine
  • Magma : 대용량 데이터에 적합한 최신 Storage Engine, Enterprise Edition에서만 사용할 수 있습니다.

 

먼저 Couchstore의 특징입니다.

  • 10년 이상 지원하고 있는 Couchbase 기본 Engine
  • 적은 시스템 리소스를 활용하는데 최적화
  • 메모리에 적재하기 알맞는 데이터 용량에 적용 권고
  • 다음 상황에서 Couchstore 사용을 고려 : Working 데이터가 가용 물리 메모리에 적합, 저사양 하드웨어

 

다음 Magma의 특징입니다.

  • 메모리에 적재하기에 어려운 대용량 데이터에 적용 권고
  • 디스크 접근을 필수로 해야하는 업무 시나리오에 적용
  • 최근 NVMe SSD Storage 사용으로 디스크 접근 속도 향상
  • 예를 들어 노드 당 5 TB의 데이터를 처리하는 경우에도 메모리는 64 GB로 운영
  • 다음 상황에서 Magma 사용을 고려 : Working 데이터가 가용 물리 메모리 대비 상당히 큰 경우, 최소 메모리 용량으로 대용량 데이터를 처리, 데이터 변경 트랜잭션의 Heavy Workload 부하를 처리

[Couchstore와 Magma 비교]

참고자료

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/storage-engines.html

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Compression  (0) 2022.08.15
[데이터]vBucket  (0) 2022.08.15
[보안]Role Based Access Control(RBAC)  (0) 2022.08.15
[데이터]Bucket의 보안  (0) 2022.08.15
[데이터]Bucket의 종류  (0) 2022.08.15
728x90

사용자의 권한 관리를 위해 Role Based Access Control(이하 RBAC)을 사용합니다. RBAC는 접근 권한을 특정 Role에 할당하고 특정 Role을 다수 사용자에게 할당하는 방식입니다. RBAC는 Enterprise Edition에서만 사용할 수 있습니다.

 

RBAC를 이해하기 위해서 다음 개념에 익숙해져야 합니다.

  • Resource(리소스) : 접근 통제 대상인 개체, 예를 들어 Bucket
  • Privilege(권한) : 특정 Resource에 액션을 하기 위해 Couchbase 서버가 할당한 권리, 예를 들어 read, write, execute
  • Role(롤) : 특정한 Privilege 집합과 연결할 개체, 예를 들어 Admin Role
  • User(사용자) : username, password로 인식되는 Couchbase 서버의 사용자. 사용자는 다수의 Role이 할당될 수 있고 각 Role에 연결된 Privilege 집합을 통해 해당 Resource에 접근 가능

 

다음의 순서로 특정 사용자가 특정한 리소스에 대한 접근이 통제될 수 있습니다.

  1. Administrator가 특정 사용자를 생성합니다.(username, password 설정) 예를 들어 Customer_APP_USER 생성
  2. Administrator가 특정 Resouce에 대한 접근 권한을 연결한 Role을 생성합니다. 예를 들어 Customer Bucket에 대해 read/write 권한을 Customer_RW Role에 할당
  3. Administrator가 특정 사용자에게 필요한 Role을 할당합니다. 각 Role은 이미 정의된 Privilege 집합이 연결되어 있습니다. 예를 들어 Customer_APP_USER에게 Customer_RW Role을 할당
  4. 특정 사용자가 username, password를 사용하여 클러스터에 접속하면 할당된 Role을 통해 특정 Resouce에 대한 접근 권한을 획득하고 해당 Resource에 작업을 할 수 있습니다.

 

사용자에 Role을 할당할 수 있는 방법은 다음 2 종류가 지원됩니다.

  • Directly : 특정 Role을 특정 사용자에게 직접 할당
  • By Group : 특정 Role을 특정 User Group에 할당하고 특정 사용자를 해당 User Group에 Member로 등록

참고자료

https://docs.couchbase.com/server/current/learn/security/authorization-overview.html#introduction-to-rbac

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Compression  (0) 2022.08.15
[데이터]vBucket  (0) 2022.08.15
[데이터]Bucket Storage Engine  (0) 2022.08.15
[데이터]Bucket의 보안  (0) 2022.08.15
[데이터]Bucket의 종류  (0) 2022.08.15
728x90

이번 블로그는 Bucket에 저장되어 있는 데이터를 접근하기 위한 권한 관리를 살펴봅니다.

 

기본적으로 Bucket을 접근하기 위한 권한은 Role Based Access Control(RBAC)를 통해 설정합니다. Couchbase의 RBAC에 대한 기능은 아래 블로그를 참고합니다.

https://couchbase.tistory.com/8

 

[보안]Role Based Access Control(RBAC)

사용자의 권한 관리를 위해 Role Based Access Control(이하 RBAC)을 사용합니다. RBAC는 접근 권한을 특정 Role에 할당하고 특정 Role을 다수 사용자에게 할당하는 방식입니다. RBAC는 Enterprise Edition에서만..

couchbase.tistory.com

 

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Compression  (0) 2022.08.15
[데이터]vBucket  (0) 2022.08.15
[데이터]Bucket Storage Engine  (0) 2022.08.15
[보안]Role Based Access Control(RBAC)  (0) 2022.08.15
[데이터]Bucket의 종류  (0) 2022.08.15
728x90

이번 블로그는 Couchbase의 기본 데이터 저장 단위인 Bucket에 대해서 알아 보겠습니다. 관계형 데이터베이스와 비교하면 Database 와 비슷한 레벨로 생각할 수 있습니다.

 

Couchbase는 3 종류의 Bucket을 지원합니다.

  • Couchbase Bucket
  • Ephimeral Bucket
  • Memcached Bucket

먼저 Couchbase Bucket은 다음과 같은 특징을 가지고 있습니다.

  • 개별 Document의 크기는 20 MB까지 저장할 수 있습니다.
  • 메모리 및 디스크에 데이터를 저장합니다.
  • Replica를 통해 데이터를 클러스터 내에서 복제하거나 XDCR을 통해 클러스터 간에 데이터를 복제합니다.
  • 설정한 메모리 할당량을 초과하는 경우, 메모리에 존재하는 Document가 NRU 알고리즘에 의해 메모리 내에서 제거(Ejection)됩니다. 단 데이터는 디스크에 동일하게 존재하므로 필요 시 다시 메모리로 적재 가능합니다. 
  • Ejection 수행 시 Document의 메타 데이터는 메모리 내에 유지하거나 메타 데이터를 포함한 모든 돤련 데이터를 제거하는 방식을 선택 가능합니다. 메타 데이터가 메모리에 유지되면 성능에는 도움이 될 수 있습니다.

다음으로 Ephimeral Bucket은 다음과 같은 특징이 있습니다.

  • 디스크에 데이터를 저장하기 않는다는 것을 제외하고 Couchbase Bucket과 기능이 동일합니다.
  • 반복적인 디스크 접근으로 인한 성능 저하를 해결하고 영구 저장이나 복구가 필요없는 데이터를 대상으로 합니다.
  • 설정한 메모리 할당량을 초과하는 경우, 1) 더 이상의 데이터를 추가/변경할 수 없거나 2) NRU 알고리즘에 의해 새로운 데이터를 받아들일 수 있도록 기존 데이터를 제거하도록 설정할 수 있습니다.

마지막으로 Memcached Bucket은 이전 버전에 대한 호환성을 위해 유지(Depricated)하고 있지만 신규 Bucket 생성 시 선택할 수 없는 종류입니다.

  • Ephimeral Bucket 처럼 디스크에 데이터를 저장하지 않습니다.
  • 설정한 메모리 할당량을 초과하는 경우, NRU 알고리즘에 의해 새로운 데이터를 받아들일 수 있도록 기존 데이터를 제거하여 추가 공간을 확보합니다.

참고 자료

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/buckets.html#bucket-types

https://docs.couchbase.com/server/current/learn/buckets-memory-and-storage/buckets.html#bucket-capabilities

 

'Couchbase 아키텍처' 카테고리의 다른 글

[데이터]Compression  (0) 2022.08.15
[데이터]vBucket  (0) 2022.08.15
[데이터]Bucket Storage Engine  (0) 2022.08.15
[보안]Role Based Access Control(RBAC)  (0) 2022.08.15
[데이터]Bucket의 보안  (0) 2022.08.15

+ Recent posts