리눅스 HA(corosync, pacemaker, DRBD) – Part 2

corosync, pacemaker 클러스터에 DRBD 디스크 이용하기.

이 글은 리눅스 HA(corosync, pacemaker) – Part 1에 이어집니다. part2는 원래 iscsi 볼륨을 붙여서 active-active 클러스터로 넘어가는 글이었는데, 작성하다가 멈췄습니다.(여러가지 이유로…) 그런데, 시간이 벌써 2년이 지났군요!!!


최근에 DRBD 관련 문의주신 분이 있어, DRBD 볼륨을 붙여봅니다.

환경은 이전과 동일합니다. 이전 글을 참고해 주시기 바랍니다.

DRBD는 네트워크를 통한 디스크 미러링이라 생각하면 됩니다. 가령, 서버1의 디스크1, 서버2의 디스크2를 DRBD로 구성한 경우, 서버1의 작업으로 인해 디스크1의 내용이 변경되면 실시간으로 서버2의 디스크2도 변경됩니다.

1. DRBD 설치(양쪽 노드 모두)
공식 레포지토리에는 drbd패키지가 없으므로, elrepo를 등록해준다.

drbd 버전 9.x을 아래와 같이 설치한다.(아래쪽 오류로 나중에 8.4를 재 설치해봤으나, 버전문제는 아니었음)

2. 커널에 DRBD 모듈을 로딩한다.(양쪽 노드 모두)

3. DRBD 설정(양쪽 노드 모두)
DRBD를 사용하기위해 새 디스크를 추가했다.(디스크가 하나인 경우, OS 파티션과 다른 파티션 DRBD가 사용하도록 할 수 있다.)
새로 붙인 디스크를 xfs로 파일시스템을 생성하고, parted -l로 확인 하면 아래와 같다.

* 새 디스크(또는 lv)는 화일시스템이 생성되어 있지 않아야 한다. 화일시스템을 만들어놓으면 Drbd 메타디스크 생성시 아래 오류가 발생한다.
오류내용:

* 아래는 현재 디스크 상태

양쪽 노두 모두에서, /etc/drbd.d/cluster_disk.res 화일을 생성하고, 아래와 같이 작성한다. 여기서 ip주소는 두번째 NIC에 할당된 ip 주소를 이용한다.(서비스ip는 192.x.x.x, 데이타 전송용은 172.x.x.x)

/etc/drbd.d/global_common.conf 에서 네트워크 프로토콜을 설정한다. 프로토콜 부분을 찾아서 아래 내용을 추가한다.

drbd metadisk를 생성한다.(양쪽 노드 모두) 그리고, DRBD 서비스를 실행한다.

메타디스크 생성

서비스 실행

drbd master로 사용할 서버에서(여기서는 wolf1) 아래 명령을 실행한다.

drbd 상태 확인

화일시스템을 생성하고 원하는 위치에 마운트해 본다.

4. DRBD리소스를 클러스터에 추가하기
먼저, 클러스터 상태를 확인해 본다

drbd 리소스를 클러스터에 통합하기 위해서 아래 명령어를 실행한다. push 하기 전까지는 현 디렉토리에 drbd_cfg 파일에 저장된다. cib(Cluster Information Base) 옵션은 cib로부터 raw xml화일을 생성한다.

Drbd Data 리소스를 생성한다.

Drbd Clone 리소스를 생성한다.

이제 작성한 cib를 라이브 CIB로 push한다

pcs status로 확인 했을때 아래 오류 발생. 확인결과 오타로인한 오류가 났으며, resource를 삭제후 다시만들었음

수정후 클러스터 상태 확인

DRBD 파일시스템 리소스를 만든다.

DRBD 리소스의 마운트 포인트를 정의한다. 웹서비스에 사용할것이므로, /var/www/html 에 마운트하도록 설정한다.

리소스가 시작될때의 우선순위를 지정한다.

작성한 cib를 push한다.

여기까지 하고 클러스터 상태를 확인했더니, 아래처럼 DRBD 오류가 보인다.

확인해 보면,

호스트네임 문제로 생각되어 호스트네임을 확인해 보면, /etc/hosts 화일에 VirtualIP를 위한 호스트가 아래처럼 설정되어 있다.

위의 192.168.100.30을 양쪽 노드에서 주석처리하거나 삭제하고 클러스터를 다시 실행해 보면 정상 작동함을 확인 할 수 있다.

양쪽노드에서 drbd 정지후 재 실행.

drbdadm status 명령으로 drbd 정상작동 확인
노드1 이 primary

노드2가 secondary

이제, 클러스터를 정지하고 다시 실행한다.

클러스터 상태확인을 해 본다.

노드1을 정지하고, 노드2에서 서비스 확인(클러스터 상태, VirtualIP, 마운트, 웹서비스확인)을 해 보면 아래와 같다.

node1 중지후 재실행시 서비스가 node1으로 돌아오지 않을때는 constraint 를 조정해본다.
내 경우 최종 constraint는 아래와 같다.

* 기타:
drbd용으로 두번째 NIC을 사용하려 했으나 hostname 문제가 발생해서 클러스터와 같은 NIC을 사용하도록 설정했다.
drbd는 8.4를 사용했다.

