Skip to main content
NetApp database solutions
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

Google Cloud NetApp Volumes에서 Oracle Database 26ai용 Data Guard Broker 및 Fast-Start Failover 구성

기여자 netapp-jsnyder

Google Cloud NetApp Volumes에서 Oracle Database 26ai에 대한 자동 역할 전환을 활성화하려면 전용 옵저버를 사용하여 Oracle Data Guard Broker 및 Fast-Start Failover를 구성하십시오.

Tier-specific: 이 절차는 Prod HA (Data Guard + FSFO) 티어에만 적용됩니다.

이 절차에서는 두 데이터베이스 모두에서 브로커를 활성화하고, Data Guard 구성을 생성하고, MaxAvailability 보호 모드로 FSFO를 활성화하고, 옵저버 호스트에 Oracle Instant Client를 설치하고, 지갑 기반 자격 증명을 사용하여 systemd 서비스로 옵저버를 시작하고, 스위치오버 및 페일오버를 테스트합니다. 이후에는 ENABLE CONFIGURATION, 임시 LOG_ARCHIVE_DEST_* SQL이 아닌 *DGMGRL*을 통해 전송 및 역할을 관리하십시오.

1단계: Data Guard Broker 활성화

두 데이터베이스 호스트 모두에서 Data Guard Broker를 활성화하고 기본 데이터베이스와 대기 데이터베이스를 통합 관리하에 연결하는 브로커 구성을 생성합니다.

  1. 기본 및 대기 데이터베이스 호스트에 `dg_broker_start=TRUE`을(를) 설정하십시오.

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH;
    EXIT
    SQL'
  2. 기본 서버에서 OS 인증을 사용하여 DGMGRL에 연결하고 브로커 구성을 생성합니다.

    참고

    Observer 호스트에서만 자동 로그인 지갑이 존재한 후 dgmgrl /@orcl`을(를) 사용하십시오. `dgmgrl 명령줄에 암호를 입력하지 마십시오.

    sudo -u oracle bash -c '
    export ORACLE_HOME=/u01/app/oracle/product/26ai/db_1
    export ORACLE_SID=orcl
    export PATH=$ORACLE_HOME/bin:$PATH
    dgmgrl /
    '
    DGMGRL> CREATE CONFIGURATION 'orcl_dg' AS
            PRIMARY DATABASE IS 'orcl' CONNECT IDENTIFIER IS orcl;
    DGMGRL> ADD DATABASE 'orcls' AS CONNECT IDENTIFIER IS orcls;
    DGMGRL> ENABLE CONFIGURATION;
    DGMGRL> SHOW CONFIGURATION;
    -- Expect: Configuration Status: SUCCESS, both members SUCCESS.
  3. 구성 유효성 검사 — WARNING 또는 NULL이 아닌 ERROR 값을 3단계: FSFO 속성을 구성하고 활성화합니다 이전에 수정하십시오:

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SHOW CONFIGURATION VERBOSE;

2단계: FSFO에 대한 플래시백 확인

두 호스트 모두에서 플래시백 데이터베이스가 활성화되어 있는지 확인하십시오. 플래시백은 FSFO 자동 복구에 필요하며, 이를 통해 장애 조치 후 이전 기본 호스트가 자동으로 대기 호스트로 구성에 다시 참여할 수 있습니다.

  1. 두 데이터베이스 호스트 모두에서 flashback_on`이(가) `YES 켜져 있는지 확인합니다.

    sudo -u oracle bash -c '
    . ~/.bash_profile
    sqlplus -s / as sysdba <<<"SELECT flashback_on FROM v\$database;"
    '
    # Expected on both hosts: YES
  2. 플래시백 보존이 이미 설정되어 있지 않은 경우 기본 장치에만 해당:

    sudo -u oracle bash -c '
    . ~/.bash_profile
    export ORACLE_SID=orcl
    sqlplus / as sysdba <<SQL
    ALTER SYSTEM SET db_flashback_retention_target=1440 SCOPE=BOTH;
    EXIT
    SQL'

3단계: FSFO 구성 및 활성화

