참고:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 마치면 이 값을 클라우드 환경에 고유한 값으로 대체하십시오.
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 가상 어플라이언스를 설정합니다.
필요 조건
- Oracle Cloud 테넌시에 액세스
- 테넌시의 가상 클라우드 네트워크 설정
- Oracle Object Storage, 가상 클라우드 네트워크, 컴퓨트 및 사용자정의 이미지에 대한 모든 필수 정책 설정입니다.
메모할 포인트
- 이 사용지침서에서는 지역별 가상 클라우드 네트워크 설정 중 하나에 두 개의 서브넷이 포함됩니다. 하나는 공용(public)이고 다른 하나는 CIDR이 192.0.2.0/29 및 192.0.2.8/29인 전용(private)입니다.
- 기본 인스턴스 - Node1, 보조 인스턴스 - Node2
- Node1 hostname - "pfSense-primary" 및 IP: 192.0.2.2/29
- Node2 hostname - "pfSense-secondary" 및 IP: 192.0.2.5/29
- pfSense 콘솔, 진단, 파일 편집에 있는 pfSense 파일 편집 도구를 사용하여 파일을 변경할 수 있습니다.
- pfSense 셸이라는 용어는 이 자습서에서 사용되며, 인스턴스에 ssh를 추가하고 pfSense 메뉴에서 8을 선택하여 셸에 액세스할 수 있습니다.
작업 1: Oracle Cloud에 pfSense 가상 어플라이언스 2개 설치
이 사용지침서에서는 고가용성을 위해 2개의 pfSense 가상 어플라이언스를 사용합니다. 요구사항에 따라 여러 노드를 설정할 수 있습니다. 이 자습서의 단계 Oracle Cloud Infrastructure에서 pfSense 설치 및 구성을 따르십시오.
참고:
- 두 노드는 서로 다른 가용성 도메인에 설정되어 있어야 하며 서로 ping할 수 있어야 합니다.
- 이러한 노드를 서로 다른 가상 클라우드 네트워크 또는 영역에 설정할 수 있지만 노드 간에 액세스할 수 있도록 적절한 피어링 게이트웨이 및 경로 테이블이 정의되어 있는지 확인하십시오.
- 서로의 노드를 핑할 수 없는 경우 인스턴스와 연관된 Oracle Cloud 보안 목록과 pfSense 방화벽 규칙을 확인하고 ICMP 트래픽을 허용하십시오.
필요한 패키지 설치
-
FreeBSD 저장소는 기본적으로 사용 안함으로 설정됩니다. FreeBSD 저장소를 사용으로 설정하려면 다음 단계를 수행합니다.
- FreeBSD 설정:
{ enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
- FreeBSD 설정:
{ enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
- FreeBSD 설정:
-
FreeBSD 저장소를 사용으로 설정한 후 패키지 관리자를 업데이트합니다.
Node1@ pkg update Node2@ pkg update
주: 그러면 패키지 관리자 및 저장소 메타데이터가 업데이트됩니다.
-
고가용성 클러스터를 설정하는 데 필요한 다음 4개의 패키지를 설치합니다.
- 페이스메이커
- 코로싱크
- CRMSH
- OCI CLI
설치를 위해 다음 명령을 실행합니다.
Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
프롬프트에 따라 설치를 완료합니다.
작업 3: 인스턴스에 Pacemaker/Corosync 설정
Corosync 구성
-
두 인스턴스에서 다음 명령을 실행하여 새 Corosync conf 파일을 생성합니다.
Node1@ touch /usr/local/etc/corosync/corosync.conf Node2@ touch /usr/local/etc/corosync/corosync.conf
-
다음 구성을 두 노드의 스크립트에 붙여넣습니다.
주: 노드 목록에서 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를 시작하려고 시도하면 "No space left on device" 오류 메시지와 함께 실패합니다.
두 노드에서 RAM 디스크 사용
Corosync 및 Pacemaker는 런타임에 /var
디렉토리를 사용하며, 기본 설치를 수행한 경우 /var
에 사용 가능한 공간이 매우 제한됩니다. /var
및 /tmp
디렉토리에 대한 메모리(RAM)를 설정하고 사용해야 합니다. 그러면 성능 향상에 도움이 됩니다.
-
pfSense 콘솔에서 시스템으로 이동하고 고급을 누른 다음 기타를 누릅니다.
-
아래로 스크롤하여 Ram Disk Settings로 이동하고 Use Ram Disks 확인란을 선택합니다.
-
/tmp
및/var
디렉토리에 할당할 RAM 디스크 크기를 입력합니다. -
구성을 저장합니다. RAM 디스크를 처음 사용할 때 재부팅하라는 메시지가 표시됩니다. 나중에 이동 중에도 RAM 디스크 크기를 늘리거나 줄일 수 있습니다.
주: Ram 디스크를 사용 중이므로 시스템 종료의 경우
/tmp
및/var
에 있는 모든 파일이 손실됩니다. Corosync 및 Pacemaker가 제대로 작동하는 데 필요한 디렉토리를 만드는 시작 스크립트(rc.d 파일)를 설정해야 합니다. -
/usr/local/etc/rc.d/corosync
파일을 열고 두 노드에서 17행 다음에 다음 행을 코드에 추가합니다.mkdir -p /var/lib/corosync mkdir -p /var/run/qb chmod 777 /var/run/qb
-
변경한 후 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 및 Pacemaker 서비스 시작
이제 corosync_enable=YES
및 pacemaker_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
참고:
- Pacemaker를 시작하는 데 몇 초 정도 걸립니다.
- Corosync: E
RROR: sysctl:kern.ipc.maxsockbuf must be at least 18874368
를 시작하려고 할 때 오류 메시지가 표시되면 pfSense console으로 이동하여 System을 누른 다음 Advanced를 누르고 System Tunables를 누른 다음 모든 노드에서sysctl:kern.ipc.maxsockbuf
에 대한 값을 업데이트합니다.
클러스터 상태 확인
-
이제 모든 노드에서 Pacemaker 및 Corosync가 실행 중이므로 클러스터 상태를 확인해 보겠습니다. 다음 명령을 실행하여 상태를 확인합니다.
Node1@ crm status
-
이 자습서에서 Stonith를 다루지 않으므로 지금은 Stonith를 사용 안함으로 설정합니다.
Node1@ crm configure property stonith-enabled=false Node2@ crm configure property stonith-enabled=false
이미지에서 볼 수 있듯이 상태는 두 개의 노드가 구성되고 온라인 상태임을 나타냅니다.
참고:
- 이미지에 표시된 것처럼 두 노드가 모두 구성되고 온라인 상태인 것을 확인할 수 없으면 하나의 인스턴스만 구성되고 온라인 상태임을 나타냅니다. 즉, 노드가 서로 통신할 수 없습니다.
- 이를 해결하려면 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 히트비트를 설정합니다.
-
파일 편집기에서
/usr/local/lib/ocf/resource.d/heartbeat/IPaddr
를 엽니다. -
OCI CLI가 한 vNIC에서 다른 vNIC로 IP를 이동하기 시작하는 몇 개의 코드 행을 추가합니다. 스크립트의 add_interface() 메소드에서 584행 뒤에 다음 코드 행을 추가합니다.
-
스크립트에서 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
-
노드 1: Oracle Cloud 콘솔에서 컴퓨트로 이동한 다음 pfSense-primary를 누르고 연결된 vNIC를 누릅니다. 기본 vNIC를 선택하고 보조 전용 IP를 추가합니다(위 스크립트의 floating_IP와 동일).
-
두 노드의 경우: pfSense 콘솔에서 firewall로 이동한 다음 가상 IP를 누르고 IP 별칭(위 스크립트에서 floating_IP과 동일)을 추가합니다.
하트비트 설정
-
pfSense 셸에서 노드 1에 대해 다음 명령을 실행합니다.
crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3 cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
-
이 자습서에서는 192.0.2.3가 유동 IP입니다. ip, 넷마스크 및 nic 값을 값으로 바꿔야 합니다. Pacemaker에서 IP 리소스를 만들어야 합니다.
지금 crm status
를 실행하면 두 개의 노드가 온라인 상태이고 한 개의 리소스가 pfSense-primary
를 가리키고 있습니다. ipconfig vtnet0
를 실행하여 가상 IP가 기본 노드의 인터페이스와 연관되었는지 확인할 수도 있습니다.
페일오버 테스트
현재 상태
-
다음 명령을 실행하여 강제로 전환합니다.
crm resource move IP pfSense-secondary.example.com
-
crm status
명령을 실행하면 유동 IP 리소스가 pfSense-secondary로 이동됩니다. -
Oracle Cloud 콘솔 vNIC에서 노드를 확인하면 유동 IP가 두 번째 노드로 이동한 것을 확인할 수 있습니다.
참고: 지금 종료하려고 시도하면 마스터를 지정하기 위해 pfSense에 50% 이상의 투표가 필요하기 때문에 마스터로 간주할 노드를 파악할 수 없으므로 리소스가 중지 상태로 이동합니다. 2개의 노드만 있고 그 중 하나가 작동 중지되었기 때문에 Pacemaker는 하나를 마스터로 설정할 수 없습니다.
-
다음 명령을 실행하여 50% 투표 정책을 무시합니다.
crm configure property no-quorum-policy=ignore
-
이제 종료를 테스트하면 유동 IP 이동이 표시됩니다.
작업 5: XLMRPC 및 pfsync 설정
고가용성 클러스터를 원할 경우 노드가 동기화됨 상태가 되기를 원합니다. IP를 이동하는 것만으로는 동기화되지 않습니다. 동기화를 위해 각 인스턴스에 다른 vNIC 세트를 설정해야 합니다.
Sync 인터페이스 설정
-
양쪽 노드의 경우 컴퓨트로 이동하여 인스턴스를 선택하고 연결된 vNIC를 연 후 vnic 생성을 누릅니다.
-
vNIC가 만들어지고 연결되면 pfSense console으로 이동하여 interfaces를 누른 다음 Assignments(지정)를 누르고 새로 감지된 인터페이스를 추가합니다.
-
새로 지정된 인터페이스를 누르고 해당 구성을 설정합니다.
-
OCI 콘솔의 이전 단계에서 생성한 정적 IPv4 주소 및 서브넷 마스크를 할당합니다.
-
저장을 누르고 변경사항을 적용합니다.
기본 노드에서 고가용성 설정
- pfSense console으로 이동하여 System을 누른 후 High Availability Sync를 누릅니다.
- pfsync state sync를 사용으로 설정합니다.
- 동기화 인터페이스를 선택합니다.
- 보조 노드 IP를 추가합니다.
- XMLRPC 동기화 구성: 보조 노드 IP를 추가합니다.
- 사용자 이름과 암호를 설정하고 동기화할 항목을 모두 확인합니다.
- 저장 및 적용을 누릅니다.
보조 노드에서 고가용성(High Availability) 설정
- pfSense 콘솔로 이동하고 시스템, 고가용성 동기화를 차례로 누릅니다.
- pfsync state sync를 사용으로 설정합니다.
- 동기화 인터페이스를 선택합니다.
- 기본 노드 IP를 추가합니다.
- 저장 및 적용을 누릅니다.
방화벽 상태는 두 노드 간에 동기화되며 기본 인스턴스에 방화벽 규칙을 추가하려고 하면 보조 노드에도 동일한 상태가 나타납니다. 이제 시스템 종료로 페일오버를 다시 테스트할 수 있습니다.
관련 링크
- pfSense 웹사이트
- 가용성 도메인
- 피어링 게이트웨이
- 보안 목록
- 전체 파일 시스템 또는 Inode 오류 문제 해결
- 인스턴스에서 서비스 호출
- Instance Principal을 사용하여 OCI CLI 호출
감사의 글
작성자 - Mayank Kakani(OCI Cloud Architect)
추가 학습 자원
docs.oracle.com/learn의 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 접근할 수 있습니다. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer로 전환할 수 있습니다.
제품 설명서는 Oracle Help Center를 참조하십시오.
Configure a pfSense High Availability active/passive cluster with Corosync/Pacemaker on Oracle Cloud Infrastructure
F70197-02
September 2022
Copyright © 2022, Oracle and/or its affiliates.