SUSE Linux Enterprise Server의 Azure VM에 있는 NFS의 고가용성

참고

Azure 자사 NFS 서비스 중 하나인 NFS on Azure Files 또는 NFS ANF 볼륨 중 하나를 배포하여 고가용성 SAP 시스템에 공유 데이터를 저장하는 것이 좋습니다. NFS 클러스터를 활용하여 SAP 참조 아키텍처를 강조하지 않습니다.

이 문서에서는 가상 머신을 배포하고, 가상 머신을 구성하고, 클러스터 프레임워크를 설치하고, 가용성이 높은 SAP 시스템의 공유 데이터를 저장하는 데 사용할 수 있는 고가용성 NFS 서버를 설치하는 방법을 설명합니다. 이 가이드에서는 NW1 및 NW2라는 두 개의 SAP 시스템에 사용되는 고가용성 NFS 서버를 설정하는 방법에 대해 설명합니다. 예제에 포함된 리소스(예: 가상 머신, 가상 네트워크) 이름은 SAP 파일 서버 템플릿을 리소스 접두사인 prod와 함께 사용한 것으로 가정합니다.

참고

이 문서에는 Microsoft에서 더 이상 사용하지 않는 용어인 종속마스터 용어에 대한 참조가 포함되어 있습니다. 용어가 소프트웨어에서 제거되면 이 문서에서 제거하겠습니다.

먼저 다음 SAP 참고와 문서 읽기

개요

SAP NetWeaver의 가용성을 높이려면 NFS 서버가 필요합니다. NFS 서버는 별도의 클러스터에서 구성되며, 여러 SAP 시스템에서 사용할 수 있습니다.

SAP NetWeaver 고가용성 개요

이 NFS 서버를 사용하는 모든 SAP 시스템에 대해 전용 가상 호스트 이름과 가상 IP 주소가 사용됩니다. Azure에서는 가상 IP 주소를 사용하려면 부하 분산 장치가 필요합니다. 제시된 구성은 다음이 포함된 부하 분산 장치를 보여 줍니다.

  • NW1용 프런트 엔드 IP 주소 10.0.0.4
  • NW2용 프런트 엔드 IP 주소 10.0.0.5
  • NW1용 프로브 포트 61000
  • NW2용 프로브 포트 61001

고가용성 NFS 서버 설정

GitHub의 Azure 템플릿을 사용하여 필요한 Azure 리소스(가상 머신, 가용성 집합 및 부하 분산 장치 등)를 모두 배포하거나 수동으로 리소스를 배포할 수 있습니다.

Azure 템플릿을 통해 Linux 배포

Azure Marketplace에는 새 가상 머신을 배포하는 데 사용할 수 있는 SAP Applications 12용 SUSE Linux Enterprise Server의 이미지가 포함되어 있습니다. GitHub에서 빠른 시작 템플릿 중 하나를 사용하여 필요한 모든 리소스를 배포할 수 있습니다. 템플릿은 가상 머신, 부하 분산 장치, 가용성 집합 등을 배포합니다. 다음 단계에 따라 템플릿을 배포합니다.

  1. Azure Portal에서 SAP 파일 서버 템플릿을 엽니다.
  2. 다음 매개 변수를 입력합니다.
    1. 리소스 접두사 -
      사용할 접두사를 입력합니다. 이 값은 배포되는 리소스의 접두사로 사용됩니다.
    2. SAP 시스템 수 -
      이 파일 서버를 사용할 SAP 시스템 수를 입력합니다. 이렇게 하면 프런트 엔드 구성, 부하 분산 규칙, 프로브 포트, 디스크 등이 필요한 만큼 배포됩니다.
    3. OS 종류 -
      Linux 배포판 중 하나를 선택합니다. 이 예제에서는 SLES 12를 선택합니다.
    4. 관리자 사용자 이름 및 관리자 암호 -
      컴퓨터에 로그온하는 데 사용할 수 있게 만들어진 새 사용자입니다.
    5. 서브넷 ID
      서브넷이 VM을 할당하도록 정의된 기존 VNet에 VM을 배포하려는 경우 해당 서브넷의 ID 이름을 지정합니다. ID는 대개 /subscriptions/ <구독 ID> /resourceGroups/ <리소스 그룹 이름> /providers/Microsoft.Network/virtualNetworks/ <가상 네트워크 이름> /subnets/ <서브넷 이름> 과 같은 형식입니다.

Azure Portal을 통해 Linux를 수동으로 배포

먼저 NFS 클러스터에 대한 가상 머신을 만들어야 합니다. 그런 다음, 부하 분산 장치를 만들고 백 엔드 풀의 가상 머신을 사용합니다.

  1. 리소스 그룹 만들기
  2. Virtual Network 만들기
  3. 가용성 집합 만들기
    최대 업데이트 도메인 설정
  4. Virtual Machine 1 만들기 SLES4SAP 12 SP3 이상 사용, 이 예제에서는 SAP 애플리케이션 12 SP3용 SLES4SAP 12 SP3 BYOS 이미지 SLES(BYOS)가 사용됨
    이전에 만든 가용성 집합 선택
  5. Virtual Machine 2 만들기 SLES4SAP 12 SP3 이상 사용, 이 예제에서는 SLES4SAP 12 SP3 BYOS 이미지 사용
    SAP 애플리케이션 12 SP3용 SLES(BYOS)가 사용됨
    이전에 만든 가용성 집합 선택
  6. 두 가상 머신의 각 SAP 시스템에 하나의 데이터 디스크를 추가합니다.
  7. Load Balancer(내부)를 만듭니다. 표준 Load Balancer를 만드는 것이 좋습니다.
    1. 다음 지침에 따라 표준 Load Balancer를 만듭니다.
      1. 프런트 엔드 IP 주소 만들기
        1. NW1의 경우 IP 주소 10.0.0.4
          1. 부하 분산 장치 열기, 프런트 엔드 IP 풀 선택 및 추가 클릭
          2. 새 프런트 엔드 IP 풀의 이름 입력(예: nw1-frontend)
          3. 할당을 정적으로 설정하고 IP 주소 입력(예: 10.0.0.4)
          4. 확인을 클릭합니다.
        2. NW2의 경우 IP 주소 10.0.0.5
          • NW2에 대해 위 단계를 반복
      2. 단일 백 엔드 풀을 만듭니다.
        1. 부하 분산 장치를 열고 백 엔드 풀을 선택한 다음 추가를 선택합니다.
        2. 새 백 엔드 풀의 이름(예: nw-backend)을 입력합니다.
        3. 백 엔드 풀 구성에 대해 NIC 를 선택합니다.
        4. 가상 머신 추가를 선택합니다.
        5. 클러스터의 가상 머신을 선택합니다.
        6. 추가를 선택합니다.
        7. 저장을 선택합니다.
      3. 상태 프로브 만들기
        1. NW1의 경우 포트 61000
          1. 부하 분산 장치를 열고 상태 프로브를 선택한 다음 추가 클릭
          2. 새 상태 프로브의 이름 입력(예: nw1-hp)
          3. 프로토콜로 TCP를 선택하고 포트 61000을 선택하고 간격 5를 유지합니다.
          4. 확인을 클릭합니다.
        2. NW2의 경우 포트 61001
          • 위의 단계를 반복하여 NW2용 상태 프로브 만들기
      4. 부하 분산 규칙
        1. 부하 분산 장치를 열고, 부하 분산 규칙을 설정하고, 추가를 클릭합니다.
        2. 새 부하 분산 장치 규칙의 이름 입력(예: nw1-lb)
        3. 이전에 만든 프런트 엔드 IP 주소, 백 엔드 풀 및 상태 프로브 선택(예: nw1-frontend, nw-backendnw1-hp)
        4. 유휴 상태 시간 제한을 30분으로 증가
        5. HA 포트를 선택합니다.
        6. 부동 IP를 사용하도록 설정
        7. 확인 클릭
        • 위의 단계를 반복하여 NW2에 대한 부하 분산 규칙 만들기

중요

부동 IP는 부하 분산 시나리오의 NIC 보조 IP 구성에서 지원되지 않습니다. 자세한 내용은 Azure Load Balancer 제한 사항을 참조하세요. VM에 대한 추가 IP 주소가 필요한 경우 두 번째 NIC를 배포합니다.

참고

공용 IP 주소가 없는 VM이 내부(공용 IP 주소 없음) 표준 Azure 부하 분산 장치의 백 엔드 풀에 배치되는 경우 퍼블릭 엔드포인트로 라우팅을 허용하기 위해 추가 구성을 수행하지 않는 한 아웃바운드 인터넷 연결이 없습니다. 아웃바운드 연결을 설정하는 방법에 대한 자세한 내용은 SAP 고가용성 시나리오에서 Azure 표준 Load Balancer를 사용하는 Virtual Machines에 대한 퍼블릭 엔드포인트 연결을 참조하세요.

중요

Azure Load Balancer 뒤에 배치되는 Azure VM에서 TCP 타임스탬프를 사용하도록 설정하면 안 됩니다. TCP 타임스탬프를 사용하도록 설정하면 상태 프로브에 오류가 발생합니다. 매개 변수 net.ipv4.tcp_timestamps0으로 설정합니다. 자세한 내용은 Load Balancer 상태 프로브를 참조하세요.

Pacemaker 클러스터 만들기

이 NFS 서버에 대한 기본 Pacemaker 클러스터를 만들려면 Azure의 SUSE Linux Enterprise Server에서 Pacemaker 설정 단계를 따르세요.

NFS 서버 구성

다음 항목에는 접두사 [A] (모든 노드에 적용됨), [1] (노드 1에만 적용됨), [2] (노드 2에만 적용됨) 접두사가 표시되어 있습니다.

  1. [A] 호스트 이름 확인 설정

    DNS 서버를 사용하거나 모든 노드의 /etc/hosts를 수정할 수 있습니다. 이 예에서는 /etc/hosts 파일 사용 방법을 보여줍니다. 다음 명령에서 IP 주소와 호스트 이름 바꾸기

    sudo vi /etc/hosts
    

    다음 줄을 /etc/hosts에 삽입합니다. 환경에 맞게 IP 주소와 호스트 이름 변경

    # IP address of the load balancer frontend configuration for NFS
    10.0.0.4 nw1-nfs
    10.0.0.5 nw2-nfs
    
  2. [A] NFS 서버를 사용하도록 설정

    루트 NFS 내보내기 항목 만들기

    sudo sh -c 'echo /srv/nfs/ *\(rw,no_root_squash,fsid=0\)>/etc/exports'
    
    sudo mkdir /srv/nfs/
    
  3. [A] drbd 구성 요소 설치

    sudo zypper install drbd drbd-kmp-default drbd-utils
    
  4. [A] drbd 디바이스용 파티션 만들기

    사용 가능한 데이터 디스크 모두 나열

    sudo ls /dev/disk/azure/scsi1/
    

    예제 출력

    lun0  lun1
    

    모든 데이터 디스크에 대한 파티션 만들기

    sudo sh -c 'echo -e "n\n\n\n\n\nw\n" | fdisk /dev/disk/azure/scsi1/lun0'
    sudo sh -c 'echo -e "n\n\n\n\n\nw\n" | fdisk /dev/disk/azure/scsi1/lun1'
    
  5. [A] LVM 구성 만들기

    사용 가능한 파티션 모두 나열

    ls /dev/disk/azure/scsi1/lun*-part*
    

    예제 출력

    /dev/disk/azure/scsi1/lun0-part1  /dev/disk/azure/scsi1/lun1-part1
    

    모든 파티션에 대해 LVM 볼륨 만들기

    sudo pvcreate /dev/disk/azure/scsi1/lun0-part1  
    sudo vgcreate vg-NW1-NFS /dev/disk/azure/scsi1/lun0-part1
    sudo lvcreate -l 100%FREE -n NW1 vg-NW1-NFS
    
    sudo pvcreate /dev/disk/azure/scsi1/lun1-part1
    sudo vgcreate vg-NW2-NFS /dev/disk/azure/scsi1/lun1-part1
    sudo lvcreate -l 100%FREE -n NW2 vg-NW2-NFS
    
  6. [A] drbd 구성

    sudo vi /etc/drbd.conf
    

    drbd.conf 파일에 다음 두 줄이 포함되어 있는지 확인

    include "drbd.d/global_common.conf";
    include "drbd.d/*.res";
    

    전역 drbd 구성 변경

    sudo vi /etc/drbd.d/global_common.conf
    

    handler 및 net 섹션에 다음 항목 추가

    global {
         usage-count no;
    }
    common {
         handlers {
              fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh";
              after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh";
              split-brain "/usr/lib/drbd/notify-split-brain.sh root";
              pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
         }
         startup {
              wfc-timeout 0;
         }
         options {
         }
         disk {
              md-flushes yes;
              disk-flushes yes;
              c-plan-ahead 1;
              c-min-rate 100M;
              c-fill-target 20M;
              c-max-rate 4G;
         }
         net {
              after-sb-0pri discard-younger-primary;
              after-sb-1pri discard-secondary;
              after-sb-2pri call-pri-lost-after-sb;
              protocol     C;
              tcp-cork yes;
              max-buffers 20000;
              max-epoch-size 20000;
              sndbuf-size 0;
              rcvbuf-size 0;
         }
    }
    
  7. [A] NFS drbd 디바이스 만들기

    sudo vi /etc/drbd.d/NW1-nfs.res
    

    새 drbd 디바이스용 구성을 삽입하고 명령을 종료합니다.

    resource NW1-nfs {
         protocol     C;
         disk {
              on-io-error       detach;
         }
         net {
             fencing  resource-and-stonith;  
         }
         on prod-nfs-0 {
              address   10.0.0.6:7790;
              device    /dev/drbd0;
              disk      /dev/vg-NW1-NFS/NW1;
              meta-disk internal;
         }
         on prod-nfs-1 {
              address   10.0.0.7:7790;
              device    /dev/drbd0;
              disk      /dev/vg-NW1-NFS/NW1;
              meta-disk internal;
         }
    }
    
    sudo vi /etc/drbd.d/NW2-nfs.res
    

    새 drbd 디바이스용 구성을 삽입하고 명령을 종료합니다.

    resource NW2-nfs {
         protocol     C;
         disk {
              on-io-error       detach;
         }
         net {
             fencing  resource-and-stonith;  
         }
         on prod-nfs-0 {
              address   10.0.0.6:7791;
              device    /dev/drbd1;
              disk      /dev/vg-NW2-NFS/NW2;
              meta-disk internal;
         }
         on prod-nfs-1 {
              address   10.0.0.7:7791;
              device    /dev/drbd1;
              disk      /dev/vg-NW2-NFS/NW2;
              meta-disk internal;
         }
    }
    

    drbd 디바이스를 만들어 시작합니다.

    sudo drbdadm create-md NW1-nfs
    sudo drbdadm create-md NW2-nfs
    sudo drbdadm up NW1-nfs
    sudo drbdadm up NW2-nfs
    
  8. [1] 초기 동기화 건너뛰기

    sudo drbdadm new-current-uuid --clear-bitmap NW1-nfs
    sudo drbdadm new-current-uuid --clear-bitmap NW2-nfs
    
  9. [1] 주 노드 설정

    sudo drbdadm primary --force NW1-nfs
    sudo drbdadm primary --force NW2-nfs
    
  10. [1] 새 drbd 디바이스가 동기화될 때까지 대기

    sudo drbdsetup wait-sync-resource NW1-nfs
    sudo drbdsetup wait-sync-resource NW2-nfs
    
  11. [1] drbd 디바이스에서 파일 시스템 만들기

    sudo mkfs.xfs /dev/drbd0
    sudo mkdir /srv/nfs/NW1
    sudo chattr +i /srv/nfs/NW1
    sudo mount -t xfs /dev/drbd0 /srv/nfs/NW1
    sudo mkdir /srv/nfs/NW1/sidsys
    sudo mkdir /srv/nfs/NW1/sapmntsid
    sudo mkdir /srv/nfs/NW1/trans
    sudo mkdir /srv/nfs/NW1/ASCS
    sudo mkdir /srv/nfs/NW1/ASCSERS
    sudo mkdir /srv/nfs/NW1/SCS
    sudo mkdir /srv/nfs/NW1/SCSERS
    sudo umount /srv/nfs/NW1
    
    sudo mkfs.xfs /dev/drbd1
    sudo mkdir /srv/nfs/NW2
    sudo chattr +i /srv/nfs/NW2
    sudo mount -t xfs /dev/drbd1 /srv/nfs/NW2
    sudo mkdir /srv/nfs/NW2/sidsys
    sudo mkdir /srv/nfs/NW2/sapmntsid
    sudo mkdir /srv/nfs/NW2/trans
    sudo mkdir /srv/nfs/NW2/ASCS
    sudo mkdir /srv/nfs/NW2/ASCSERS
    sudo mkdir /srv/nfs/NW2/SCS
    sudo mkdir /srv/nfs/NW2/SCSERS
    sudo umount /srv/nfs/NW2
    
  12. [A] drbd 분할 브레인(split-brain) 검색 설정

    drbd를 사용하여 한 호스트에서 다른 호스트로 데이터를 동기화 할 때 소위 분할 브레인(split-brain)이 발생할 수 있습니다. 분할 브레인은 두 클러스터 노드가 drbd 디바이스를 기본 디바이스로 승격시키고 동기화되지 않은 시나리오입니다. 드문 상황이지만 분할 브레인을 최대한 빨리 처리하고 해결해야 합니다. 따라서 분할 브레인(split-brain)이 발생하면 알림을 받는 것이 중요합니다.

    분할 브레인(split-brain) 알림을 설정하는 방법은 공식 drbd 설명서를 참조하세요.

    분할 브레인(split-brain) 시나리오에서 자동으로 복구할 수도 있습니다. 자세한 내용은 분할 브레인(split-brain) 자동 복구 정책을 참조하세요.