SYNC 리두 전송을 설정하고, MaxAvailability 보호 모드를 구성하고, 각 데이터베이스에 FSFO 대상을 정의하고, Fast-Start Failover를 활성화합니다.

  1. 두 데이터베이스 모두에서 리두 전송 모드를 `SYNC`로 설정하고 보호 모드를 `MaxAvailability`로 높이십시오:

    DGMGRL> EDIT DATABASE 'orcl'  SET PROPERTY LogXptMode='SYNC';
    DGMGRL> EDIT DATABASE 'orcls' SET PROPERTY LogXptMode='SYNC';
    DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MaxAvailability;
  2. 각 데이터베이스가 서로를 장애 조치 대상으로 지정하도록 FSFO 대상을 설정한 다음 임계값 및 자동 복구 동작을 구성합니다.

    -- Each side names the other
    DGMGRL> EDIT DATABASE 'orcl'  SET PROPERTY FastStartFailoverTarget = 'orcls';
    DGMGRL> EDIT DATABASE 'orcls' SET PROPERTY FastStartFailoverTarget = 'orcl';
    
    -- 30 s is the default; lower for faster RTO but more sensitive to network blips
    DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;
    DGMGRL> EDIT CONFIGURATION SET PROPERTY FastStartFailoverAutoReinstate = TRUE;
  3. 빠른 시작 페일오버를 활성화하고 구성을 확인합니다:

    DGMGRL> ENABLE FAST_START FAILOVER;
    DGMGRL> SHOW FAST_START FAILOVER;
    -- Expected: Threshold 30 seconds, Target orcls, Observer not yet registered.

4단계: Observer에 Instant Client 설치

전용 Observer VM에 Oracle Instant Client를 설치하고(oradg-obs, 전용 oracle OS 사용자를 생성하고, Observer가 TCP/1521을 통해 두 데이터베이스 멤버 모두에 연결할 수 있도록 Oracle Net 환경을 구성합니다.

  1. 옵저버 호스트에 Oracle Instant Client 패키지를 설치합니다. (oradg-obs):

    # Use -el8 / -el9 if the Observer is on an older OL/RHEL release
    sudo dnf install -y oracle-instantclient-release-el10
    sudo dnf install -y oracle-instantclient-basic \
                        oracle-instantclient-sqlplus \
                        oracle-instantclient-tools
  2. 지갑과 systemd 유닛을 소유할 전용 oracle OS 사용자를 생성합니다.

    sudo useradd -u 54321 -m oracle
    sudo passwd -l oracle
  3. Oracle Net 환경을 구성하고 두 데이터베이스 호스트 모두에 대한 항목을 사용하여 `tnsnames.ora`을(를) 생성하십시오.

    sudo mkdir -p /etc/oracle/network/admin
    sudo chown -R oracle:oracle /etc/oracle
    
    sudo -u oracle tee /home/oracle/.bash_profile >/dev/null <<'EOF'
    export ORACLE_HOME=/usr/lib/oracle/26/client64
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export PATH=$ORACLE_HOME/bin:$PATH
    export TNS_ADMIN=/etc/oracle/network/admin
    EOF
    
    # tnsnames.ora — must reach both DB hosts on TCP/1521
    sudo tee /etc/oracle/network/admin/tnsnames.ora >/dev/null <<'EOF'
    orcl =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracdb1)(PORT = 1521))
                    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)))
    orcls =
      (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracdb2)(PORT = 1521))
                    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcls)))
    EOF
    sudo chown oracle:oracle /etc/oracle/network/admin/tnsnames.ora

5단계: Observer를 systemd 서비스로 실행

데이터베이스 멤버 두 곳 모두에 대한 자격 증명을 사용하여 자동 로그인 지갑을 생성한 다음, 재부팅 후에도 유지되고 구성에 자동으로 재연결되도록 Observer를 systemd 서비스로 구성하고 시작합니다.

