문서유형ㅣ기술정보
분야ㅣ설치
적용제품버전ㅣTibero 7FS04PS
문서번호ㅣPINTI007
개요
- 1편 : ProSync 설치 준비 및 Agent 설치
- 2편 : Instance 설치
- 3편 : CM Failover 설정
- 4편 : CM Failover 테스트
테스트 환경
| 구분 | OS | IP | DBMS Version | Prosync Version |
|---|---|---|---|---|
| Source_TAC0 | Rocky Linux release 8.10 | 10.10.10.61 | Tibero 7.2.4 (build 305455) | 4.6.0 (build 308985) |
| Source_TAC1 | Rocky Linux release 8.10 | 10.10.10.62 | Tibero 7.2.4 (build 305455) | 4.6.0 (build 308985) |
| Target_TAC0 | Rocky Linux release 8.10 | 10.10.10.63 | Tibero 7.2.4 (build 305455) | 4.6.0 (build 308985) |
| Target_TAC1 | Rocky Linux release 8.10 | 10.10.10.64 | Tibero 7.2.4 (build 305455) | 4.6.0 (build 308985) |
참고
Prosync CM Failover 기능은 Prosync 4.3 이상 버전부터 지원됩니다.
방법
Prosync 설치 준비
Prosync 바이너리 압축 해제
Prosync 바이너리 압축을 해제합니다. source/target DB에서 모두 수행합니다.
# tar -xvzf prosync4-bin-linux64_3.10-310173-20260209093704.tar.gz prosync4/bin/prs_papply prosync4/bin/prs_oapply prosync4/bin/prs_pllob prosync4/bin/prs_vf prosync4/bin/tblr_test prosync4/bin/prs_ext prosync4/bin/prs_oext prosync4/bin/prs_cm.sh prosync4/bin/prs_cred ... (중략) ... prosync4/license/oss_licenses/Jean-loup_Gailly_and_Mark_Adler.txt prosync4/license/oss_licenses/MIT.txt prosync4/license/oss_licenses/oss_licenses.txt prosync4/license/oss_licenses/ICU_license.html prosync4/license/oss_licenses/Paul_Hsieh_OLD_BSD_license.txt prosync4/license/oss_licenses/Apache_v2.txt prosync4/license/oss_licenses/BSD_license.txt prosync4/license/oss_licenses/OpenSSL.txt prosync4/client/lib/libprsalloc.so prosync4/client/lib/libprstbregacy.so prosync4/client/lib/libprsmio.so prosync4/client/lib/libprsiparam.so prosync4/client/lib/libprsmsg.so prosync4/client/lib/libprsmdl.so
bash_profile 수정
prosync 설치 경로에 맞게 환경변수를 작성합니다. source/target DB 모두 설정합니다.
#### Prosync 4.4.6 #### export PRS_HOME=/share/prosync4 export INSTANCE_ID=PRS_FAILOVER export PATH=$PRS_HOME/bin:$PRS_HOME/client/bin:$PATH export LD_LIBRARY_PATH=$PRS_HOME/lib:$PRS_HOME/client/lib:$LD_LIBRARY_PATH #### ProSync alias alias phome='cd $PRS_HOME' alias plog='cd $PRS_HOME/var/$INSTNACE_ID/log' alias pcfg='cd $PRS_HOME/config'
$TB_SID.tip에 파라미터 추가
Prosync가 DB의 Redo, Archive log 파일을 읽을 수 있도록 아래 파라미터를 활성한 후, DB 재기동을 수행합니다. source/target DB 모두 수행해줍니다.
$ vi $TB_HOME/config/$TB_SID.tip _ENABLE_LOG_MINER=Y _DDL_TRIGGER_ENABLE=Y _SPAN_UNDO=N $ tbdown immediate $ tbboot
동기화 대상 테이블 생성
source/target DB 모두 생성해줍니다.
$ tbsql sys/tibero SQL> create user test identified by test; SQL> grant resource, connect to test; SQL> create table test.t1 (c1 number primary key, c2 varchar(20)); SQL> create table test.t2 (c1 number primary key, c2 varchar(20)); SQL> create table test.t3 (c1 number primary key, c2 varchar(20));
Agent 설치
설치 파라미터 설정
Agent 설치를 위해 아래와 같이 prs_install_agent.cfg 를 설정합니다. (source DB 한쪽 노드에서만 수행합니다.)
$ cp $PRS_HOME/install/templates/prs_install_agent.cfg.template $PRS_HOME/install/prs_install_agent.cfg $ vi $PRS_HOME/install/prs_install_agent.cfg AGENT_CNT=4 AGENT_ID_0=src_agent1 AGENT_HOST_0=10.10.10.61 AGENT_PORT_0=7600 AGENT_CM_GROUP_0=SRC_CM AGENT_CM_ID_0=0 AGENT_ID_1=src_agent2 AGENT_HOST_1=10.10.10.62 AGENT_PORT_1=7700 AGENT_CM_GROUP_1=SRC_CM AGENT_CM_ID_1=1 AGENT_ID_2=tar_agent1 AGENT_HOST_2=10.10.10.63 AGENT_PORT_2=7800 AGENT_CM_GROUP_2=TAR_CM AGENT_CM_ID_2=0 AGENT_ID_3=tar_agent2 AGENT_HOST_3=10.10.10.64 AGENT_PORT_3=7900 AGENT_CM_GROUP_3=TAR_CM AGENT_CM_ID_3=1
- AGENT_CNT : 설치할 agent의 개수 지정 (필수)
- AGENT_ID_[n] : 각 agent의 고유 ID 지정. 숫자로 시작할 수 없으며 고유한 이름 설정 (필수)
- AGENT_HOST_[n] : agent가 설치될 호스트를 지정. hostname 보다 IP 주소 사용을 권장 (필수)
- AGENT_PORT_[n] : agent가 사용할 포트 지정 (필수)
- AGENT_CM_GROUP_[n] : CM Failover 기능을 사용하는 경우, 해당 agent가 속한 CM 그룹 이름을 지정
- AGENT_CM_ID_[n] : CM Failover 기능을 사용하는 경우, agent가 연결될 CM의 ID 지정. 각 그룹 내에서는 중복되지 않아야 하며, 그룹이 다를 경우 중복 가능
Agent install 스크립트 수행
prs_install_agent.cfg 설정 완료 후 아래와 같이 설치 스크립트를 실행합니다.
$ sh prs_install_agent.sh
********************************************************************************
* Agent Install Step (1/4)
* Check System Parameters
********************************************************************************
* Checking system type...
Linux
* Checking PRS_HOME...
PRS_HOME: /share/prosync4
********************************************************************************
* Agent Install Step (2/4)
* Check install agent config file [prs_install_agent.cfg]
* Check Instance file [prs_instance.map]
********************************************************************************
* Checking configuration file...
[/share/prosync4/install/prs_install_agent.cfg] exists.
* Checking Agent configuration...
parameter check for Agent[0] Started
AGENT_ID: src_agent1
AGENT_HOST: 10.10.10.61
AGENT_PORT: 7600
AGENT_CM_GROUP: SRC_CM
AGENT_CM_ID: 0
parameter check for Agent[0] Done
parameter check for Agent[1] Started
AGENT_ID: src_agent2
AGENT_HOST: 10.10.10.62
AGENT_PORT: 7700
AGENT_CM_GROUP: SRC_CM
AGENT_CM_ID: 1
parameter check for Agent[1] Done
parameter check for Agent[2] Started
AGENT_ID: tar_agent1
AGENT_HOST: 10.10.10.63
AGENT_PORT: 7800
AGENT_CM_GROUP: TAR_CM
AGENT_CM_ID: 0
parameter check for Agent[2] Done
parameter check for Agent[3] Started
AGENT_ID: tar_agent2
AGENT_HOST: 10.10.10.64
AGENT_PORT: 7900
AGENT_CM_GROUP: TAR_CM
AGENT_CM_ID: 1
parameter check for Agent[3] Done
* Checking prs_instance.map file...
/share/prosync4/config/prs_instance.map not found... Creating default prs_instance.map file...
********************************************************************************
* Agent Install Step (3/4)
* Writing agent config file [/share/prosync4/install/prs_install_agent.cfg]
* Writing Instance file [/share/prosync4/config/prs_instance.map]
* Total Agent Cnt [4]
********************************************************************************
* Writing all agents.. cnt: 4
* Writing Agent.. Index: 0
* Writing Agent.. AGENT_ID: src_agent1
* Writing Agent.. AGENT_HOST: 10.10.10.61
* Writing Agent.. AGENT_PORT: 7600
* Writing Agent.. AGENT_CM_GROUP: SRC_CM
* Writing Agent.. AGENT_CM_ID: 0
* Writing Agent configuration...
/share/prosync4/config/prs_agent_src_agent1.cfg not found. Writing files...
Done.
* Writing Agent information...
* Writing Agent.. Index: 1
* Writing Agent.. AGENT_ID: src_agent2
* Writing Agent.. AGENT_HOST: 10.10.10.62
* Writing Agent.. AGENT_PORT: 7700
* Writing Agent.. AGENT_CM_GROUP: SRC_CM
* Writing Agent.. AGENT_CM_ID: 1
* Writing Agent configuration...
/share/prosync4/config/prs_agent_src_agent2.cfg not found. Writing files...
Done.
* Writing Agent information...
* Writing Agent.. Index: 2
* Writing Agent.. AGENT_ID: tar_agent1
* Writing Agent.. AGENT_HOST: 10.10.10.63
* Writing Agent.. AGENT_PORT: 7800
* Writing Agent.. AGENT_CM_GROUP: TAR_CM
* Writing Agent.. AGENT_CM_ID: 0
* Writing Agent configuration...
/share/prosync4/config/prs_agent_tar_agent1.cfg not found. Writing files...
Done.
* Writing Agent information...
* Writing Agent.. Index: 3
* Writing Agent.. AGENT_ID: tar_agent2
* Writing Agent.. AGENT_HOST: 10.10.10.64
* Writing Agent.. AGENT_PORT: 7900
* Writing Agent.. AGENT_CM_GROUP: TAR_CM
* Writing Agent.. AGENT_CM_ID: 1
* Writing Agent configuration...
/share/prosync4/config/prs_agent_tar_agent2.cfg not found. Writing files...
Done.
* Writing Agent information...
* Creating var directory...
* Created.
********************************************************************************
* Agent Install Step (4/4)
* Creating files for CM
********************************************************************************
AGENT_CM_ID detected
generating prs_0.sh...
PRS_HOME=/share/prosync4
AGENT_ID=src_agent1
prs_0.sh has created in $PRS_HOME/bin/
AGENT_CM_ID detected
generating prs_1.sh...
PRS_HOME=/share/prosync4
AGENT_ID=src_agent2
prs_1.sh has created in $PRS_HOME/bin/
AGENT_CM_ID detected
generating prs_0.sh...
PRS_HOME=/share/prosync4
AGENT_ID=tar_agent1
prs_0.sh has created in $PRS_HOME/bin/
AGENT_CM_ID detected
generating prs_1.sh...
PRS_HOME=/share/prosync4
AGENT_ID=tar_agent2
prs_1.sh has created in $PRS_HOME/bin/
Agent installation Done.
Agent 설치 결과 확인
설치가 완료되면 다음 경로에서 결과 파일을 확인할 수 있습니다.
$ cd $PRS_HOME/config $ ls -al total 51 -rw-rw-r-- 1 tibero dba 4 Jan 20 06:16 variant drwxr-xr-x 2 tibero dba 4096 Mar 5 08:06 templates drwxr-xr-x 8 tibero dba 4096 Mar 6 00:24 .. -rw-r--r-- 1 tibero dba 728 Mar 6 03:36 prs_instance.map -rw-r--r-- 1 tibero dba 310 Mar 6 04:17 prs_adm.cfg -rw-r--r-- 1 tibero dba 1010 Mar 6 04:48 prs_agent_src_agent1.cfg -rw-r--r-- 1 tibero dba 1010 Mar 6 04:48 prs_agent_src_agent2.cfg -rw-r--r-- 1 tibero dba 1010 Mar 6 04:48 prs_agent_tar_agent2.cfg -rw-r--r-- 1 tibero dba 1016 Mar 6 05:01 prs_agent_tar_agent1.cfg $ cat $PRS_HOME/config/prs_instance.map AGENT=(ID=src_agent1)(HOST=10.10.10.61)(PORT=7600)(CM_GROUP=SRC_CM)(CM_ID=0) AGENT=(ID=src_agent2)(HOST=10.10.10.62)(PORT=7700)(CM_GROUP=SRC_CM)(CM_ID=1) AGENT=(ID=tar_agent1)(HOST=10.10.10.63)(PORT=7800)(CM_GROUP=TAR_CM)(CM_ID=0) AGENT=(ID=tar_agent2)(HOST=10.10.10.64)(PORT=7900)(CM_GROUP=TAR_CM)(CM_ID=1)
CM Failover 스크립트 설정
CM Failover 기능을 사용하기 위해 사용되는 스크립트이며, agent 기동을 위한 환경 변수를 반드시 설정해야 합니다. (TB_HOME, PRS_HOME, AGENT_ID 등)
AGENT_CM_ID[n]을 설정한 경우 Agent 설치 시, $PRS_HOME/bin 경로에 prs_<AGENT_CM_ID>.sh 형식의 스크립트가 자동 생성됩니다.
$ vi $PRS_HOME/bin/prs_0.sh ($ vi $PRS_HOME/bin/prs_1.sh도 수정)
#!/bin/sh
export TB_HOME=/share/tibero_engine ## TB_HOME 입력
export PRS_HOME=/share/prosync4 ## PRS_HOME 입력
AGENT_ID=src_agent1 ## agent_id 입력
TIMEOUT_CNT=7
source $PRS_HOME/bin/prs_cm.sh
export logdir=$PRS_HOME/var
echo "`date +%Y/%m/%d\ %H:%M:%S` cm agent Start (Agent Command $1)" >> $logdir/cmagent.log
case $1 in
START)
echo "start $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
start $TIMEOUT_CNT $AGENT_ID
rc=$?
;;
PROBE)
echo "probe $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
probe $TIMEOUT_CNT $AGENT_ID
rc=$?
;;
DOWN)
echo "stop $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
stop $TIMEOUT_CNT $AGENT_ID
rc=$?
;;
KILL)
echo "stop $TIMEOUT_CNT $AGENT_ID" >> $logdir/cmagent.log
stop $TIMEOUT_CNT $AGENT_ID
rc=$?
;;
NOTI)
rc=0
;;
COMMIT)
echo "send $TIMEOUT_CNT $AGENT_ID ${@:2}" >> $logdir/cmagent.log
send $TIMEOUT_CNT $AGENT_ID ${@:2}
rc=$?
;;
*)
;;
esac
echo "`date +%Y/%m/%d\ %H:%M:%S` cm agent End (Agent Command $1)" >> $logdir/cmagent.log
exit $rc주의
CM에서 해당 스크립트를 실행하는데 권한에 문제가 없는데도 rc=127 에러가 발생한다면,
/bin/sh를/bin/bash로 변경하여 해결 가능합니다.
AGENT 설정
각 Agent 별로 아래와 같이 설정합니다.
$ vi $PRS_HOME/config/prs_agent_<agent_id>.cfg LOG_LEVEL=3 LOG_DIR=/share/prosync4/var/agent/src_agent1/log LOG_BACKUP_DIR=/share/prosync4/var/agent/src_agent1/log/backup USE_CM = Y PRS_AGENT_PROC_MAX_FAIL_CNT = 10 #Dependency Param : USE_CM=Y PRS_AGENT_PROC_STARTUP_TIMEOUT = 10 #Dependency Param : USE_CM=Y PRS_AGENT_PROC_STATUS_REPLY_TIMEOUT = 10 #Dependency Param : USE_CM=Y PRS_AGENT_PROC_STATUS_INTERVAL = 3 #Dependency Param : USE_CM=Y PRS_AGENT_CM_PROBE_TIMEOUT = 0 #Dependency Param : USE_CM=Y
- USE_CM : CM 사용 여부 설정. Y로 설정할 경우 하위 프로세스 상태를 모니터링하고, 장애 시 재기동 수행 (기본값 : N)
- PRS_AGENT_PROC_MAX_FAIL_CNT : 하위 프로세스 장애 발생 시 상태를 보정하기 위해 재시도 하는 최대 횟수 (기본값 : 10)
- PRS_AGENT_PROC_STARTUP_TIMEOUT : 프로세스 기동 이후 정상적으로 처리되기까지 대기하는 최대 시간(초). 정상 처리되지 않을 경우 설정 시간만큼 대기 후 재시도
- PRS_AGENT_PROC_STATUS_REPLY_TIMEOUT : 하위 프로세스로부터 응답이 없을 경우 대기하는 최대 시간(초). 초과 시 해당 프로세스에 hang이 발생한것으로 판단하고 재기동 수행
- PRS_AGENT_PROC_STATUS_INTERVAL : Agent 프로세스라 CM에게 cmrctl check 명령을 보내는 주기
- PRS_AGENT_CM_PROBE_TIMEOUT : CM 상태 확인 시 대기하는 최대시간(초). 0으로 설정할 경우 cmrctl 응답 무한 대기 (기본값 : 0)