데이터베이스 복제

데이터베이스 복제 (Database replication)

Redis Enterprise에서 데이터베이스 복제가 어떻게 고가용성(high availability)을 보장하는지 설명할게요. 복제가 무엇인지, 어떤 옵션으로 튜닝하는지, 그리고 복제 백로그(backlog) 설정을 어떻게 다루는지 살펴볼게요.

출처: Redis 공식 문서 — replication

데이터베이스 복제는 고가용성을 보장하는 데 도움을 줘요. 복제가 활성화되면 데이터셋이 복제본 샤드(replica shard), 즉 기본(primary) 샤드와 지속적으로 동기화되는 샤드로 복제돼요. 기본 샤드가 실패하면 **자동 페일오버(auto-failover)**가 발생하고 복제본 샤드가 승격돼요. 즉, 그것이 새로운 기본 샤드가 되는 거예요.

이전 기본 샤드가 복구되면, 그것은 새 기본 샤드의 복제본 샤드가 돼요. 이 자동 페일오버 메커니즘은 데이터가 최소한의 중단으로 서비스되도록 보장해요.

다음으로 고가용성 구성을 튜닝할 수 있어요.

  • Rack/Zone Awareness — rack-zone awareness를 사용하면 마스터와 복제본 샤드가 절대 같은 랙을 공유하지 않도록 추가 로직이 보장해서, 전체 랙이 손실되는 상황에서도 가용성을 유지해요.
  • 복제본 샤드용 고가용성 (High Availability for Replica Shards) — 복제본 샤드용 고가용성을 사용하면 노드 페일오버 시 복제본 샤드가 고가용성을 유지하기 위해 자동으로 마이그레이션돼요.

복제를 활성화하면 데이터베이스 메모리 한도 (Database memory limits)에서 설명한 것처럼 전체 데이터베이스 크기에 영향을 미쳐요.

Auto Tiering 복제 고려사항 (Auto Tiering replication considerations)

Auto Tiering이 활성화된 데이터베이스에서 발생할 수 있는 상대적으로 느린 복제 시간 때문에, rladmin으로 순차 복제(sequential replication) 기능을 설정하는 것을 권장해요. 경우에 따라 순차 복제가 설정되지 않으면 메모리가 부족해질 수 있어요.

기본 샤드에서 데이터 손실이 발생하지는 않지만, 기본 샤드에 높은 쓰기율 트래픽이 있고 동시에 여러 복제가 진행되는 동안에는 복제본 샤드로의 복제가 성공하지 못할 수 있어요.

다음 rladmin 명령은 같은 클러스터 노드에서 복제될 수 있는 기본 샤드의 수와, 언제든지 복제 프로세스를 실행할 수 있는 같은 클러스터 노드의 복제본 샤드 수를 설정해요.

권장되는 순차 복제 구성은 2인데, 즉:

rladmin tune cluster max_redis_forks 1 max_slave_full_syncs 1

즉, 언제든지 정확히 하나의 기본 샤드와 하나의 복제본 샤드만 전체 동기화(full sync) 복제 프로세스에 참여할 수 있어요.

데이터베이스 복제 백로그 (Database replication backlog)

고가용성을 위해 복제를 사용하는 Redis 데이터베이스는 데이터베이스의 기본 샤드와 복제본 샤드를 동기화하기 위해 (샤드당) **복제 백로그(replication backlog)**를 유지해요. 기본적으로 복제 백로그는 데이터베이스 크기의 1%(1 percent)를 데이터베이스 샤드 수로 나눈 값으로 설정되며, 샤드당 1MB에서 250MB 사이예요. rladmincrdb-cli 유틸리티를 사용해 복제 백로그 크기를 제어할 수 있어요. auto로 설정하거나 특정 크기를 설정할 수 있어요.

구문은 일반 데이터베이스와 Active-Active 데이터베이스에서 달라요.

일반 Redis 데이터베이스의 경우:

rladmin tune db <db:id | name> repl_backlog <Backlog size in MB | 'auto'>

Active-Active 데이터베이스의 경우:

crdb-cli crdb update --crdb-guid <crdb_guid> --default-db-config "{\"repl_backlog_size\": <size in MB | 'auto'>}"

Active-Active 복제 백로그 (Active-Active replication backlog)

데이터베이스 복제 백로그에 더해, Active-Active 데이터베이스는 클러스터 간 데이터베이스 인스턴스를 동기화하기 위해 (샤드당) 백로그를 유지해요. 기본적으로 Active-Active 복제 백로그는 데이터베이스 크기의 1%(1 percent)를 데이터베이스 샤드 수로 나눈 값으로 설정되며, 샤드당 1MB에서 250MB 사이예요. crdb-cli 유틸리티를 사용해 CRDT 복제 백로그 크기를 제어할 수 있어요. auto로 설정하거나 특정 크기를 설정할 수 있어요:

crdb-cli crdb update --crdb-guid <crdb_guid> --default-db-config "{\"crdt_repl_backlog_size\": <size in MB | 'auto'>}"

Redis Software 6.0.20 이전 버전의 경우: 복제 백로그와 CRDT 복제 백로그 기본값은 1MB로 설정되며, auto 모드로 동적으로 설정할 수 없어요. 복제 로그의 크기를 제어하려면 각 클러스터의 로컬 데이터베이스 인스턴스를 rladmin으로 튜닝하세요.

rladmin tune db <db:id | name> repl_backlog <Backlog size in MB (or if ending with bytes, KB or GB, in the respective unit)>

더 알아보기 (Learn more)