[DB2] HADR 구성하기

설치전 유의사항

운영체제 버전이 같아야 하며 DB2 버전, 설치 환경등이 모두 같다는 전제하에서 진행합니다.

 

1. DB Instance 정보를 설정한다.

a) db2set db2comm=tcpip

(Primary, Secondary 둘다)

 

b) db2 update dbm cfg svcename db2inst1(/etc/services port번호 매핑 서비스 이름)

 (Primary, Secondary 둘다)

 

c) DB2_HADR_BUF_SIZE

(Standby서버에만 설정. 단위는 4K이며, primary 서버의 LOGBUFSZ 구성 변수 값의 배로 설정합니다.)

참고 :

http://www.db2ude.com/?q=node/56

Database configuration parameters(db2 get db cfg for sample | grep -i log)
LOGFILSIZ = 6000
LOGBUFSZ  = 512
SOFTMAX   = 125 
DB2 Registry variables
db2set DB2TCP_CLIENT_RCVTIMEOUT=20 
db2set DB2_HADR_BUF_SIZE=10240

 

d) db2set DB2_LOAD_COPY_NO_OVERRIDE Copy yes 변경합니다.

(Standby, Primary 둘다)

- 중요 : Standby서버에서 Primary서버의 위치를 액세스할 있어야 합니다. 그러므로 가능한한 NFS 묶어서 설정할것을 추천드립니다.

db2set DB2_LOAD_COPY_NO_OVERRIDE="COPY YES TO /nfshome1/jhlhadr"

 

2. Standby 서버 읽기 기능 설정.(이건 DB2 9.7 Fixpack1 이상 가능합니다. 이하버전은 지원이 안됩니다.)

db2set DB2_HADR_ROS=Y

 

3. Primary Server DB정보를 update 백업합니다.

(스크립트 실행전 instance 내렸다 올린 실행합니다. 절대 DB Activate시키면 않됩니다.)

참고) Logretain 9.x 버전 이하 호환성을 위해 남겨둔 것으로 사용하지 않습니다.

connect to sample;
quiesce db immediate force connections;
unquiesce database;
connect reset;
update db cfg for sample using
indexrec restart
logindexbuild on
logarchmeth1 "disk:/jhlee/jhlhadr/jhlhadr/NODE0000/SQL00001/SQLOGDIR2"
logprimary 3
logsecond 2
logfilsiz 1000;
backup database sample to "/jhlee/jhlhadr/backup"
with 2 buffers
buffer 1024
parallelism 1
compress
without prompting;

참고) Circular모드에서 Archiving모드로 로깅 변경시 Backup Pending 걸림.

참고2)

indexrec :
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.config.doc/doc/r0000258.html

logindexbuild :
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.config.doc/doc/r0011452.html

 

 

4. Primary Server backup File 이용하여 Standby Server Resotre합니다.

(ftp를 이용해서 파일 전송을 하거나 nfs파일시스템을 이용해서 파일 복사로 이미지를 가져옵니다, Instace를 재수행합니다. 절대 DB를 activate시키면 않됩니다.)

restore database sample
from "/jhlee/jhlhadr/sqls/backup"
replace history file
without prompting;

주의) rollward pending 상태를 풀어주면 않된다.!! 이상태에서 HADR Standby 수행하게 됩니다.

 

5. Primary Server HADR정보를 update합니다.

update db cfg for sample using
hadr_local_host 192.168.100.1
hadr_local_svc 50100 (60000번 미만 번호 지정 : 반드시 대문자 지정.)
hadr_remote_host 192.168.100.2
hadr_remote_svc 50200 (60000번 미만 번호 지정 : 반드시 대문자 지정.)
hadr_remote_inst jhlhadr
hadr_syncmode nearsync
hadr_timeout 120;

 

6. Secondary Server HADR정보를 update합니다.

update db cfg for sample using
hadr_local_host 192.168.100.2
hadr_local_svc 50200 (60000번 미만 번호 지정)
hadr_remote_host 192.168.100.1
hadr_remote_svc 50100 (60000번 미만 번호 지정)
hadr_remote_inst jhlhadr
hadr_syncmode nearsync
hadr_timeout 120

 

7. alternate server 정보를 입력합니다.(Primary, Secondary둘다.)

Primary
$ db2 update alternate server for database SAMPLE using hostname 192.168.100.2  port 50106(/etc/services번호)
Secondary
$ db2 update alternate server for database SAMPLE using hostname 192.168.100.1 port 50105(/etc/services번호)

 

완료된 서비스 환경

PrimaryDB db2 get db cfg for sample | grep HADR StandBy DB
PRIMARY
192.168.100.1
50105
192.168.100.2
50106
jhlhadr
120
NEARSYNC
0
HADR database role
HADR local host name
HADR local service name
HADR remote host name
HADR remote service name
HADR instance name of remote server
HADR timeout value
HADR log write synchronization mode
HADR peer window duration (seconds)
STANDBY
192.168.100.2
50106
192.168.100.1
50105
jhlhadr
120
NEARSYNC
0
PrimaryDB db2 list db directory StandBy DB
192.168.100.2
60104
Alternate server hostname
Alternate server port number
192.168.100.1
60104

