PaceMaker
목차
- 인프라 구성
- 아키텍처 설계
- 리소스 생성
- Azure 역할 할당 설정
- 관리 ID 사용
- 사용자 지정 역할 추가
- Azure 역할 할당
서비스 주체 사용
- 관리 ID 사용
- pacemaker 설치
- 운영체제 구성
- cloud-netconfig-azure 구성
- Keygen 작업
- host 등록
- 클러스터 설치
- 펜싱 디바이스 생성
SDB 디바이스 사용하는 경우- Azure 펜스 에이전트 사용하는 경우
- Pacemaker 구성
[1]. 인프라 구성
- 전체 아키텍처 구성
- Resource Group 생성 : PoCShowRoom
- Virtual Network 생성
네트워크 명 네트워크 주소 MGMT 10.0.0.0/16 SAP-vn 10.1.0.0/16 AP_1 10.1.1.0/24 AP_2 10.1.2.0/24 DB_1 10.1.3.0/24 DB_2 10.1.4.0/24 - 리소스 생성
- AP Server Resource 구성
EX) AP #1 가상머신 구성
- [TEST 계정]
- id : demouser
- pw : demo!pass123
가상머신이름 설정 선택 ALL OS 배포판 : SUSE Enterprise Linux for SAP 15 SP1 +24x7 Support - 2Gen ALL OS image AP-1, DB-1 가용성 영역 Zone 1 AP-2, DB-2 가용성 영역 Zone 3 AP-1 네트워크 주소 AP_1 10.1.1.0/24 AP-2 네트워크 주소 AP_2 10.1.2.0/24 DB-1 네트워크 주소 DB_1 10.1.3.0/24 DB-2 네트워크 주소 DB_2 10.1.4.0/24 - AP Server Resource 구성
[2]. Azure 역할 할당 설정
VM이 뻗었을 경우 원활한 Cluster를 위해 각 VM에 권한을 지정해주어야 한다.
그러기 위해 관리 ID를 사용하거나 서비스 주체 방식으로 권한을 생성해서
VM에 역할을 할당한다.
- 관리 ID 사용 [해당 방식으로 진행]
- 사용자 지정 역할 추가
- 구독 > 액세스 제어(IAM) 클릭
- 추가를 클릭하여 사용자 지정 역할 추가 클릭
- 기본탭에서 사용자 지정 역할 이름 입력, 기준 권한에서 JSON에서 시작 선택
- JSON탭에서 편집버튼을 클릭해서 편집모드로 설정
- 구독 아이디만 변경하여 아래 JSON 내용 복사 붙여넣기 후 저장 후 생성과정 진행
{ "properties": { "roleName": "자동생성됨", "Name": "Linux fence agent Role", "description": "Allows to power-off and start virtual machines", "description": "", "assignableScopes": [ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", ], "permissions": [ { "actions": ["Microsoft.Compute/*/read", "Microsoft.Compute/virtualMachines/powerOff/action", "Microsoft.Compute/virtualMachines/start/action"], "notActions": [], "dataActions": [], "notDataActions": [] } ] } }
- 구독 > 액세스 제어(IAM) 클릭
- Azure 역할 할당
- 역할을 할당해줄 VM에 접속 > ID클릭
- 시스템 할당 항목에서 상태 켜기로 변경 후 저장
- 사용 권한이 나타나면 Azure 역할 할당을 클릭해준다.
- 역할 할당 추가(미리 보기) 클릭, 아래 내용 입력 후 저장
- 범위 : 구독
- 구독 : 진행중인 구독으로 선택
- 역할 : 위에서 생성한 역할 이름 선택
5. 이와 같은 과정을 AP-1,2 DB-1,2 총 4개의 VM에 적용
- 역할을 할당해줄 VM에 접속 > ID클릭
- 사용자 지정 역할 추가
서비스 주체 사용
[3]. pacemaker 설치
- 운영 체제 구성
Pacemaker는 경우에 따라 허용된 수를 모두 사용할 수 있는 많은 프로세스를 만듭니다. 이 경우 클러스터 노드 간의 하트비트가 실패하고 리소스의 장애 조치(failover)가 발생할 수 있습니다. 다음 매개 변수를 설정하여 허용되는 "최대 프로세스 수"를 늘리는 것이 좋습니다.
- vi 편집기를 이용해 configuration file 설정
sudo vi /etc/systemd/system.conf
- Change the DefaultTasksMax
#DefaultTasksMax=512 DefaultTasksMax=4096
- Activate this setting
sudo systemctl daemon-reload
- Test to ensure that the change was successful
sudo systemctl --no-pager show | grep DefaultTasksMax
- 더티 캐시의 크기를 줄입니다. [vi 편집기 이용]
sudo vi /etc/sysctl.conf
# Change/set the following settings vm.dirty_bytes = 629145600 vm.dirty_background_bytes = 314572800
- 스왑 사용량을 줄이고 메모리를 선호하려면
vm.swapiness가 10으로 설정되어 있는지 확인합니다.# Change/set the following setting vm.swappiness = 10
# Change/set the following settings vm.dirty_bytes = 629145600 vm.dirty_background_bytes = 314572800 # Change/set the following setting vm.swappiness = 10
- vi 편집기를 이용해 configuration file 설정
- cloud-netconfig-azure 구성
클라우드 네트워크 플러그 인이 가상 IP 주소를 제거하는 것을 방지하려면 Pacemaker가 할당을 제어해야 하므로 다음 코드와 같이 네트워크 인터페이스에 대한 구성 파일을 변경합니다.
- Edit the configuration file
sudo vi /etc/sysconfig/network/ifcfg-eth0
- CLOUD_NETCONFIG_MANAGE 부분을 no로 수정
- Edit the configuration file
-
Keygen 작업
No Keygen 1 NO1 SERVER keygen 생성 2 NO1 copy the public key 확인 3 NO2 > NO1 SERVER의 authorized_keys에 복사 4 NO2 SERVER keygen 생성 5 NO1 > NO2 SERVER의 authorized_keys에 복사 6 NO1 copy the public key 확인 7 노드간 키 교환 상태 테스트 SSH 진행 - NO1 SERVER keygen 생성
sudo ssh-keygen
- NO1 다음 명령어 실행 후 public key 복사
sudo cat /root/.ssh/id_rsa.pub
- NO2 > NO1 SERVER의 authorized_keys에 복사
sudo vi /root/.ssh/authorized_keys
- NO2 SERVER keygen 생성
sudo ssh-keygen
- NO2 copy the public key 확인
sudo cat /root/.ssh/id_rsa.pub
- NO2 > NO1 SERVER의 authorized_keys에 복사
sudo vi /root/.ssh/authorized_keys
- NO1 SERVER서버에서 NO2 SSH접근 테스트
ssh <node2서버 계정>@<node2서버 ip>
- NO2 SERVER서버에서 NO1 SSH접근 테스트
ssh <node1서버 계정>@<node1서버 ip>
- ip 확인 명령어
ip address
- NO1 SERVER keygen 생성
-
host 등록
- 필요한 패키지 및 모듈 설치작업
Azure에서 제공되는 SUSE리눅스로 작업시 이미 설치된 내용이므로 SKIP
- Azure 펜스 에이전트를 기반으로 fence-agents 패키지를 설치
sudo zypper install fence-agents
- Azure Python SDK 및 Azure Identity Python 모듈을 설치
공식문서는 버전 15.1로 되어있으나 실제 버전(15.3)과 동일한 버전으로 설치해야함
# You might need to activate the public cloud extension first. In this example, the SUSEConnect command is for SLES 15 SP1 SUSEConnect -p sle-module-public-cloud/15.3/x86_64 sudo zypper install python3-azure-mgmt-compute sudo zypper install python3-azure-identity
- Azure 펜스 에이전트를 기반으로 fence-agents 패키지를 설치
- [NO1, NO2] host name 설정
실제 구성시 등록할 VM의 수 만큼 등록해야함 각 노드의 수 만큼 IP정보와 지정할 도메인(hostname) 이름 등록
# IP address of the first cluster node <NO1 서버의 Private PI> <hostname 또는 지정할 노드 도메인 이름> # IP address of the second cluster node <NO2 서버의 Private PI> <hostname 또는 지정할 노드 도메인 이름>
- 각 노드의 ip와 hostname 확인
ip address hostname
- host 등록
sudo vi /etc/hosts
- NO-1 Server
- NO-2 Server
- NO-1 Server
- 등록한 도메인 이름으로 ping test
ping <등록도메인 이름>
- NO1 SERVER에서 NO2 SERVER로 ping 테스트
- NO2 SERVER에서 NO1 SERVER로 ping 테스트
- NO1 SERVER에서 NO2 SERVER로 ping 테스트
- 각 노드의 ip와 hostname 확인
- 필요한 패키지 및 모듈 설치작업
- 클러스터를 설치
# 클러스터 중지 명령어 sudo crm cluster stop
- [NO1] SERVER에 클러스터 설치
sudo crm cluster init
- [NO2] SERVER에서 클러스터에 노드 추가
sudo crm cluster join
- hacluster 계정의 비밀번호 설정
sudo passwd hacluster
- NO1 SERVER
- NO2 SERVER
- NO1 SERVER
- corosync 설정을 조정
sudo vi /etc/corosync/corosync.conf
- 아래 내용 추가
token: 30000 token_retransmits_before_loss_const: 10 join: 60 consensus: 36000 max_messages: 20
- NO1 SERVER
- NO2 SERVER
- 아래 내용 추가
- corosync 서비스 재시작
sudo service corosync restart
- 웹 접속 후 로그인
인바운트 포트 : 7630 등록 후 공용ip로 접근시 아래 이미지와 같은 로그인 화면이 나온다면 성공 id : hacluster pw : 지정한 비밀번호 5-3번에서 지정한 비밀번호를 등록했다면 로그인이 정상적으로 되는것을 확인할 수 있다.
- [NO1] SERVER에 클러스터 설치
[4]. 펜싱 디바이스 생성
SDB 디바이스를 사용하는 경우-
Azure 펜스 에이전트를 사용하는 경우
sudo crm configure property stonith-enabled=true crm configure property concurrent-fencing=true
- 필요정보
- VM이름
- 리소스 그룹
- 구독 아이디
- host명
- NO1 SERVER
- NO2 SERVER
- NO1 SERVER
- 테넌트 아이디
- Azure Active Directory > 개요
- Azure Active Directory > 개요
-
[NO1만 작업] 에이전트 관리 ID를 사용하려면 다음 명령어 실행
# 해당 VM의 구독ID와 리소스 그룹명으로 변경 # 클러스터 대상 노드의 host명:VM명 수정 sudo crm configure primitive rsc_st_azure stonith:fence_azure_arm \ params msi=true subscriptionId="<구독 ID>" resourceGroup="<리소스그룹 이름>" \ pcmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="<node1의 host 이름>:<node1의 VM이름>;<node2의 host 이름>:<node2의 VM이름>" \ op monitor interval=3600 timeout=120 sudo crm configure property stonith-timeout=900
위 명령어가 성공적으로 동작시 웹에서 resource가 생성된다.
-
서비스 주체 사용시 다음 명령어 실행# replace the bold strings with your subscription ID, resource group of the VM, tenant ID, service principal application ID and password sudo crm configure primitive rsc_st_azure stonith:fence_azure_arm \ params subscriptionId="subscription ID" resourceGroup="resource group" tenantId="tenant ID" login="application ID" passwd="password" \ pcmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \ op monitor interval=3600 timeout=120 sudo crm configure property stonith-timeout=900
- 필요정보
[5]. Pacemaker 구성
- azure-events 에이전트에 대한 패키지정보 및 최신인지 확인
sudo zypper info resource-agents
-
NO1 SERVER
-
NO2 SERVER
-
-
[NO1 SERVER] Pacemaker에서 리소스를 구성
#Place the cluster in maintenance mode sudo crm configure property maintenance-mode=true #Create Pacemaker resources for the Azure agent sudo crm configure primitive rsc_azure-events ocf:heartbeat:azure-events op monitor interval=10s sudo crm configure clone cln_azure-events rsc_azure-events #Take the cluster out of maintenance mode sudo crm configure property maintenance-mode=false
- 웹에서 생성된 리소스 확인