SAP HANA DB 에서는 고가용성(HA) 을 위해 System Replication(시스템 복제) 기능을 제공한다.
기본(Primary) 시스템과 보조(Secondary) 시스템 사이에 Replication(복제) 을 통해 장애 상황 시, 빠른 Fail Over 와 데이터 손실을 최소화하는 것을 목적으로 한다.
기본 시스템 = Active/Primary DB
보조 시스템 = Standby/Secondary DB
System Replication 의 경우, 네트워크 처리량(또는 대역폭) 과 대기 시간(또는 왕복 시간) 의 요구 사항을 충족해야 한다.
SAP HANA 1.0 SPS 09 부터 보조 시스템으로 데이터를 보내기 전, 파일를 압축하여 네트워크 대역폭 요구 사항을 줄일 수 있다.
이는 기본 시스템과 보조 시스템의 물리적 거리가 멀거나, 대역폭 제한이 있는 경우 유용하다.
global.ini -> [system_replication] -> enable_log_compression
global.ini -> [system_replication] -> enable_data_compression
아래 SAP HANA DB 가 제공하는 Replication Modes 와 Operation Modes 에 대해서 서술한다.
보조 시스템을 등록할 때, 사용할 Replication Mode 를 선택할 수 있다.
SAP HANA 에서는 Redo Log Replication 을 위해 아래와 같이 3가지 모드를 제공한다.
기본 시스템과 보조 시스템이 동일한 데이터 센터에 있거나 매우 근접한 거리(대략 100km 안) 에 존재할 경우 자주 사용되는 모드
보조 시스템의 디스크 I/O 속도가 복제모드 성능에 영향이 있기에 해당 부분도 고려해야한다.
동작
기본 시스템은, "보조 시스템에서 로그를 수신받아 디스크에 저장됐다는 응답"을 받은 후, 트랜잭션을 Commit 한다.
지연
기본 시스템은 데이터 전송 시간과 디스크 저장 시간만큼 트랜잭션을 지연시키는 대신, 두 시스템 간의 즉각적인 일관성을 보장한다.
데이터 손실
보조 시스템이 연결되어 있는 한, 데이터 손실이 발생하지 않는다.
보조 시스템과의 연결이 끊어지면 기본 시스템은 트랜잭션 처리를 계속하고 변경 사항을 로컬 디스크에 기록한다.
보조 시스템의 연결이 끊어져 있는 상태에서 Fail-Over 시, 데이터 손실이 발생할 수 있다.
Synchoronous - Full Sync Option
- 활성화 :
global.ini -> system_replication -> enable_full_sync = true
- Full Sync 옵션은 기본 시스템과 보조 시스템 모두에서 Log Buffer 가 Log File 에 기록될 때, Log Write 가 성공했다고 인식한다.
- SYNC 보다 데이터 손실에 더 강하지만, 아래와 같은 제약조건이 따른다.
- 보조 시스템과의 연결이 끊어지면, 보조 시스템에 대한 연결이 다시 설정될 때까지 트랜잭션 처리를 일시 중지한다.
- 따라서, 보조 시스템에 대한 연결이 중단되면 기본 사이트에서 쓰기 작업이 불가능해진다.
기본적으로 SYNC 와 비슷하나, 보조 시스템의 디스크 I/O 속도가 복제모드 성능에 영향을 주기 않기 때문에, 보조 시스템의 스펙이 기본 시스템에 비해서 떨어질때 고려할 수 있는 모드
동작
기본 시스템은, "보조 시스템에서 로그를 수신받아 메모리에 저장했다는 응답"을 받은 후, 트랜잭션을 Commit 한다.
지연
기본 시스템은 데이터 전송 시간만 트랜잭션을 지연시키기 때문에 SYNC 보다 지연 시간이 짧다.
데이터 손실
보조 시스템의 디스크 I/O 를 기다릴 필요가 없기 때문에 SYNC 보다 더 나은 성능을 제공하지만 데이터 손실에 조금 더 취약하다.
기본 시스템은 로그를 보조 시스템에 전송만 하고 응답을 받지 않으며, 보통 재해 복구(DR) 시나리오에서 사용되거나, 보조 시스템이 원거리에 있을때 고려할 수 있는 모드
동작
기본 시스템은, "보조 시스템의 응답을 기다리지 않고", 로그를 보낸 후 트랜잭션을 Commit 한다.
지연
기본 시스템은 트랜잭션을 바로 Commit 하기 때문에 지연이 없다.
응답을 기다리기지 않기 때문에 보조 시스템의 로그/디스크 I/O 속도는 기본 시스템의 성능에 영향을 주지 않으며, 더 나은 성능을 제공한다.
데이터 손실
보조 시스템의 모든 서비스에 대해서 데이터베이스 일관성(Database consistency) 은 보장되나, 데이터 손실에 제일 취약하다.
Fail-Over 중, 데이터 변경 사항이 손실될 수 있다.
SAP HANA System Replication 를 실행할 작동 모드로 3가지를 제공한다.
구성된 작동 모드에 따라 데이터베이스는 다양한 유형의 데이터 패키지를 보조 시스템으로 전송한다.
공통적으로 System Replication 초기 구성시, 기본 시스템의 전체 데이터(스냅샷) 을 보조 시스템으로 전송하여 재구성한다.
지속적인 로그 전달 외에 설정된 간격마다(Default 10분) Delta Data 를 보조 시스템으로 전송한다.
보조 시스템은 기본 시스템으로 부터 전달받은 로그를 유지하지만, Fail-Over 전까지 로그를 사용하지 않는다.
다만 로그를 사용한 복원(Replay) 시간을 단축하기 위해 수시로 데이터 스냅샷(Delta Data) 이 보조 시스템으로 전송된다.
단점으로는 logreplay 모드에 비해서, 보조 사이트로 전송되는 데이터가 많으며(Delta Data), Fail-Over 시에 로그를 사용하여 복원을 하기 때문에 즉각적으로 기본 시스템을 대체할 수 없다.
보조 시스템 초기 재구성 후, 기본 시스템에서 Redo Log 가 생성될 때마다 보조 시스템으로 전송된다.
보조 시스템에서는 Redo Log 를 전송 받는대로, 바로 바로 복원을 수행한다.
기본 시스템의 Log 로 계속 복원되므로, 기본 시스템의 장애가 발생하면 보조 시스템이 즉시 기본 시스템을 대체할 수 있다.
만약 보조 시스템과의 연결이 끊어질 경우, 기본 시스템은 보조 시스템으로 전송하지 못한 Log Segment 를 구성 가능한 최대 크기까지 보존하고, Log Segment 가 최대 크기에 도달할 때까지 보조 시스템과 연결이 되지않는다면, 보존한 Log Segment 를 회수하고 새 로그로 덮어쓴다.
이후 다시 보조 시스템과 연결되면 첫 동작과 마찬가지로 기본 시스템 스냅샷을 다시 전송하여 보조 시스템을 복원한다.
네트워크 대역폭이 충분하지 않다면, 초기 기본 시스템 전체 데이터(스냅샷) 전송에 많은 시간이 걸릴 수 있으나, 초기 전송만 완료한다면 Redo Log 만 전송하기 때문에 네트워크 트래픽이나 대역폭이 Delta-datashipping 에 비해서 많이 줄어든다.
대규모 시스템의 경우 다음 Notes 를 참고하여 SAP 권장 log replay 설정을 할 수 있다.
- SAP Notes 2661878 - HANA System Replication log replay setting recommendations for large systems
이 모드는 Active/ Active(read enabled) 구성을 할때 사용된다.
거의 모든 동작이 logreplay 와 동일하나,
해당 모드를 사용하면 보조 시스템에 대한 직접 연결을 설정하거나, 기본 시스템에서 HINT 와 함께 SELECT 문을 제공하여, 보조 시스템에서의 읽기 엑세스가 가능해진다.
SAP HANA 2.0 이상에서 사용 가능하며, 기본 시스템과 보조 시스템의 HANA 버전이 동일해야 한다. 또한 추가 라이선스가 필요하다.
- SAP Notes 2685661 - Licensing required for HANA System Replication
- Replication Mode : SYNC
- Operation Mode : logreplay
기본 시스템과 보조 시스템 사이의 처음 System Replication 설정 시, 보조 시스템은 기본 사이트의 SavePoint 를 기반으로한 데이터베이스 수준의 스냅샷(Full Data) 을 전달받아 재구성된다.
이 후, 보조 시스템은 Redo Log 를 전달받을 때마다 바로바로 복원을 한다. (logreplay)
보조 시스템은 로그를 전송받을 때마다 디스크에 해당 내용을 저장하고, 기본 시스템으로 처리 응답을 보낸다.
기본 시스템은 보조 시스템의 처리 응답을 확인 후, 트랜잭션을 Commit 한다. (SYNC)
System Replication 을 초기 구성할때 OS 상에서 hdbnsutil 명령어로 설정이 가능하다.
구성 전, 기본 시스템의 Log Mode 는
normal
이어야 한다.
SAP Help Portal 문서에서는 HANA Cockpit, HANA Studio 를 사용하여 System Replication 을 구성하는 방법도 나와있으니 참조하기 바란다.
✅ 기본 시스템 OS 상에
<SID>adm
계정 사용
다음 명령어로 System Replication 을 활성화 한다.
여기서 SiteName 은 단순한 별칭이며, 기본 시스템과 보조 시스템을 구분할때 사용되니 편하게 설정하면 된다.
hdbnsutil -sr_enable --name=<Site Name>
설정을 완료했다면, 다음 명령어로 성공적으로 활성화가 되었는지 확인한다.
hdbnsutil -sr_state
✅ 보조 시스템 OS 상에
<SID>adm
계정 사용
일반적인 명령어로 보조 시스템의 서비스를 중지한다.
HDB stop
또는
sapcontrol -nr <instance_number> -function StopSystem HDB
기본 시스템의 SSFS KEY 파일과 DATA 파일을 보조 시스템으로 복사해야 한다. (같은 경로로)
해당 파일은 기본 시스템의 다음 위치에 있다.
/usr/sap/<SID>/SYS/global/security/rsecssfs/data/SSFS_<SID>.KEY
/usr/sap/<SID>/SYS/global/security/rsecssfs/data/SSFS_<SID>.DAT
✅ 보조 시스템 OS 상에
<SID>adm
계정 사용
다음 명령어를 통해 보조 시스템을 System Replication 그룹에 등록한다.
hdbnsutil -sr_register
--name=<secondary Site Name>
--remoteHost=<Primary DB Hostname>
--remoteInstance=<Primary Instance number>
--replicationMode=[sync|syncmem|async]
--operationMode=[delta_datashipping|logreplay|logreplay_readaccess]
이 후, 정상적으로 등록되었는지 확인한다.
hdbnsutil -sr_state
보조 시스템이 정상적으로 등록되었다면, 보조 시스템의 서비스를 시작하고, Replication 을 시작한다.
HDB start
또는
sapcontrol -nr <instance_number> -function StartSystem HDB
System Replication 구성 후, 운영중인 상황에서는 보조 시스템에서 다음 명령어를 사용하여 Replication Mode 변경이 가능하다.
hdbnsutil -sr_changemode --mode=[sync|syncmem|async]
Replication Mode 설정은 다음 명령어를 통해 확인할 수 있다.
hdbnsutil -sr_state --sapcontrol=1
Operation Mode 를 변경하기 위해서는 보조 시스템을 중지하고, 다음 명령어로 Mode 로 변경할 수 있다.
여기서 단순히 Operation Mode 를 변경하기 위해, Replication 구성에서 보조 시스템을 삭제하지(sr_unregister) 않아도 된다.
hdbnsutil -sr_register 명령은 이전 등록 구성을 덮어쓰기 때문이다.
hdbnsutil -sr_register
--name=<secondary Site Name>
--remoteHost=<primary DB Hostname>
--remoteInstance=<Primary Instance number>
--replicationMode=[sync|syncmem|async]
--operationMode=[delta_datashipping|logreplay|logreplay_readaccess]
변경 명령어 이후, 보조 시스템을 시작하면 변경된 Operation Mode 가 적용된다.
delta_datashipping 에서 logreplay / logreplay_readaccess 로 Operation Mode 를 변경할 때는 전체 데이터 전송이 필요하지 않는다.
그러나 logreplay / logreplay_readaccess 에서 delta_datashipping 으로 다시 전환할 때는 Full Data Shipping 이 필요하며, 이때 초기 Replication 시 시간이 오래 걸릴 수 있다.