참고)

HADR remote host name : /etc/services 포트번호입니다.

Alternate server port number : /etc/sevices에서 사용되고 서비스 되어지는 instance port번호 입니다.

 

 

 

8. HADR서비스를 기동합니다.

- Standby 부터 수행(Database deactive 상태에서 기동)

시작 : db2 start hadr on db sample as standby

중지 : db2 stop hadr on db sample -> rollforward pending상태로 빠지게 됩니다.

Primary 수행(Database deactive 상태에서 기동)

시작 : db2 start hadr on db sample as primary

 

- 확인법

db2pd -d sample -hadr 실행후 ADR Information 정보를 보면 State란곳이 있는데 처음 실행시 RemoteCatchupPending으로 있다가 Primary서버에서 hadr 기동하면 Peer 변경됩니다.

처음 실행시)

ADR Information:
Role    State                SyncMode HeartBeatsMissed   LogGapRunAvg (bytes)
Standby RemoteCatchupPending Nearsync 0                  0                   

HADR 맺어진 )

HADR Information:
Role    State                SyncMode HeartBeatsMissed   LogGapRunAvg (bytes)
Standby Peer                 Nearsync 0                  0

 

주의사항)

- HADR 반드시 db2 stop hadr명령어로 중지시킨 db2stop으로 중지시켜야 합니다.

만약 hadr 정상종료가 아닌 db2stop으로 그냥 강제 종료시키면 다음과 같은 에러가 떨어지게 됩니다.

SQL1767N  Start HADR cannot complete. Reason code = "2".

이럴땐 db2 stop hadr명령어로 정상 종료 시킨후 다시 실행시킵니다.

 

- Unable to start HADR. Reason code = "7".

위의 에러는 HADR_LOCAL_SVC에러인데 아마 포트를 중복없이 써도 에러가 것이다.

이럴땐 인스턴트 포트와 10 이상정도의 차이를 두고 포트를 할당해준다.

 

 

9. 클라이언트 리라우트 환경설정

항 목 내 용
DB2TCP_CLIENT_CONTIMEOUT - 클라이언트가 TCP/IP 연결 조작이 완료될 때까지 허용되는 최대 대기 시간을 초단위로 제어하는 변수 입니다.
- 지정한 시간 동안 연결이 이루어지지 않을 경우에는 SQL30081N 오류가 반환됩니다.
- 기본값은 0 으로 무한정 대기합니다. 
- 0 ~ 32767 초 사이의 값을 클라이언트 인스턴스에서 설정할 수 있습니다. 
- V9.1 부터 지원됩니다.
- AIX의 tcp_keepinit 변수를 half-second(1/2초) 단위로 지정하여 유사한 효과를 낼 수도 있습니다.
DB2_MAX_CLIENT_CONNRETRIES  - 리라우트 연결 재시도 횟수를 제어하는 변수입니다.
- DB2_CONNRETRIES_INTERVAL를 설정하고, 이 변수를 설정하지 않은 경우에는 기본값으로 10회가 적용됩니다.
- JDBC type4 인 경우 maxRetriesForClientReroute를  설정합니다.
DB2_CONNRETRIES_INTERVAL  - 리라우트 연결 재시도 간격을 초단위로 제어하는 변수입니다.
- DB2_MAX_CLIENT_CONNRETRIES를 설정하고, 이 변수를 설정하지 않은 경우에는 기본값으로 30초가 적용됩니다.
- JDBC type4 인 경우 retryIntervalForClientReroute를 설정합니다.
DB2TCP_CLIENT_RCVTIMEOUT - 클라이언트가 TCP/IP 수신 조작에서 데이터를 기다리는 최대 대기 시간을  초단위로 설정합니다.- 지정한 시간 동안 서버에서 전송되는 데이터를 수신하지 못하는 경우에는 SQL30081N 오류가 반환됩니다.
- 기본값은 0 으로 무한정 대기합니다.
- 0 ~ 32767초 사이의 값을 클라이언트 인스턴스에서 설정할 수 있습니다.

 

10. HADR 튜닝

a) 통신Parameter

변수 설명
tcp_nodealyack
(HADR 전용통신네트웍)
권장값1, 디폴트0

b) 메모리Parameter

변수 설명
DB2_HADR_BUF_SIZE
(db2 registry 변수)
Standby서버에서로그수신버퍼크기, 디폴트Primary Log Buffer(logbufsz)의2배
db2_hadr_sosndbuf
(db2 registry 변수)
HADR연결에대한TCP/IP송신버퍼값,디폴트OS통신설정값
db2_hadr_sorcvbuf
(db2 registry 변수)
HADR연결에대한TCP/IP수신버퍼값,디폴트OS통신설정값

 

c) 프로세스Parameter

CPU 수가12일경우

$cat /db2/bpvars.cfg
Prec_num_agents=12
db2set db2bpvars = /db2/bpvars.cfg

 

11. 테스트

Primary 서버에 Table 생성 Standby 서버에도 Table 생성되었는지 확인합니다.

Designed by JB FACTORY