웹사이트 검색

Linux에서 고가용성/클러스터링을 구성하고 유지하는 방법


고가용성(HA)은 단순히 오랜 기간 동안 오류 없이 지속적으로 작동할 수 있는 시스템의 품질을 나타냅니다. HA 솔루션은 하드웨어 및/또는 소프트웨어를 사용하여 구현할 수 있으며 HA 구현을 위한 일반적인 솔루션 중 하나는 클러스터링입니다.

컴퓨팅에서 클러스터는 작업을 수행하기 위해 함께 작동하는 두 대 이상의 컴퓨터(일반적으로 노드 또는 구성원라고 함)로 구성됩니다. 이러한 설정에서는 단 하나의 노드만 서비스를 제공하며 장애가 발생할 경우 보조 노드가 대신합니다.

클러스터는 네 가지 주요 유형으로 분류됩니다.

  • 저장소: 클러스터의 서버 전체에 일관된 파일 시스템 이미지를 제공하여 서버가 단일 공유 파일 시스템을 동시에 읽고 쓸 수 있도록 합니다.
  • 고가용성: 단일 장애 지점을 제거하고 노드가 작동하지 않을 경우 한 클러스터 노드에서 다른 클러스터 노드로 서비스를 장애 조치합니다.
  • 부하 분산: 네트워크 서비스 요청을 여러 클러스터 노드에 전달하여 클러스터 노드 간에 요청 부하의 균형을 맞춥니다.
  • 고성능: 병렬 또는 동시 처리를 수행하여 애플리케이션 성능을 향상시키는 데 도움이 됩니다.

HA를 제공하기 위해 널리 사용되는 또 다른 솔루션은 복제(특히 데이터 복제)입니다. 복제는 하나 이상의 (보조) 데이터베이스를 단일 기본(또는 마스터) 데이터베이스와 동기화 상태로 유지할 수 있는 프로세스입니다.

클러스터를 설정하려면 최소한 두 대 이상의 서버가 필요합니다. 이 가이드에서는 두 개의 Linux 서버를 사용합니다.

  • 노드1: 192.168.10.10
  • 노드2: 192.168.10.11

이 문서에서는 Ubuntu 16.04/18.04 및 CentOS 7에서 고가용성/클러스터링을 배포, 구성 및 유지 관리하는 방법에 대한 기본 사항을 보여줍니다. Nginx HTTP 서비스를 클러스터에 추가하는 방법을 보여줍니다.

각 서버에서 로컬 DNS 설정 구성

두 서버가 서로 통신하려면 두 서버의 /etc/hosts 파일에서 적절한 로컬 DNS 설정을 구성해야 합니다.

즐겨 사용하는 명령줄 편집기를 사용하여 파일을 열고 편집하세요.

sudo vim /etc/hosts  

서버의 실제 IP 주소와 함께 다음 항목을 추가합니다.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

변경 사항을 저장하고 파일을 닫습니다.

Nginx 웹 서버 설치

이제 다음 명령을 사용하여 Nginx 웹 서버를 설치하십시오.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

설치가 완료되면 지금 Nginx 서비스를 시작하고 부팅 시 자동 시작되도록 활성화한 다음 systemctl 명령을 사용하여 서비스가 실행되고 있는지 확인하세요.
Ubuntu에서는 패키지 사전 구성이 완료된 후 즉시 서비스가 자동으로 시작되어야 하며 간단히 활성화할 수 있습니다.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Nginx 서비스를 시작한 후에는 두 서버 모두에서 작업을 식별하고 테스트하기 위한 사용자 지정 웹 페이지를 만들어야 합니다. 그림과 같이 기본 Nginx 인덱스 페이지의 내용을 수정하겠습니다.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Corosync 및 Pacemaker 설치 및 구성

다음으로 다음과 같이 각 노드에 Pacemaker, Corosync, Pcs를 설치해야 합니다.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

설치가 완료되면 pcs 데몬이 두 서버 모두에서 실행되고 있는지 확인하세요.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

클러스터 생성

설치하는 동안 “hacluster ”라는 시스템 사용자가 생성됩니다. 따라서 pcs에 필요한 인증을 설정해야 합니다. “hacluster ” 사용자에 대한 새 비밀번호를 만드는 것부터 시작하겠습니다. 모든 서버에서 동일한 비밀번호를 사용해야 합니다.

sudo passwd hacluster

그런 다음 서버 중 하나(Node1)에서 다음 명령을 실행하여 pcs에 필요한 인증을 설정합니다.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

이제 클러스터를 생성하고 Node1 서버에 일부 노드(클러스터 이름은 15자를 초과할 수 없습니다. 이 예에서는 examplecluster를 사용했습니다)로 채웁니다.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

이제 부팅 시 클러스터를 활성화하고 서비스를 시작합니다.

sudo pcs cluster enable --all
sudo pcs cluster start --all

이제 다음 명령을 사용하여 클러스터 서비스가 실행되고 있는지 확인하십시오.

sudo pcs status
OR
sudo crm_mon -1

위 명령의 출력에서 STONITH 장치가 없지만 클러스터에서 STONITH가 여전히 활성화되어 있다는 경고가 표시되는 것을 확인할 수 있습니다. 또한 클러스터 리소스/서비스가 구성되지 않았습니다.

클러스터 옵션 구성