* 참고문서
http://fibrevillage.com/sysadmin/304-pcs-command-reference
https://www.learnitguide.net/2016/07/integrate-drbd-with-pacemaker-clusters.html

8 comments

Skip to comment form

    • mani on 2019년 10월 28일 at 6:56 오후
    • Reply

    안녕하세요. 궁금한게 있어 이렇게 글을 쓰게 되었습니다.
    작성자님이 위에 하신것처럼 진행하였는데 한가지만 다르게 하였습니다.
    drbd 리소스의 마운트 포인트를 정의하는부분에서 작성자님은 웬서비스에 등록하신다고 /var/www/html에 마운트하였고 저는 일반 mnt라는 폴더를 만들어 마운트하려고 하였습니다.
    그런데 제대로 되지않고 오류가 발생하네요…(제가 갈아엎어서 오류내용을 적지못한점 죄송합니다.)
    그래서 질문드리는데 혹시 마운트 포인트를 다른 일반 폴더를 지정하면 안되는건지 여쭤보고싶습니다….

    1. 원하는 위치에 마운트하면 됩니다.
      오류는 로그를 봐야 알 수 있는데, 안타깝네요.

        • mani on 2019년 10월 30일 at 7:20 오후
        • Reply

        오류는 해결했습니다…그런데 다른문제가 생겼는데…일단 node1에서 mnt라는 곳에 파일을 만들고 node1을 stop하면 node2에서 자동으로 mount하여 mnt라는곳에 파일이 생길줄 알았는데 생기지 않아 궁금해서 댓글을 적습니다…혹시 설정을 따로 해야되는게 있는지 여쭤보고싶습니다…

        1. drbd가 클러스터 리소스에 등록이 되어 있어야 자동으로 마운트가 됩니다.

            • mani on 2019년 11월 4일 at 6:46 오후

            제가 작성자님께서 하신대로 하여 제대로 마운트된 것을 확인하였고 2~3번 node1을 껏다 켰다하였습니다.
            그리고 껐다가 키고나서 수동으로 리소스 강제 이동하여 node1으로 이동하였습니다.
            그러다 3번째 failed actions이 뜨고 오류내용이 발생하였습니다.
            Failed Actions:
            * DrbdData_demote_0 on node2 ‘unknown error’ (1): call=61, status=Timed Out, exitreason=’none’,
            last-rc-change=’Mon Nov 4 09:35:49 2019′, queued=0ms, exec=90023ms
            이렇게 떴습니다.
            혹시 왜이런지 알수있을까요??

            • snowffox on 2019년 11월 4일 at 10:42 오후
              Author

            적어주신 문제는 hostname 문제로 보이기는 합니다.
            혹시 /etc/hosts 파일에 vip 에도 호스트네임을 설정하셨는지요?

            설정하셨다면 그 부분 주석처리 해 주시면 됩니다.
            x.x.x.x host1
            x.x.x.y host2
            x.x.x.z vip_host –이런 경우 에러 발생함. 주석처리 또는 삭제.

            그런데, 2-3번 성공하셨던거면… 위의 문제는 아닐 수도 있겠네요.

            양쪽에서 모두 drbdadm status로 상태 확인 해 보시고요. 로그를 확인 해봐야 하는데, drbd는 로그를 따로 안남기므로,
            cat /var/log/messages | grep -i drbd 로 관련 로그를 확인해 보아야 할듯 합니다.

    • mani on 2019년 11월 5일 at 1:35 오후
    • Reply

    제가 여러번 다시 해보니 마운트는 되는것으로 확인되는데 failed action에는 오류가 남아있어 crm_resource -P라는 명령어를 사용하여 failed action을 제거하였습니다.
    제가 node1을 종료 하였을 때 자동으로 node2로 넘어는 것은 확인하였는데 node1이 다시 살아났을 경우 제가 명령어를 입력하지 않고 node1으로 다시 넘어가는 것을 할 수 있는지 여쭤 보고 싶습니다.

    1. 덕분에 저도 다시 공부해 보게 되네요.
      얼마전 resource-stickiness에 대해 질문하셨었죠? 이부분에 오류가 있어 답변을 다시 달아놓았습니다. 참고해 주시고요.
      아무튼,
      pcs resource defaults 명령어를 내리면 resource-stickiness 값이 보일겁니다. 값이 0 이면 자동으로 리소스가 노드1 로 되돌아옵니다. 아마도 제가 작성한 문서대로 하셨으면 60 으로 되어 있을텐데요, 제 경우에는 이 값에서도 자동으로 되돌아옵니다.
      pcs resource defaults resource-stickiness=100 으로 변경하니 자동 복구되지 않았습니다.
      관련 문서를 찾아 봐도 정확히 얼마의 숫자가 되어야 원하는 동작을 하는지는 명시되어 있지 않습니다.
      일단 분명한것은 리소스가 장애복구시 원래 노드로 되돌아오도록 하려면 값을 0 으로 조정하면 될겁니다.

댓글 남기기

Your email address will not be published.

%d 블로거가 이것을 좋아합니다: