참고:

Oracle Cloud Infrastructure상에서 Corosync/Pacemaker로 pfSense 고가용성 활성/수동 클러스터 구성

참고: pfSense는 Netgate 또는 Oracle에서 Oracle Cloud Infrastructure에서 공식적으로 지원되지 않습니다. 이 자습서를 시도하기 전에 pfSense 지원 팀에 문의하십시오.

소개

Oracle Cloud Infrastructure(OCI)는 고가용성의 호스트된 환경에서 다양한 애플리케이션을 구축하고 실행할 수 있도록 해주는 보완적인 클라우드 서비스 집합입니다. OCI(Oracle Cloud Infrastructure)는 사용자의 온프레미스 네트워크에서 안전하게 액세스할 수 있는 유연한 오버레이 가상 네트워크에 고성능 컴퓨트 성능(물리적 하드웨어 인스턴스) 및 스토리지 용량을 제공합니다.

pfSense는 통합 위협 관리, 로드 밸런싱, 다중 WAN 등을 지원하는 무료 오픈 소스 방화벽 및 라우터입니다.

목표

OCI의 Corosync/Pacemaker를 사용하여 고가용성 능동/수동 구성으로 pfSense 가상 어플라이언스를 설정합니다.

필요 조건

메모할 포인트

작업 1: Oracle Cloud에 pfSense 가상 어플라이언스 2개 설치

이 사용지침서에서는 고가용성을 위해 2개의 pfSense 가상 어플라이언스를 사용합니다. 요구사항에 따라 여러 노드를 설정할 수 있습니다. 이 자습서의 단계 Oracle Cloud Infrastructure에서 pfSense 설치 및 구성을 따르십시오.

참고:

필요한 패키지 설치

  1. FreeBSD 저장소는 기본적으로 사용 안함으로 설정됩니다. FreeBSD 저장소를 사용으로 설정하려면 다음 단계를 수행합니다.

    1. FreeBSD 설정: { enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. FreeBSD 설정: { enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. FreeBSD 저장소를 사용으로 설정한 후 패키지 관리자를 업데이트합니다.

    Node1@ pkg update
    Node2@ pkg update
    

    : 그러면 패키지 관리자 및 저장소 메타데이터가 업데이트됩니다.

  3. 고가용성 클러스터를 설정하는 데 필요한 다음 4개의 패키지를 설치합니다.

    1. 페이스메이커
    2. 코로싱크
    3. CRMSH
    4. OCI CLI

    설치를 위해 다음 명령을 실행합니다.

    Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    

    프롬프트에 따라 설치를 완료합니다.

작업 3: 인스턴스에 Pacemaker/Corosync 설정

Corosync 구성

  1. 두 인스턴스에서 다음 명령을 실행하여 새 Corosync conf 파일을 생성합니다.

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. 다음 구성을 두 노드의 스크립트에 붙여넣습니다.

    주: 노드 목록에서 IP 주소를 바꿔야 합니다.

    # Please read the corosync.conf.5 manual page
    totem {
       version: 2
       crypto_cipher: none
       crypto_hash: none
       transport: udpu
    }
    logging {
       fileline: off
       to_logfile: yes
       to_syslog: yes
       logfile: /var/log/cluster/corosync.log
       debug: on
       timestamp: on
    logger_subsys {
       subsys: QUORUM
       debug: on
       }
    }
    nodelist {
       node {
           ring0_addr: 192.0.2.2 # make sure to replace with your IP
           nodeid: 1
           }
       node {
           ring0_addr: 192.0.2.5 # make sure to replace with your IP
           nodeid: 2
           }
       }
    quorum {
       # Enable and configure quorum subsystem (default: of
       # see also corosync.conf.5 and votequorum.5
       provider: corosync_votequorum    
    }
    

Corosync 구성

지금 Corosync를 시작하려고 시도하면 "No space left on device" 오류 메시지와 함께 실패합니다.

두 노드에서 RAM 디스크 사용

Corosync 및 Pacemaker는 런타임에 /var 디렉토리를 사용하며, 기본 설치를 수행한 경우 /var에 사용 가능한 공간이 매우 제한됩니다. /var/tmp 디렉토리에 대한 메모리(RAM)를 설정하고 사용해야 합니다. 그러면 성능 향상에 도움이 됩니다.

  1. pfSense 콘솔에서 시스템으로 이동하고 고급을 누른 다음 기타를 누릅니다.

    Ramdisk 메뉴

  2. 아래로 스크롤하여 Ram Disk Settings로 이동하고 Use Ram Disks 확인란을 선택합니다.

  3. /tmp/var 디렉토리에 할당할 RAM 디스크 크기를 입력합니다.

  4. 구성을 저장합니다. RAM 디스크를 처음 사용할 때 재부팅하라는 메시지가 표시됩니다. 나중에 이동 중에도 RAM 디스크 크기를 늘리거나 줄일 수 있습니다.

    Ramdisk 구성

    주: Ram 디스크를 사용 중이므로 시스템 종료의 경우 /tmp/var에 있는 모든 파일이 손실됩니다. Corosync 및 Pacemaker가 제대로 작동하는 데 필요한 디렉토리를 만드는 시작 스크립트(rc.d 파일)를 설정해야 합니다.

  5. /usr/local/etc/rc.d/corosync 파일을 열고 두 노드에서 17행 다음에 다음 행을 코드에 추가합니다.

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. 변경한 후 Jle은 다음과 같이 표시됩니다.

    #!/bin/sh
         # PROVIDE: corosync
         # REQUIRE: LOGIN FILESYSTEMS
         # KEYWORD: shutdown
         . /etc/rc.subr
         name="corosync"
         rcvar="corosync_enable"
         start_precmd="corosync_precmd"
         corosync_precmd()
         {
             if [ `${SYSCTL_N} kern.ipc.maxsockbuf` -lt 18874368 ]; then
                 err 3 "sysctl:kern.ipc.maxsockbuf must be at least 18874
             fi
             mkdir -p /var/lib/corosync
             mkdir -p /var/run/qb
             chmod 777 /var/run/qb
          }
         load_rc_config $name
         : ${corosync_enable:=YES}
         command="/usr/local/sbin/corosync"
         run_rc_command "$1"
    

    Corosync 설정

모든 노드에서 Corosync 및 Pacemaker 서비스 시작

이제 corosync_enable=YESpacemaker_enable=YES/etc/rc.conf 파일에 추가할 수 있습니다. 모든 노드에서 다음 명령을 실행합니다.

Node1@ sysrc corosync_enable=YES
Node2@ sysrc corosync_enable=YES
Node1@ sysrc pacemaker_enable=YES
Node2@ sysrc pacemaker_enable=YES
Node1@ service corosync start
Node2@ service corosync start
Node1@ service pacemaker start
Node2@ service pacemaker start

참고:

클러스터 상태 확인

  1. 이제 모든 노드에서 Pacemaker 및 Corosync가 실행 중이므로 클러스터 상태를 확인해 보겠습니다. 다음 명령을 실행하여 상태를 확인합니다.

    Node1@ crm status
    

    Corosync 상태

  2. 이 자습서에서 Stonith를 다루지 않으므로 지금은 Stonith를 사용 안함으로 설정합니다.

    Node1@ crm configure property stonith-enabled=false
    Node2@ crm configure property stonith-enabled=false
    

    Ramdisk 메뉴

    이미지에서 볼 수 있듯이 상태는 두 개의 노드가 구성되고 온라인 상태임을 나타냅니다.

    참고:

    • 이미지에 표시된 것처럼 두 노드가 모두 구성되고 온라인 상태인 것을 확인할 수 없으면 하나의 인스턴스만 구성되고 온라인 상태임을 나타냅니다. 즉, 노드가 서로 통신할 수 없습니다.
    • 이를 해결하려면 pfSense 및 Oracle Cloud 보안 목록에서 UDP 및 ICMP 트래픽을 허용하는지 확인하십시오.

작업 4: Oracle Cloud Infrastructure CLI 설정

인프라 수준의 노드 간에 가상 부동 IP를 이동하고 연결하려면 OCI CLI가 필요합니다. 이미 이전에 다른 패키지와 함께 OCI CLI를 설치했습니다. 이제 구성을 설정합니다. 인스턴스 주체를 사용하여 CLI 명령에 권한을 부여하려고 합니다. 인스턴스 사용자OCI cli에 대해 더 알아볼 수 있습니다.

블로그에 따라 Oracle Cloud Infrastructure 인스턴스 주체를 설정합니다.

가상 부동 IP 설정

이 자습서에서는 192.0.2.3/29를 가상 유동 IP로 사용합니다. FreeBSD 기반의 pfSense에서는 IPaddr2 하트비트를 설정할 수 없습니다. 어쨌든 시도하면 "IP를 사용할 수 없습니다"라는 오류가 발생합니다. 패키지 IP는 리눅스 전용입니다. 대신 IPaddr 히트비트를 설정합니다.

  1. 파일 편집기에서 /usr/local/lib/ocf/resource.d/heartbeat/IPaddr를 엽니다.

  2. OCI CLI가 한 vNIC에서 다른 vNIC로 IP를 이동하기 시작하는 몇 개의 코드 행을 추가합니다. 스크립트의 add_interface() 메소드에서 584행 뒤에 다음 코드 행을 추가합니다.

  3. 스크립트에서 node1vnic, node2vnic, vnicip 및 호스트 이름 값을 지정합니다. vNIC OCID는 Oracle Cloud 콘솔, 컴퓨트, 연결된 vNICs 메뉴에서 찾을 수 있습니다.

    else
    ##### OCI vNIC variables
        server="`hostname -s`"
        node1vnic="<node1vnic>"
        node2vnic="<node2vnic>"
        vnicip="<floating_IP>"
        export LC_ALL=C.UTF-8
        export LANG=C.UTF-8
        touch /tmp/ip_switch_error.log
    ##### OCI/IPaddr Integration
        if [ $server = "<host_name>" ]; then
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node1vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        else
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node2vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        fi
    
    

    하트비트 구성

  4. 노드 1: Oracle Cloud 콘솔에서 컴퓨트로 이동한 다음 pfSense-primary를 누르고 연결된 vNIC를 누릅니다. 기본 vNIC를 선택하고 보조 전용 IP를 추가합니다(위 스크립트의 floating_IP와 동일).

    Vnic 새 IP 추가

  5. 두 노드의 경우: pfSense 콘솔에서 firewall로 이동한 다음 가상 IP를 누르고 IP 별칭(위 스크립트에서 floating_IP과 동일)을 추가합니다.

    pfSense 가상 IP

하트비트 설정

  1. pfSense 셸에서 노드 1에 대해 다음 명령을 실행합니다.

    crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3  cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
    
  2. 이 자습서에서는 192.0.2.3가 유동 IP입니다. ip, 넷마스크 및 nic 값을 값으로 바꿔야 합니다. Pacemaker에서 IP 리소스를 만들어야 합니다.

    pacemaker 상태

지금 crm status를 실행하면 두 개의 노드가 온라인 상태이고 한 개의 리소스가 pfSense-primary를 가리키고 있습니다. ipconfig vtnet0를 실행하여 가상 IP가 기본 노드의 인터페이스와 연관되었는지 확인할 수도 있습니다.

페일오버 테스트

현재 상태

다음 이전 페일오버 테스트

  1. 다음 명령을 실행하여 강제로 전환합니다.

    crm resource move IP pfSense-secondary.example.com  
    
  2. crm status 명령을 실행하면 유동 IP 리소스가 pfSense-secondary로 이동됩니다.

  3. Oracle Cloud 콘솔 vNIC에서 노드를 확인하면 유동 IP가 두 번째 노드로 이동한 것을 확인할 수 있습니다.

    다음 이후 페일오버 테스트

    참고: 지금 종료하려고 시도하면 마스터를 지정하기 위해 pfSense에 50% 이상의 투표가 필요하기 때문에 마스터로 간주할 노드를 파악할 수 없으므로 리소스가 중지 상태로 이동합니다. 2개의 노드만 있고 그 중 하나가 작동 중지되었기 때문에 Pacemaker는 하나를 마스터로 설정할 수 없습니다.

  4. 다음 명령을 실행하여 50% 투표 정책을 무시합니다.

    crm configure property no-quorum-policy=ignore
    
  5. 이제 종료를 테스트하면 유동 IP 이동이 표시됩니다.

작업 5: XLMRPC 및 pfsync 설정

고가용성 클러스터를 원할 경우 노드가 동기화됨 상태가 되기를 원합니다. IP를 이동하는 것만으로는 동기화되지 않습니다. 동기화를 위해 각 인스턴스에 다른 vNIC 세트를 설정해야 합니다.

Sync 인터페이스 설정

  1. 양쪽 노드의 경우 컴퓨트로 이동하여 인스턴스를 선택하고 연결된 vNIC를 연 후 vnic 생성을 누릅니다.

    보조 vnic 생성

  2. vNIC가 만들어지고 연결되면 pfSense console으로 이동하여 interfaces를 누른 다음 Assignments(지정)를 누르고 새로 감지된 인터페이스를 추가합니다.

    pfSense 인터페이스

  3. 새로 지정된 인터페이스를 누르고 해당 구성을 설정합니다.

  4. OCI 콘솔의 이전 단계에서 생성한 정적 IPv4 주소 및 서브넷 마스크를 할당합니다.

    pfSense 동기화 인터페이스

  5. 저장을 누르고 변경사항을 적용합니다.

기본 노드에서 고가용성 설정

  1. pfSense console으로 이동하여 System을 누른 후 High Availability Sync를 누릅니다.
  2. pfsync state sync를 사용으로 설정합니다.
  3. 동기화 인터페이스를 선택합니다.
  4. 보조 노드 IP를 추가합니다.
  5. XMLRPC 동기화 구성: 보조 노드 IP를 추가합니다.
  6. 사용자 이름과 암호를 설정하고 동기화할 항목을 모두 확인합니다. pfSense HA 동기화 구성
  7. 저장 및 적용을 누릅니다.

보조 노드에서 고가용성(High Availability) 설정

  1. pfSense 콘솔로 이동하고 시스템, 고가용성 동기화를 차례로 누릅니다.
  2. pfsync state sync를 사용으로 설정합니다.
  3. 동기화 인터페이스를 선택합니다.
  4. 기본 노드 IP를 추가합니다.
  5. 저장 및 적용을 누릅니다.

방화벽 상태는 두 노드 간에 동기화되며 기본 인스턴스에 방화벽 규칙을 추가하려고 하면 보조 노드에도 동일한 상태가 나타납니다. 이제 시스템 종료로 페일오버를 다시 테스트할 수 있습니다.

감사의 글

작성자 - Mayank Kakani(OCI Cloud Architect)

추가 학습 자원

docs.oracle.com/learn의 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 전환할 수 있습니다.

제품 설명서는 Oracle Help Center를 참조하십시오.