DRBD split brain 처리하기
DRBD 에서 split brain 상태가 되었을때 다음과 같이 처리를 할 수 있다.
사실 split brain 상태를 만들기위해 랜선을 수차례 뽑았다 연결을 하여 만들었다.
아래처럼 cs 상태가 StandAlone 으로 보이면 Split brain 상태가 된다.
이때 처리 방법은 slave 쪽의 데이터를 포기하고 primary 쪽의 데이터와 다시 동기화를 하는 것이다.
실제 처리 하는 과정을 살펴보자.
stor01은 기존에 primary 노드로 사용을 하고 있던 장비로 현재 StandAlone 상태로 돌고 있다.
stor01:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor01, 2009-01-02 10:08:59 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r--- ns:5405948 nr:0 dw:150414192 dr:996595504 al:37948 bm:559 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:140180 1: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r--- ns:0 nr:0 dw:0 dr:36148328 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 |
stor02 서버는 기존에 Secondary 로 돌고 잇다가 StandAlone 상태로 현재 돌고 있다.
stor02:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor02, 2009-01-02 10:09:38 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r--- ns:0 nr:5405948 dw:150302972 dr:976818256 al:137 bm:751 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 1: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r--- ns:0 nr:0 dw:0 dr:36148640 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 |
stor02 에서 DRBD resource 이름을 확인한다.
stor02:~# drbdadm status <drbd-status version="8.3.0" api="88"> <resources config_file="/etc/drbd.conf"> <resource minor="0" name="bigdisk" cs="StandAlone" ro1="Secondary" ro2="Unknown" ds1="UpToDate" ds2="DUnknown" /> <resource minor="1" name="smalldisk" cs="StandAlone" ro1="Secondary" ro2="Unknown" ds1="UpToDate" ds2="DUnknown" /> </resources> </drbd-status> |
만약 해당 resource 가 secondary 상태가 아니라면 아래 처럼 secondary 상태로 만들어 준다.
stor02:~# drbdadm secondary smalldisk |
아래 명령이 가장 중요한 것으로 현재 서버 즉 stor02 서버에서 smalldisk resource 의 데이터를 포기하고 primary 서버의 데이터와 다시 동기화를 하겠다는 명령이다. 만약 원본 데이터가 stor02가 더 최신의 데이터가 있는 상태였다면 날리게 되는 것이다. 주의해서 명령을 날려야 한다.
stor02:~# drbdadm -- --discard-my-data connect smalldisk |
위 명령을 실행하고 나면 상태가 WFConnection 상태가 된다.
즉 primary 로 부터 데이터를 받아 들일 준비가 된 것으로 기다리고 있다는 것이다.
stor02:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor02, 2009-01-02 10:09:38 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r--- ns:0 nr:5405948 dw:150302972 dr:976818256 al:137 bm:751 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 1: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r--- ns:0 nr:0 dw:0 dr:36148640 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 |
stor01 primary 서버에서는 해당 resource 에 다시 연결만 해 주면 된다.
stor01:~# drbdadm connect smalldisk |
위 명령이 실행 되고 나면 아래처럼 cs 상태가 Connected 로 되고 Primary/Secondary 가 UpToDate 상태가 된다.
stor01:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor01, 2009-01-02 10:08:59 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r--- ns:5405948 nr:0 dw:150414696 dr:996595552 al:37948 bm:559 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:140300 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r--- ns:0 nr:0 dw:0 dr:36148328 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 |
이 서버는 DRBD 볼륨이 두개 있어서 한개 더 작업을 해야 한다.
이제 두번째 DRBD 볼륨을 정상화 시켜 보자.
먼저 stor02 secondary 서버에서 작업을 먼저 한다.
stor02:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor02, 2009-01-02 10:09:38 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r--- ns:0 nr:5405948 dw:150302972 dr:976818256 al:137 bm:751 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r--- ns:0 nr:0 dw:0 dr:36148640 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 stor02:~# drbdadm -- --discard-my-data connect bigdisk stor02:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor02, 2009-01-02 10:09:38 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r--- ns:0 nr:0 dw:150302972 dr:976818256 al:137 bm:751 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r--- ns:0 nr:0 dw:0 dr:36148640 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 |
stor01 primary 서버에서 connect 를 시켜 준다.
데이터 양이 많은 경우 동기화 되는 모습을 볼 수 도 있다.
stor01:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor01, 2009-01-02 10:08:59 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r--- ns:5405948 nr:0 dw:150417472 dr:996596012 al:37948 bm:559 lo:0 pe:0 u a:0 ap:0 ep:1 wo:b oos:141336 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r--- ns:0 nr:0 dw:0 dr:36148328 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oo s:0 stor01:~# drbdadm connect bigdisk stor01:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor01, 2009-01-02 10:08:59 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r--- ns:74556 nr:0 dw:150417472 dr:996733412 al:37948 bm:600 lo:1 pe:47 ua :2081 ap:0 ep:1 wo:b oos:68272 [=========>..........] sync'ed: 54.3% (68272/141336)K finish: 0:00:03 speed: 18,264 (18,264) K/sec 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C rap- ns:0 nr:0 dw:0 dr:36148328 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oo s:0 stor01:~# cat /proc/drbd version: 8.3.0 (api:88/proto:86-89) GIT-hash: 9ba8b93e24d842f0dd3fb1f9b90e8348ddb95829 build by root@stor01, 2009-01-02 10:08:59 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r--- ns:141352 nr:0 dw:150417488 dr:996737356 al:37948 bm:691 lo:0 pe:0 ua :0 ap:0 ep:1 wo:b oos:0 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r--- ns:0 nr:0 dw:0 dr:36148328 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oo s:0 |
'리눅스 문서' 카테고리의 다른 글
jsp 계정 셋팅과 버추얼호스트 설정 (4) | 2014.11.25 |
---|---|
drbd sync 깨졌을때 [solved] (4) | 2014.11.25 |
DRBD(Distributed Replicated Block Device) 설치 및 설정 (8) | 2014.11.25 |
SSH 기본명령어 (8) | 2014.11.25 |
알FTP 사용법 (1572) | 2014.11.25 |