개요
DRBD는 하나의 리소스에 대해 두 개의 채널로 동작한다. 각 채널은 연결 방향이 서로 반대로 수립되어, 서버/클라이언트로 구분할 수 없는 P2P구조로 동작한다.
DRBD의 통신을 중계하기 위해서 DRX도 두 개의 채널을 사용하는데, DRX간 연결 과정이 더해지면 연결이 총 6개로 늘어난다.
로컬 DRX에서는 원격 DRX와 원격 DRBD의 연결 상태를 제외한 4개의 연결만 확인 할 수 있다.
연결 구조
drx-ctl show
Command id (5) : show ================================================================================================================================================================================ Name Type Status local-drbd-ip listen-lan-ip local-drx-wan-ip remote-drx-ip Up since ================================================================================================================================================================================ p-s-DESKTOP-L141PH6-drxdev1 meta established 192.168.35.111:7789 192.168.35.101:7790 192.168.35.101:7791 192.168.35.1:7791 - p-s-DESKTOP-L141PH6-drxdev1 data established 192.168.35.111:7789 192.168.35.101:7790 192.168.35.101:7791 192.168.35.1:7791 2018-08-30 14:51:34 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- All connections : 2
각각의 리소스는 완전히 독립되어 작동하며, 하나의 리소스는 두개의 채널로 구성된다. 아래의 drx-ctl show 출력에서 첫번째 채널이 Acceptor, 두번째 채널이 Connector에 해당한다.
하나의 채널은 두 개의 연결(로컬 DRBD, 원격 DRX)을 관리한다.
drx-ctl show states 명령을 통해 연결 방향을 확인 할 수 있다.
drx-ctl show states
Command id (4) : show states ========================================================================================================================================================= Name Type local-drbd-ip State local-drx-ip State remote-drx-ip ========================================================================================================================================================= p-s-DESKTOP-L141PH6-drxdev1 meta 192.168.35.111:7789 -established-> 192.168.35.101:7790/192.168.35.101:7791 <-bridged----- 192.168.35.1:7791 p-s-DESKTOP-L141PH6-drxdev1 data 192.168.35.111:7789 <-established- 192.168.35.101:7790/192.168.35.101:7791 -----bridged-> 192.168.35.1:7791 --------------------------------------------------------------------------------------------------------------------------------------------------------- All connections : 2, Established : 2
각 채널의 연결을 원격 DRBD까지 통합하여 표현하면 다음과 같다.
- Acceptor
- 리소스 파일의 outside IP/Port를 통해 원격 DRX의 접속을 받는다.
- 리소스 파일의 inside IP/Port를 통해 로컬 DRBD의 접속을 받는다.
- Connector
- 원격 DRX의 outside IP/Port로 접속한다.
- 로컬 DRBD에 접속한다.
각각의 채널은 DRX간 연결시 채널 유형(meta/data)이 정해지지 않은 상태이며, DRBD와의 연결이 수립되면 DRBD로부터 채널 유형을 받게 된다.
접속 상태
분류 | 상태 값 | 채널 | 설명 | 동작 |
---|---|---|---|---|
DRX간 연결 | bridging | 전체 | 원격 DRX와 연결 시도 중 | 연결이 완료되면 bridged 상태로 전환 |
bridged | 전체 | 원격 DRX와 연결됨 | 상태 변경 후 즉시 waiting/connecting 상태로 전환 | |
DRBD와의 연결 | waiting | Acceptor | DRBD의 연결을 기다리는 중 | DRBD와 연결되면 connected 상태로 전환 |
connecting | Connector | DRBD로 연결 중 | 원격 DRX로부터 채널 유형을 받아 DRBD에 접속 | |
connected | Acceptor | DRBD로부터 | DRBD로부터 채널 유형을 받아 원격 DRX에 전달하고 establishing 상태로 전환 | |
establishing | 전체 | 연결 수립중 | Connector: 원격 DRX로 연결 수립 이벤트를 전달하고 established 상태로 전환 Acceptor: 원격 DRX로부터 연결 수립 이벤트를 받으면 established 상태로 전환 | |
established | 전체 | 연결이 수립됨 | DRBD의 통신 데이터를 중계한다 | |
연결 중지 | close_pending | 전체 | 연결을 닫기 전의 정리 단계 | BAB에 남아있는 데이터를 전달하고 stopping 상태로 전환 |
stopping | 전체 | 연결 닫는 중 | 현재 연결을 닫고 stopped 상태로 전환 | |
stopped | 전체 | 연결이 닫힘 | 재 연결을 준비하고 bridging 상태로 전환 |
일반적인 상태변화 순서
정상적인 연결시 채널별 상태 변화는 다음과 같다.
연결이 끊길 경우의 상태 변화:
- 로컬 DRBD와의 연결이 끊긴 경우
- 연결 종료를 위해 두 채널 모두 stopping 상태로 전환된다. (data 채널은 BAB를 비우기 위해 먼저 close pending 상태를 거치게 된다.)
- 연결을 종료하는 작업이 완료되면 stopped 상태로 전환된다.
- 로컬 DRBD와의 재 연결을 위해 connecting / waiting 상태로 전환된다.
- 원격 DRBD와 원격 DRX 사이의 연결이 끊긴 경우
- 위의 로컬 DRBD와의 연결이 끊긴 경우의 상황이 원격 DRX에서 발생하면서, 로컬 DRX도 같은 순서로 stopping, stopped를 거쳐 connecting / waiting 상태로 전환된다.
- 로컬 DRBD는 재 연결이 가능하므로 즉시 DRBD로부터 접속이 이루어진다.
- Acceptor에 DRBD가 연결되어 connected를 거쳐 establishing 상태로 전환된다.
- Connector는 원격 DRX가 원격 DRBD와 연결되지 않았으므로 connecting 상태로 유지된다.
- 원격 DRX와의 연결이 끊기는 경우
- 연결 종료를 위해 두 채널 모두 stopping 상태로 전환된다. (data 채널은 BAB를 비우기 위해 먼저 close pending 상태를 거치게 된다.)
- 연결을 종료하는 작업이 완료되면 stopped 상태로 전환된다.
- 원격 DRX와의 재 연결을 위해 bridging 상태로 전환된다.
상태값에 따른 동작 상황 분석
Acceptor 채널 | Connector 채널 | 상황 분석 |
---|---|---|
bridging | bridging | 원격 DRX가 종료되었거나, 로컬 DRX와 원격 DRX가 서로에게 접속할 수 없다. |
bridging | connecting | 로컬 DRX에 원격 DRX가 접속할 수 없다. |
waiting | bridging | 원격 DRX에 접속할 수 없다. |
waiting | connecting | 로컬 DRBD의 리소스가 연결중 상태가 아니거나 로컬 DRX에 접속할 수 없다. |
establishing | connecting | 로컬 DRBD는 연결되나 원격 DRX가 원격 DRBD에 연결할 수 없다. |
established | connecting | 로컬 DRBD에서 로컬 DRX에는 연결이 되지만 로컬 DRX가 로컬 DRBD에 연결할 수 없다. |
establishing | established | 원격 DRBD에서 원격 DRX에는 연결이 되지만 원격 DRX가 원격 DRBD에 연결할 수 없다. |
waiting | established | 로컬 DRX에서 로컬 DRBD로 연결은 되지만 로컬 DRBD가 로컬 DRX에 연결할 수 없다. |
established | connecting | 원격 DRX에서 원격 DRBD로 연결은 되지만 원격 DRBD가 원격 DRX에 연결할 수 없다. |