전용 Data Guard 관리자 계정(예: SYSDG)의 자격 증명은 SYS 대신 지갑에 저장하십시오. 자격 증명은 dgmgrl 명령줄에 표시되어서는 안 됩니다. 명령줄에서는 ps 및 `journalctl`에서 볼 수 있으므로, 항상 Observer에서 `/@<tns_alias>`을 사용하여 연결하십시오.

  1. 암호화된 지갑을 생성하고 두 데이터베이스 멤버에 대한 자격 증명을 입력하십시오.

    sudo -iu oracle bash <<'BASH'
    mkdir -p $TNS_ADMIN/wallet
    mkstore -wrl $TNS_ADMIN/wallet -create     # prompts for a wallet password — store in your secrets manager
    mkstore -wrl $TNS_ADMIN/wallet -createCredential orcl  sys ChangeMe!1
    mkstore -wrl $TNS_ADMIN/wallet -createCredential orcls sys ChangeMe!1
    BASH
    
    sudo tee /etc/oracle/network/admin/sqlnet.ora >/dev/null <<'EOF'
    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /etc/oracle/network/admin/wallet)))
    SQLNET.WALLET_OVERRIDE = TRUE
    EOF
    sudo chown oracle:oracle /etc/oracle/network/admin/sqlnet.ora
    sudo chmod -R 0700 /etc/oracle/network/admin/wallet
    
    sudo -iu oracle ls -l /etc/oracle/network/admin/wallet
    # Expected: cwallet.sso and ewallet.p12
    
    sudo -iu oracle bash <<'BASH'
    sqlplus -L "/@orcl as sysdba" <<'SQL'
    SELECT database_role FROM v$database;
    EXIT
    SQL
    BASH
    
    sudo -iu oracle bash <<'BASH'
    sqlplus -L "/@orcls as sysdba" <<'SQL'
    SELECT database_role FROM v$database;
    EXIT
    SQL
    BASH
    
    sudo -iu oracle dgmgrl /@orcl  'SHOW CONFIGURATION;'
    sudo -iu oracle dgmgrl /@orcls 'SHOW CONFIGURATION;'
  2. Observer systemd 서비스가 암호 입력 없이 시작될 수 있도록 자동 로그인 지갑( cwallet.sso)을 생성합니다. cwallet.sso`가 `mkstore 실행 후 누락된 경우 Instant Client 도구 패키지 또는 데이터베이스 홈에서 `orapki`를 사용하여 생성한 다음 저장된 자격 증명을 다시 추가하십시오.

    sudo -iu oracle orapki wallet create \
      -wallet /etc/oracle/network/admin/wallet \
      -auto_login
    sudo -iu oracle ls -l /etc/oracle/network/admin/wallet
    # Expected: cwallet.sso and ewallet.p12
  3. systemd 유닛을 생성하고, 서비스를 활성화하고, Observer가 연결되었는지 확인합니다.

    sudo tee /etc/systemd/system/dgmgrl-observer.service >/dev/null <<'EOF'
    [Unit]
    Description=Oracle Data Guard Fast-Start Failover Observer
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=oracle
    Group=oracle
    Environment=ORACLE_HOME=/usr/lib/oracle/26/client64
    Environment=LD_LIBRARY_PATH=/usr/lib/oracle/26/client64/lib
    Environment=TNS_ADMIN=/etc/oracle/network/admin
    Environment=PATH=/usr/lib/oracle/26/client64/bin:/usr/bin:/bin
    ExecStart=/usr/lib/oracle/26/client64/bin/dgmgrl -silent /@orcl "START OBSERVER FILE IS '/var/lib/oracle/dgmgrl-observer.dat'"
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    EOF
    sudo install -d -o oracle -g oracle -m 0755 /var/lib/oracle
    sudo install -o oracle -g oracle -m 0640 /dev/null /var/log/dgmgrl-observer.log
    
    sudo tee /etc/logrotate.d/dgmgrl-observer >/dev/null <<'EOF'
    /var/log/dgmgrl-observer.log {
        weekly
        rotate 8
        compress delaycompress missingok notifempty
        create 0640 oracle oracle
        copytruncate
    }
    EOF
    
    sudo systemctl daemon-reload && sudo systemctl enable --now dgmgrl-observer.service
    sudo systemctl status dgmgrl-observer.service

    Observer는 기본에서 읽어야 합니다 CONNECTED(a DISCONNECTED Observer는 FSFO를 자동으로 중단합니다):

    DGMGRL> SHOW FAST_START FAILOVER;
    DGMGRL> SHOW CONFIGURATION;       -- Configuration Status: SUCCESS, FSFO: ENABLED

6단계: FSFO 테스트

Data Guard 구성을 `VALIDATE DATABASE`으로 검증한 다음 계획된 스위치오버를 수행하고, 테스트 기간 내에 계획되지 않은 VM 재설정 페일오버를 수행하여 FSFO가 엔드 투 엔드로 제대로 작동하는지 확인합니다.

  1. 계획된 전환을 테스트하고 원래 토폴로지를 복원합니다.

    DGMGRL> VALIDATE DATABASE 'orcls';
    DGMGRL> SWITCHOVER TO 'orcls';
    DGMGRL> SHOW CONFIGURATION;
    DGMGRL> SWITCHOVER TO 'orcl';        -- restore topology
  2. 제어된 테스트 환경에서 VM 재설정을 사용하여 예기치 않은 장애 조치를 테스트합니다.

    VM 재설정(크래시 테스트 방식)을 사용하십시오. 일반적인 중지 작업으로는 FSFO가 발생하지 않을 수 있습니다. Tail /var/log/dgmgrl-observer.log on `oradg-obs`을 사용하여 장애 조치 진행 상황을 모니터링하고, 완료되면 토폴로지를 복원하십시오.

다음 단계

이 배포 환경에 Oracle Data Guard Broker, Fast-Start Failover 및 Observer 구성이 완료되었습니다.