클러스터 프레임워크 구성

  1. [1] 클러스터 구성에 SAP 시스템 NW1용 NFS drbd 디바이스 추가

    중요

    최근 테스트 결과, 백로그와 하나의 연결만 처리하는 제한으로 인해 netcat이 요청에 응답하지 않는 것으로 확인되었습니다. netcat 리소스가 Azure Load Balancer 요청 수신을 중지하고 부동 IP를 사용할 수 없게 됩니다.
    기존 Pacemaker 클러스터의 경우 netcat을 socat으로 교체할 것을 권장했습니다. 현재는 다음 패키지 버전 요구 사항과 함께 패키지 리소스 에이전트의 일부인 azure-lb 리소스 에이전트를 사용할 것을 권장합니다.

    • SLES 12 SP4/SP5의 경우 버전은 resource-agents-4.3.018.a7fb5035-3.30.1 이상이어야 합니다.
    • SLES 15/15 SP1의 경우 버전은 resource-agents-4.3.0184.6ee15eb2-4.13.1 이상이어야 합니다.

    변경 내용 적용을 위해 잠시의 가동 중지 시간이 필요합니다.
    기존 Pacemaker 클러스터의 경우 Azure Load-Balancer 감지 강화의 설명에 따라 socat을 사용하도록 구성을 이미 변경한 경우 즉시 azure-lb 리소스 에이전트로 전환할 필요가 없습니다.

    sudo crm configure rsc_defaults resource-stickiness="200"
    
    # Enable maintenance mode
    sudo crm configure property maintenance-mode=true
    
    sudo crm configure primitive drbd_NW1_nfs \
      ocf:linbit:drbd \
      params drbd_resource="NW1-nfs" \
      op monitor interval="15" role="Master" \
      op monitor interval="30" role="Slave"
    
    sudo crm configure ms ms-drbd_NW1_nfs drbd_NW1_nfs \
      meta master-max="1" master-node-max="1" clone-max="2" \
      clone-node-max="1" notify="true" interleave="true"
    
    sudo crm configure primitive fs_NW1_sapmnt \
      ocf:heartbeat:Filesystem \
      params device=/dev/drbd0 \
      directory=/srv/nfs/NW1  \
      fstype=xfs \
      op monitor interval="10s"
    
    sudo crm configure primitive nfsserver systemd:nfs-server \
      op monitor interval="30s"
    sudo crm configure clone cl-nfsserver nfsserver
    
    sudo crm configure primitive exportfs_NW1 \
      ocf:heartbeat:exportfs \
      params directory="/srv/nfs/NW1" \
      options="rw,no_root_squash,crossmnt" clientspec="*" fsid=1 wait_for_leasetime_on_stop=true op monitor interval="30s"
    
    sudo crm configure primitive vip_NW1_nfs IPaddr2 \
      params ip=10.0.0.4 op monitor interval=10 timeout=20
    
    sudo crm configure primitive nc_NW1_nfs azure-lb port=61000 \
      op monitor timeout=20s interval=10
    
    sudo crm configure group g-NW1_nfs \
      fs_NW1_sapmnt exportfs_NW1 nc_NW1_nfs vip_NW1_nfs
    
    sudo crm configure order o-NW1_drbd_before_nfs inf: \
      ms-drbd_NW1_nfs:promote g-NW1_nfs:start
    
    sudo crm configure colocation col-NW1_nfs_on_drbd inf: \
      g-NW1_nfs ms-drbd_NW1_nfs:Master
    
  2. [1] 클러스터 구성에 SAP 시스템 NW2용 NFS drbd 디바이스 추가

    # Enable maintenance mode
    sudo crm configure property maintenance-mode=true
    
    sudo crm configure primitive drbd_NW2_nfs \
      ocf:linbit:drbd \
      params drbd_resource="NW2-nfs" \
      op monitor interval="15" role="Master" \
      op monitor interval="30" role="Slave"
    
    sudo crm configure ms ms-drbd_NW2_nfs drbd_NW2_nfs \
      meta master-max="1" master-node-max="1" clone-max="2" \
      clone-node-max="1" notify="true" interleave="true"
    
    sudo crm configure primitive fs_NW2_sapmnt \
      ocf:heartbeat:Filesystem \
      params device=/dev/drbd1 \
      directory=/srv/nfs/NW2  \
      fstype=xfs \
      op monitor interval="10s"
    
    sudo crm configure primitive exportfs_NW2 \
      ocf:heartbeat:exportfs \
      params directory="/srv/nfs/NW2" \
      options="rw,no_root_squash,crossmnt" clientspec="*" fsid=2 wait_for_leasetime_on_stop=true op monitor interval="30s"
    
    sudo crm configure primitive vip_NW2_nfs IPaddr2 \
      params ip=10.0.0.5 op monitor interval=10 timeout=20
    
    sudo crm configure primitive nc_NW2_nfs azure-lb port=61001 \
      op monitor timeout=20s interval=10
    
    sudo crm configure group g-NW2_nfs \
      fs_NW2_sapmnt exportfs_NW2 nc_NW2_nfs vip_NW2_nfs
    
    sudo crm configure order o-NW2_drbd_before_nfs inf: \
      ms-drbd_NW2_nfs:promote g-NW2_nfs:start
    
    sudo crm configure colocation col-NW2_nfs_on_drbd inf: \
      g-NW2_nfs ms-drbd_NW2_nfs:Master
    

    exportfs 클러스터 리소스의 crossmnt 옵션은 이전 SLES 버전과의 호환성을 위해 설명서에 나와 있습니다.

  3. [1] 유지 관리 모드 사용 중지

    sudo crm configure property maintenance-mode=false
    

다음 단계