YashanDB 23.5 YAC 클러스터의 VIP 및 SCAN 기능 실사용 테스트 리뷰

본 문서는 YashanDB 23.5 YAC 버전에서 제공하는 고가용성 기능인 VIPSCAN을 실제 환경에서 테스트한 결과를 정리한 것입니다. 기존 수동 설정 방식에서 벗어나, 자동 장애 복구와 연결 분산을 지원하는 시스템의 구현 과정과 문제 해결 사례를 중심으로 설명합니다.

기능 개요: 수동 → 자동 전환의 혁신

기존 데이터베이스 클러스터에서는 클라이언트가 모든 노드의 주소를 직접 지정해야 했으며, 이는 유지보수 부담과 장애 시 복구 지연을 초래했습니다. YashanDB 23.5부터 도입된 VIPSCAN 기능은 이를 완전히 변화시킵니다.

  • VIP: 특정 노드 장애 발생 시, 가상 IP가 다른 정상 노드로 자동 이전되며, 서비스 중단 없이 접속 가능하게 합니다.
  • SCAN: 하나의 통합 접근 포인트를 제공하여, 노드 확장/축소 또는 장애 시에도 클라이언트에 영향 없이 동작하며, 실시간 부하 기반으로 연결을 분산 처리합니다.

두 기능의 결합은 "설정 단순화, 장애 무감지, 자동 로드 밸런싱"을 실현하며, 국내 최초로 오라클의 유사 기술을 구현한 데이터베이스 제품으로 평가됩니다.

환경 변수 설정

새로 설치된 클러스터에서 yashan 사용자의 환경 변수 파일(~/.bashrc) 내 YASDB_HOME 값이 잘못 설정되어 있을 수 있습니다. 아래처럼 올바른 경로로 수정해야 합니다.

export YASDB_HOME=/data/yashan/yasdb_home/23.5.1.100

변경 후 즉시 적용하거나 세션 재접속을 수행합니다.

source ~/.bashrc
echo $YASDB_HOME

데이터베이스 별칭 설정 (TNS 유사 구성)

모든 노드에 공통적으로 사용할 별칭을 정의합니다. $YASDB_HOME/client/yasc_service.ini 파일에 다음 내용을 추가합니다.

cat << EOF >> $YASDB_HOME/client/yasc_service.ini
yasdb-node1 = 10.168.1.101:1688
yasdb-node2 = 10.168.1.102:1688
yasdb-vip = 10.168.1.103:1688
yasdb-scan = 10.168.1.105:1688
EOF

VIP 및 SCAN 자동 시작 설정

기본 설치 시 ycsrootagent 서비스는 부팅 시 자동 실행되지 않습니다. 서버 재부팅 후 상태 확인 시 offline 상태로 나타납니다.

ycsctl status

이 상태에서 yasdb-vip 또는 yasdb-scan으로 접속하면 연결 실패가 발생합니다.

수동 시작 명령어

서비스를 수동으로 시작하기 위해 다음 명령어를 실행합니다.

sudo env LD_LIBRARY_PATH=$YASDB_HOME/lib $YASDB_HOME/bin/ycsrootagent start -H $YASCS_HOME &

실행 후 다시 상태를 확인하면 online 상태로 변경되었음을 확인할 수 있으며, 이후 접속이 성공합니다.

시스템 레벨 자동 시작 스크립트 구성

매번 수동으로 시작하지 않도록, systemd 기반 자동 시작 서비스를 생성합니다.

cat << EOF > /usr/local/bin/yashan_monitor.sh
#!/bin/bash
MONIT_AUTOSTART="true"
YCSROOTAGENT_AUTOSTART="true"
YASDB_USER=yashan
YASDB_HOME=/data/yashan/yasdb_home/23.5.1.100
YASCS_HOME=/data/yashan/yasdb_home/yasdb_data/ycs/ce-1-1
INTERVAL=3

while true; do
    if [ "$MONIT_AUTOSTART" = "true" ]; then
        if ! pgrep -a monit | grep "$YASDB_HOME" > /dev/null; then
            echo "$(date) monit abnormal, restarting..."
            su - $YASDB_USER -c "source ~/.bashrc && $YASDB_HOME/om/bin/monit -c $YASDB_HOME/om/monit/monitrc" &
        fi
    fi
    if [ "$YCSROOTAGENT_AUTOSTART" = "true" ]; then
        if ! pgrep -a ycsrootagent | grep "$YASCS_HOME" > /dev/null; then
            echo "$(date) ycsrootagent abnormal, restarting..."
            export LD_LIBRARY_PATH=$YASDB_HOME/lib
            $YASDB_HOME/bin/ycsrootagent start -H $YASCS_HOME &
        fi
    fi
    sleep $INTERVAL
done
EOF

실행 권한 부여:

chmod +x /usr/local/bin/yashan_monitor.sh

systemd 서비스 파일 생성:

cat << EOF > /etc/systemd/system/yashan_monitor.service
[Unit]
Description=Yashan Cluster Monitor Service
After=network.target

[Service]
ExecStart=/usr/local/bin/yashan_monitor.sh
Type=simple
Restart=always
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target
EOF

서비스 등록 및 시작:

systemctl daemon-reload
systemctl enable yashan_monitor
systemctl start yashan_monitor
systemctl status yashan_monitor

서버 재부팅 후 상태를 확인해 보았을 때, 두 노드 모두 서비스가 정상적으로 시작됨을 확인했습니다.

로드 밸런싱 테스트

다중 세션을 열고 yasdb-scan으로 동시에 연결하여 연결 대상이 균형 있게 분산되는지를 확인합니다.

yasql sys/yashan@yasdb-scan
alter session set date_format='yyyy-mm-dd hh24:mi:ss';
select instance_name, sysdate from v$instance;

결과: 각 세션마다 서로 다른 인스턴스(노드 1 또는 노드 2)에 연결되며, 순차적이고 균일한 분산이 이루어졌습니다. 이는 스캔 기반의 로드 밸런싱이 정상 작동함을 의미합니다.

고가용성 테스트 (장애 시뮬레이션)

두 인스턴스에 테스트 테이블을 생성하고 대량 데이터 삽입 작업을 수행합니다.

-- 노드 1
create table test_table_1 (id int primary key, data int);
BEGIN
FOR i IN 1..100000 LOOP
    INSERT INTO test_table_1 VALUES (i, i);
    COMMIT;
    DBMS_LOCK.SLEEP(0.2);
END LOOP;
END;

-- 노드 2
create table test_table_2 (id int primary key, data int);
BEGIN
FOR i IN 1..100000 LOOP
    INSERT INTO test_table_2 VALUES (i, i);
    COMMIT;
    DBMS_LOCK.SLEEP(0.2);
END LOOP;
END;

이 과정은 장애 발생 시 트랜잭션 손실 여부를 검증하기 위함입니다.

장애 발생 시험

노드 2의 서버를 종료합니다.

yasboot group stop -c yasdb -g 1

노드 1에서 클러스터 상태를 확인하면, 노드 2의 가상 IP가 노드 1로 이전된 것을 확인할 수 있습니다.

클라이언트 콘솔에서 연결 상태를 살펴보면, 노드 2의 세션이 끊긴 것으로 나타납니다.

노드 2 서버를 다시 부팅하면, 가상 IP가 원래 위치로 복귀하며, 인스턴스도 정상적으로 재시작됩니다.

테스트 전체 과정에서 노드 1의 세션은 영향을 받지 않았으며, 노드 2의 세션은 중단되었지만, TAF 기능을 활용하면 자동으로 다른 인스턴스에 재연결될 수 있습니다. 다만, 진행 중이던 트랜잭션은 롤백되어 재실행이 필요합니다.

TAF (투명한 애플리케이션 장애 복구) 기능 테스트

TAF는 클라이언트 측에서 장애 시 자동으로 다른 인스턴스로 연결하는 기능입니다. yasc_service.ini 파일에 다음과 같이 설정합니다.

cat << EOF >> $YASDB_HOME/client/yasc_service.ini
yasdb-taf = 10.168.1.103:1688, 10.168.1.104:1688, 10.168.1.105:1688 ? FAILOVER=ON & FAILOVER_TYPE=SESSION & FAILOVER_METHOD=BASIC & FAILOVER_RETRIES=10 & FAILOVER_DELAY=2
EOF

이후 해당 별칭으로 연결하고, 노드 1을 종료한 후 동일 세션에서 조회 쿼리를 실행합니다.

yasql sys/yashan@yasdb-taf
select instance_name, sysdate from v$instance;

결과: 세션은 끊기지 않고, 자동으로 노드 2로 재연결되었습니다. 이는 TAF 기능이 제대로 작동함을 입증합니다.

결론

YashanDB 23.5 YAC의 VIP 및 SCAN 기능은 생산 환경에서의 사용에 충분히 적합합니다. 일부 미세한 버그는 존재하지만, 추후 업데이트를 통해 보완될 것으로 예상됩니다. 전체적으로는 고가용성과 운영 효율성 측면에서 큰 진보를 이뤘다고 평가할 수 있습니다.

태그: YashanDB YAC VIP SCAN high availability

7월 12일 00:50에 게시됨