내가 해야할것은.

glocator를 클러스터DB와 같은 장비에 구동하면서,
인스턴스를 안전하게 유지 할 수 있는 방법이 있는지?를 생각하고,
다양한 경우의 수에 대해 실제로 확인 해보는 일.

우선으로 할 것은, 이 현상과 관련된 프로퍼티 파악하기.

glocator 관련 프로퍼티로 CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY가 있는데
split brain resolution policy for cluster system (0: none, 1: weak locator, 2: strong locator ) 으로 설명되어 있다.

1by2 클러스터 환경에서 네트워크단절 발생 시,
각 프로퍼티 별로 인스턴스가 어떻게 되는지 살펴본다.



<환경>
클러스터 구성 1by2 (160, 165)
gagent 구동 ( 161, 169)
glocator 구동 (152)

먼저 프로퍼티 1과 2의 차이를 알기위해서, 로케이터를 다른 장비에 두고 
로케이터 커넥션 단절 상태(ifdown 152)에서 클러스터 라인 끊어졌을(ifdown 160) 경우 DB상태 확인

<결과>
G1N1, G1N2 ) CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY = 2
양쪽 DB 둘다 인스턴스 종료 됨

G1N1, G1N2 ) CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY = 1
양쪽 DB 둘다 살아있으면서 split brain 현상 발생
[heni@heninet2 ~]$ gsql --as sysdba

Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release Venus.3.1.4 revision(24256)

Connected to GOLDILOCKS Database.

gSQL> select * from x$cluster_member;
ERR-HY000(16354): connection of member 'G1N2' is broken

gSQL> select * from t1;
ID NAME
-- ----
1  a   

1 row selected.

gSQL> update t1 set id=2 where id=1;
1 row updated.

gSQL> commit;
Commit complete.

gSQL> select * from x$cluster_member@local;

MEMBER_ID MEMBER_POSITION LOGICAL_CONNECTION PHYSICAL_CONNECTION SERIAL
--------- --------------- ------------------ ------------------- ------
IS_GLOBAL_COORD IS_DOMAIN_COORD LOCAL_SCN LOCAL_MIN_TRANS_VIEW_SCN AGABLE_SCN
--------------- --------------- --------- ------------------------ ----------
AGABLE_STMT_SCN AGABLE_VIEW_SCN
--------------- ---------------
        1               0 ACTIVE             ACTIVE                   2
TRUE            TRUE            1.3.10    1.2.10                   1.3.10    
1.3.10          1.2.10         
        2               1 INACTIVE           INACTIVE                 1
FALSE           FALSE           -1.-1.-1  -1.-1.-1                 -1.-1.-1  
-1.-1.-1        -1.-1.-1       

2 rows selected.

[heni@heninet4 ~]$ gsql --as sysdba

Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release Venus.3.1.4 revision(24256)

Connected to GOLDILOCKS Database.

gSQL> select * from x$cluster_member;

ERR-HY000(16354): connection of member 'G1N1' is broken

gSQL> select * from t1;
ID NAME
-- ----
1  a   

1 row selected.

gSQL> update t1 set id=3 where id=1;
1 row updated.

gSQL> commit;
Commit complete.

gSQL> select * from x$cluster_member@local;

MEMBER_ID MEMBER_POSITION LOGICAL_CONNECTION PHYSICAL_CONNECTION SERIAL
--------- --------------- ------------------ ------------------- ------
IS_GLOBAL_COORD IS_DOMAIN_COORD LOCAL_SCN LOCAL_MIN_TRANS_VIEW_SCN AGABLE_SCN
--------------- --------------- --------- ------------------------ ----------
AGABLE_STMT_SCN AGABLE_VIEW_SCN
--------------- ---------------
        1               0 INACTIVE           INACTIVE                 1
FALSE           FALSE           -1.-1.-1  -1.-1.-1                 -1.-1.-1  
-1.-1.-1        -1.-1.-1       
        2               1 ACTIVE             ACTIVE                   2
TRUE            TRUE            1.3.873   1.2.873                  1.3.873   
1.3.873         1.2.873        

2 rows selected.



결론
CLUSTER_SPLIT_BRAIN_RESOLUTION_POLICY ( 0: none, 1: weak locator, 2: strong locator )

프로퍼티 0 glocator 있던말던 아예 신경 안쓰겠다.
프로퍼티 1 glocator에게 받은 지시가 있을 경우 그 지시를 따름. glocator에게 받은 지시가 없으면 DB 살아있겠다.
프로퍼티 2 glocator 에게받은 지시가 있을 경우 그 지시를 따름. glocaotr에게 받은 지시가 없으면 DB 종료하겠다.
※ glocator의 지시 : 클러스터 네트워크 단절 시, 현재의 master node를 살리고 slave node 종료 시킴 (이외 다른 내부조건이 있긴하다)

라고 생각할 수 있음.




+ Recent posts