첫 번째 옵션은 Pacemaker의 펜싱 구현인 STONITH(또는 Shoot The Other Node In The Head)를 비활성화하는 것입니다.

이 구성 요소는 동시 액세스로 인해 데이터가 손상되지 않도록 보호하는 데 도움이 됩니다. 이 가이드의 목적에 따라 장치를 구성하지 않았으므로 비활성화하겠습니다.

STONITH를 끄려면 다음 명령어를 실행하세요.

sudo pcs property set stonith-enabled=false

다음으로, 다음 명령을 실행하여 쿼럼 정책도 무시합니다.

sudo pcs property set no-quorum-policy=ignore

위 옵션을 설정한 후 다음 명령을 실행하여 속성 목록을 확인하고 위 옵션, stonith쿼럼 정책이 비활성화되어 있는지 확인합니다.

sudo pcs property list

리소스/클러스터 서비스 추가

이번 섹션에서는 클러스터 리소스를 추가하는 방법을 살펴보겠습니다. 동일한 네트워크나 데이터 센터 내에서 한 서버에서 다른 서버로 즉시 이동할 수 있는 IP 주소인 유동 IP를 구성합니다. 간단히 말해서, 유동 IP는 하나의 단일 인터페이스에 엄격하게 바인딩되지 않은 IP에 사용되는 기술 공통 용어입니다.

이 경우 고가용성 클러스터에서 장애 조치를 지원하는 데 사용됩니다. 유동 IP는 장애 조치 상황에만 사용되는 것이 아니라 몇 가지 다른 사용 사례도 있다는 점을 명심하세요. 특정 시간에 클러스터의 활성 구성원만 유동 IP를 "소유"하거나 이에 응답하는 방식으로 클러스터를 구성해야 합니다.

두 개의 클러스터 리소스, 즉 "floating_ip"라는 유동 IP 주소 리소스와 "http_server"라는 Nginx 웹 서버용 리소스를 추가하겠습니다.

먼저 다음과 같이 float_ip를 추가하여 시작하세요. 이 예에서 유동 IP 주소는 192.168.10.20입니다.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

어디 :

  • floating_ip: 서비스 이름입니다.
  • “ocf:heartbeat:IPaddr2”: Pacemaker에 사용할 스크립트(이 경우 IPaddr2), 어떤 네임스페이스(pacemaker)에 있는지, ocf를 준수하는 표준을 알려줍니다.
  • "op monitor Interval=60s ": 에이전트의 모니터 작업을 호출하여 1분마다 이 서비스의 상태를 확인하도록 Pacemaker에 지시합니다.

그런 다음 http_server라는 두 번째 리소스를 추가합니다. 여기서 서비스의 리소스 에이전트는 ocf:heartbeat:nginx입니다.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

클러스터 서비스를 추가한 후 다음 명령을 실행하여 리소스 상태를 확인하십시오.

sudo pcs status resources

명령의 출력을 보면 두 개의 추가된 리소스인 “floating_ip ”“http_server ”가 나열되었습니다. 기본 노드가 작동 중이기 때문에 Floating_ip 서비스가 꺼져 있습니다.

시스템에 방화벽이 활성화되어 있는 경우 노드 간 적절한 통신을 위해 Nginx에 대한 모든 트래픽과 방화벽을 통한 모든 고가용성 서비스를 허용해야 합니다.

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

고가용성/클러스터링 테스트

마지막이자 중요한 단계는 고가용성 설정이 작동하는지 테스트하는 것입니다. 웹 브라우저를 열고 192.168.10.20 주소로 이동하면 스크린샷에 표시된 대로 node2.example.com의 기본 Nginx 페이지가 표시됩니다.

오류를 시뮬레이션하려면 다음 명령을 실행하여 node2.example.com에서 클러스터를 중지합니다.

sudo pcs cluster stop http_server

그런 다음 192.168.10.20에서 페이지를 다시 로드하면 이제 node1.example.com에서 기본 Nginx 웹페이지에 액세스할 수 있습니다.

또는 노드 중 하나에서 다음 명령을 사용하여 노드에서 클러스터를 중지하지 않고 서비스를 직접 중지하도록 지시하여 오류를 시뮬레이션할 수 있습니다.

 
sudo crm_resource --resource http_server --force-stop 

그런 다음 대화형 모드(기본값)에서 crm_mon을 실행해야 합니다. 2분의 모니터링 간격 내에 http_server가 실패했다는 클러스터 알림을 볼 수 있어야 합니다. 다른 노드로 보냅니다.

클러스터 서비스를 효율적으로 실행하려면 몇 가지 제약 조건을 설정해야 할 수도 있습니다. 모든 사용 명령 목록은 pcs 매뉴얼 페이지(man PC)에서 확인할 수 있습니다.

Corosync 및 Pacemaker에 대한 자세한 내용은 https://clusterlabs.org/를 확인하세요.

요약

이 가이드에서는 Ubuntu 16.04/18.04 및 CentOS 7에서 고가용성/클러스터링/복제를 배포, 구성 및 유지하는 방법에 대한 기본 사항을 보여주었습니다. Nginx HTTP 서비스를 클러스터에 추가하는 방법을 시연했습니다. 공유하고 싶은 생각이나 질문이 있으면 아래 피드백 양식을 사용하세요.