ALTIBASE HDB 5.3.3 기초강좌
이중화 환경 구성 및 실습 0 0 5,448

by Altibase 이중화 REPLICATION [2012.04.14]


  이중화 실습을 하기 위해서는 ALTIBASE HDB를 두 개 이상 설치해야 합니다. 하나의 서버에 OS 계정을 다르게 하여 두 개 이상의 ALTIBASE HDB를 설치할 수 있습니다. 이번 실습에서 server1과 server2의 정보는 다음과 같이 가정하고 진행합니다.

 
Server 1
-   OS 계정: altibase
-   IP: 192.168.2.26
-   REPLICATION_PORT_NO=21300
Server 2: 
-   OS 계정: hdb
-   IP: 192.168.1.35
-   REPLICATION_PORT_NO=31300
    

이중화 생성

이중화 관련 프로퍼티 확인
  • - altibase 계정의 $ALTIBASE_HOME/conf/altibase.properties 의 REPLCATION_PORT_NO 의 값을 21300으로 변경(포트는 충돌이 나지 않는 다른 값으로 변경해도 무방함)
  • - hdb 계정의 $ALTIBASE_HOME/conf/altibase.properties 의 REPLCATION_PORT_NO 의 값을 31300으로 변경(포트는 충돌이 나지 않는 다른 값으로 변경해도 무방함
 
Shell(Server 1)> SERVER RESTART (변경한 프로퍼티 적용을 위해 DB 재구동)
Shell(Server 2)> SERVER RESTART (변경한 프로퍼티 적용을 위해 DB 재구동)
    

이중화 대상 테이블 생성
  • - altibase 계정과 hdb 계정에서 각각 이중화 대상 테이블 생성합니다.
 
iSQL(Server 1)> CREATE TABLE test1 ( c1 INTEGER PRIMARY KEY, c2 CHAR(10) ) ;
iSQL(Server 1)> CREATE TABLE test2 ( c1 INTEGER PRIMARY KEY, c2 VARCHAR(10) ) ;

iSQL(Server 2)> CREATE TABLE test1 ( c1 INTEGER PRIMARY KEY, c2 CHAR(10) ) ;
iSQL(Server 2)> CREATE TABLE test2 ( c1 INTEGER PRIMARY KEY, c2 VARCHAR(10) ) ;
    

이중화 객체 생성
  • - IP와 REP_PORT는 상대방 서버의 정보를 지정해야 합니다.
 
iSQL(Server 1)> CREATE REPLICATION rep WITH ‘ 192.168.1.35’ , 31300 
             2 FROM sys.test1 TO sys.test1 , FROM sys.test2 TO sys.test2 ;

iSQL(Server 2)> CREATE REPLICATION rep WITH ‘ 192.168.2.26’ , 21300 
             2 FROM sys.test1 TO sys.test1 , FROM sys.test2 TO sys.test2 ;
    

이중화 SYNC

Server 1 에 INSERT
  • - Server 1 의 test1 테이블에 10건의 데이터를 INSERT 하고, 이중화 복제 구문을 통해 server 2의 test1 테이블에도 동일한 데이터를 복제해봅니다.
 
iSQL(Server 1)> INSERT INTO test1 VALUES (1, ‘aaa’) ;
iSQL(Server 1)> INSERT INTO test1 VALUES (2, ‘bbb’) ;
…
iSQL(Server 1)> INSERT INTO test1 VALUES (10, ‘jjj’) ;
    

Serve 1 에서 SYNC 구문 실행
  • - SYNC 구문을 실행하면 데이터를 복제한 후에 자동으로 이중화까지 시작합니다.
  • - 따라서, SYNC 구문 이후에 실행되는 모든 DML에 대해서는 복제가 됩니다.
 
iSQL(Server 1)> ALTER REPLICATION rep SYNC ;
    

  • - 데이터 복제가 정상적으로 수행되었는지 server 2 에서 데이터를 확인합니다.
  • - Server 2의 test1 테이블에는 INSERT를 하지 않았어도 server 1의 데이터가 복제되어 10건이 들어 있음을 확인할 수 있습니다.
 
iSQL(Server 2)> SELECT COUNT(*) FROM test1 ;
COUNT                
------------------
10                   
1 row selected.
    

  • - 데이터 건수를 확인 한 후에 server 2에서도 이중화를 시작합니다.
 
iSQL(Server 2)> ALTER REPLICATION rep START;
    

데이터 전송 확인

  이제 server 1, server 2 에서 모두 이중화를 시작했기 때문에 어느 쪽에서 변경이 발생을 하든지 다른 쪽 서버에 반영이 됩니다.

Serve 1 에서 DML 실행 후 server 2에서 확인
 
iSQL(Server 1)> DELETE FROM test1;
iSQL(Server 1)> INSERT INTO test1 VALUES (1, ‘test’) ;

iSQL(Server 2)> SELECT * FROM test1 ;
C1          C2          
---------------------
1           test        
1 row selected.
    

Serve 2 에서 DML 실행 후 server 1에서 확인
 
iSQL(Server 2)> INSERT INTO test1 (2, ‘test’) ;

iSQL(Server 1)> SELECT * FROM test1 ;
C1          C2          
---------------------
1           test        
2           test        
2 rows selected.

iSQL(Server 2)> DELETE FROM test1;

iSQL(Server 1)> SELECT * FROM test1 ;
C1          C2          
---------------------
No row selected.
    

장애 시 자동 복구 확인

  Server 2를 종료 한 후에, server 1에만 데이터를 INSERT 하면, server 1과 server 2의 데이터 차이가 발생하게 됩니다. 이 때, server 2를 재구동하면 DB가 데이터를 자동으로 동기화 시켜주는 알아보도록 하겠습니다.

Server 2 종료
 
shell(Server 2)> SERVER STOP
    

shell(Server 2)> SERVER STOP
  • - Server 1의 test1 테이블에 데이터를 INSERT 하고 server 2를 재구동 해봅니다. 여기서는 여러 건의 데이터를 INSERT 하기 위해 프로시저를 생성했습니다.
 
iSQL(Server 1)> CREATE OR REPLACE PROCEDURE ins AS
             2 v1 INTEGER ;
             3 BEGIN
             4   FOR v1 IN 1 .. 1000 LOOP
             5      INSERT INTO test1 VALUES ( v1, v1);
             6   END LOOP;
             7 END;
             8 /
iSQL(Server 1)> EXEC ins;   test 1에 1000 건의 데이터가 INSERT됨
iSQL(Server 1)> SELECT COUNT(*) FROM test1 ;
COUNT                
------------------
1000                   
1 row selected.
    

Server 2 재구동
 
shell(Server 2)> SERVER START

iSQL(Server 2)> SELECT COUNT(*) FROM test1 ;
COUNT                
------------------
1000                   
1 row selected.
    

참고사이트

- 강좌 URL : http://www.gurubee.net/lecture/2189

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입