CYCLONE 구조
CYCLONE 의 구조를 알기 위해서는 아래의 URL 을 참고해주세요.
CYCLONE 테스트를 위한 초기 환경설정
이번 포스팅에서는 CYCLONE 을 구동하여 이중화를 수행해보겠습니다.
먼저, CYCLONE 을 테스트한 환경입니다.
CYCLONE |
장비정보 |
버전 |
CYCLONE MASTER |
OS |
CentOS Linux release 7.5.1804 (Core) |
DATABASE |
Release Venus.3.1.15 revision(25159) |
|
IP |
192.168.0.50 |
|
CYCLONE SLAVE |
OS |
CentOS Linux release 7.5.1804 (Core) |
DATABASE |
Release Venus.3.1.15 revision(25159) |
|
IP |
192.168.0.136 |
CYCLONE 테스트를 위한 데이터베이스 프로퍼티 설정
데이터베이스 프로퍼티를 설정합니다.
$ cat goldilocks.properties.conf ARCHIVELOG_MODE = 1 SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY = YES DISABLE_DDL_CDC_GIVEUP = YES DISABLE_UPDATE_PK_CDC_GIVEUP = YES
프로퍼티 |
설명 |
ARCHIVELOG_MODE |
아카이브 모드로 설정 ( 데이터베이스 생성 시 적용 이후 프로퍼티에서 적용안됨 ) |
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY |
PRIMARY KEY 에 대해 CYCLONE 을 위한 추가 로그 기록 |
DISABLE_DDL_CDC_GIVEUP |
이중화를 GIVE UP 발생시키는 DDL 구문의 수행을 막음 |
DISABLE_UPDATE_PK_CDC_GIVEUP |
이중화를 GIVE UP 발생시키는 PRIMARY KEY 에 대한 UPDATE 쿼리를 막음 |
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY 의 값이 YES 로 설정되면, 모든 테이블에 대해서 리두로그에 추가정보를 기록하게 됩니다.
매우 미세한 차이겠지만, 이중화 대상이 아닌 테이블도 추가적인 리두로그를 남기게 되므로 자원낭비가 발생됩니다.
따라서, 아래와 같은 방법으로 적용할 수도 있습니다.
SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY 를 NO 로 설정합니다.
이중화 대상 테이블을 설정한뒤, 해당 테이블만 SUPPLEMENTAL LOG 를 남기도록 변경합니다.
$ cat goldilocks.properties.conf ARCHIVELOG_MODE = 1 SUPPLEMENTAL_LOG_DATA_PRIMARY_KEY = NO DISABLE_DDL_CDC_GIVEUP = YES DISABLE_UPDATE_PK_CDC_GIVEUP = YES
CREATE TABLE T1 (C1 INT PRIMARY KEY, C2 INT); ALTER TABLE T1 ADD SUPPLEMENTAL LOG DATA ( PRIMARY KEY ) COLUMNS;
여기에서는 편리성을 위해 해당 프로퍼티를 YES 로 설정하고 진행해보겠습니다.
CYCLONE 테스트를 위한 테이블 생성 및 CYCLONE 프로퍼티 적용
이중화 테스트를 위한 테이블을 두 데이터베이스에 생성합니다.
CREATE TABLE T1 (C1 INT PRIMARY KEY, C2 INT); CREATE TABLE T2 (C1 INT PRIMARY KEY, C2 INT);
CYCLONE MASTER 프로퍼티를 설정합니다.
$ cat cyclone.master.conf ################################## # Cyclone Configure # # MASTER # ################################## PROTOCOL = TCP # TCP 접속을 합니다. HOST_IP = 192.168.0.50 # 192.168.0.50 번 아이피의 HOST_PORT = 22581 # 22581 리스너 포트로 접속가능한 데이터베이스에서 캡쳐합니다. DSN = GOLDILOCKS USER_ID = MOZI # 데이터베이스 유저 아이디와 USER_PW = mozi # 데이터베이스 유저 비밀번호를 입력합니다. GROUP_NAME = Group1 { PORT = 21102 # CYCLONE 끼리 통신하기 위한 포트를 설정합니다. CAPTURE_TABLE = ( PUBLIC.T1, # 이중화 대상 테이블을 작성합니다. PUBLIC.T2 # 테이블이 여러개일 경우에는 , 로 구분합니다. ) }
CYCLONE SLAVE 프로퍼티를 설정합니다.
$ cat cyclone.slave.conf ################################## # Cyclone Configure # # SLAVE # ################################## PROTOCOL = TCP # TCP 접속을 합니다. HOST_IP = 192.168.0.136 # 192.168.0.136 번 아이피의 HOST_PORT = 22581 # 22581 리스너 포트로 접속가능한 데이터베이스에 반영합니다. DSN = GOLDILOCKS USER_ID = MOZI # 데이터베이스 유저 아이디와 USER_PW = mozi # 데이터베이스 유저 비밀번호를 입력합니다. MASTER_IP = 192.168.0.50 # CYCLONE MASTER 가 구동된 IP를 입력합니다. GROUP_NAME = Group1 { PORT = 21102 # CYCLONE MASTER 에서 열어놓은 포트로 통신합니다. APPLY_TABLE = ( PUBLIC.T1 TO PUBLIC.T1, # 이중화 대상 테이블을 작성합니다. MASTER_TABLE TO SLAVE_TABLE 형식입니다. PUBLIC.T2 TO PUBLIC.T2 # 테이블이 여러개일 경우에는 , 로 구분합니다. ) }
CYCLONE 구동 및 테스트
CYCLONE MASTER 와 SLAVE 를 구동합니다.
$ cyclone --master --start $ [GROUP1] Startup done as Master.
$ cyclone --slave --start $ [GROUP1] Startup done as Slave.
CYCLONE MASTER 에서 데이터를 삽입한 뒤 CYCLONE SLAVE 에서 데이터를 조회합니다.
M-gSQL> INSERT INTO T1 VALUES (1, 1); M-gSQL> COMMIT;
S-gSQL> SELECT * FROM T1; C1 C2 -- -- 1 1
CYCLONE 의 이중화가 GIVE-UP 발생
만약 데이터베이스에서 GIVEUP 프로퍼티 설정을 하지 않은 경우 테이블에 DDL 이 발생 시 바로 GIVE-UP 됩니다.
이 때는 CYCLONE 전체 테이블 대상이 아닌 DDL 이 발생한 테이블에 대해서만 이중화가 수행되지 않습니다.
DISABLE_DDL_CDC_GIVEUP 값 |
DDL 발생시 현상 |
YES |
gSQL> TRUNCATE TABLE T1; ERR-42000(15017): DDL not allowed for supplemental log table $ cyclone --master --info --group group1 ================================================ GROUP NAME = GROUP1 ================================================ SCHEMA NAME : PUBLIC TABLE NAME : T1 (ACTIVE (CAPTURE-START-LSN:171217)) PHYSICAL ID : 8319351652352 SCHEMA NAME : PUBLIC TABLE NAME : T2 (ACTIVE (CAPTURE-START-LSN:171215)) PHYSICAL ID : 8146598972344 ================================================ TOTAL COUNT : 2 GIVE-UP COUNT : 0 ================================================ |
NO |
gSQL> TRUNCATE TABLE T1; Table truncated. $ cyclone --master --info --group group1 ================================================ GROUP NAME = GROUP1 ================================================ SCHEMA NAME : PUBLIC TABLE NAME : T1 (GIVE-UP (CAPTURE-START-LSN:171217)) PHYSICAL ID : 8319351652352 SCHEMA NAME : PUBLIC TABLE NAME : T2 (ACTIVE (CAPTURE-START-LSN:171215)) PHYSICAL ID : 8146598972344 ================================================ TOTAL COUNT : 2 GIVE-UP COUNT : 1 ================================================ |
* CYCLONE GIVE-UP 된 테이블을 reset 이후 시점부터 다시 동기화 시키는 방법
* CYCLONE GIVE-UP 된 테이블을 완전 동기화 시키는 방법
* CYCLONE 중 메타 정보 변경을 위한 DDL 구문 수행하기
'Database > Goldilocks' 카테고리의 다른 글
[GOLDILOCKS] CYCLONE 중 메타 변경을 위한 DDL 수행하기 (0) | 2018.07.07 |
---|---|
[GOLDILOCKS] CYCLONE RESET 옵션을 사용하여 GIVE-UP 된 테이블을 현시점부터 다시 이중화 시키는 방법 (0) | 2018.07.07 |
[GOLDILOCKS] ODBC - SQLSetDescField, SQLGetDescField, SQLSetDescRec, SQLGetDescRec 사용법 (0) | 2018.07.03 |
[GOLDILOCKS] ODBC - SQLSetEnvAttr, SQLGetEnvAttr 사용법 (0) | 2018.07.03 |
[GOLDILOCKS] ODBC - SQLSetStmtAttr, SQLGetStmtAttr 사용법 (0) | 2018.07.02 |