SafeKit 검색

SafeKit을 사용한 K3S 고가용성: 장애 조치를 위한 k3s.safe 모듈 설치

Kubernetes 고가용성 빠른 설치 가이드

이 가이드는 SafeKit을 사용하여 Kubernetes용 mirror 클러스터를 설정하는 방법을 설명하며, 공유 스토리지가 필요 없이 자동 장애 조치 및 동기식 복제를 보장합니다.

도움이 필요하시면 SafeKit AI 🤖를 이용해 보세요.

1. 개요

  • 아키텍처 : 2노드 시스템(기본/보조)을 사용합니다.
  • 데이터 보호: 데이터 손실 제로 (RPO = 0)를 위한 실시간 동기 복제를 구현합니다.

2. 설치

  • 소프트웨어: 두 서버 모두에 SafeKit 엔진을 설치합니다.
  • 모듈: 사전 구성된 k3s.safe 애플리케이션 모듈을 다운로드합니다.

3. 구성

  • 웹 콘솔: Kubernetes 파일이 포함된 특정 폴더를 구성합니다.
  • 모니터링: Kubernetes 애플리케이션 모니터링 및 보호를 시작합니다.

SafeKit 고가용성 제한 사항

제한/요구사항이유 및 영향권장 대체안
복제 크기: 수 TB장애 후 재동기화 시간(3단계):
• 1Gb/s 네트워크 ≈ 3시간/TB
• 10Gb/s 네트워크 ≈ 1시간/TB(디스크 쓰기 성능에 따라 다름)
• 외부 공유 스토리지 사용(비용이 더 많이 들고 더 복잡함).
파일 수: 1,000,000개 미만• 장애 발생 후 재동기화 시간 성능(3단계).
• 두 노드 간에 각 파일을 비교하는 데 필요한 시간입니다.
• 복제할 여러 파일을 가상 하드 디스크/가상 머신에 넣습니다.
• 이 경우 가상 하드 디스크/가상 머신을 나타내는 파일만 복제되고 재동기화됩니다.
장애 조치 용량: ≤ 32개 VM• 각 VM은 독립적인 mirror 모듈에서 실행됩니다.
• 동일한 클러스터에서 최대 32개의 mirror 모듈을 실행할 수 있습니다.
• 외부 공유 스토리지 및 다른 VM 클러스터링 솔루션 사용(비용이 더 많이 들고 더 복잡함).
네트워크 아키텍처: 원격 사이트 간 LAN/VLAN 네트워크• 동일한 서브넷에 있는 2개의 노드에서 가상 IP 주소의 자동 장애 조치.
• 재동기화를 위한 충분한 대역폭(3단계).
• 동기 복제를 위한 낮은 지연 시간: 일반적으로 RTT가 5ms 미만입니다. 더 높은 값은 애플리케이션의 쓰기 속도에 대해 검증해야 합니다.
• 두 노드가 서로 다른 서브넷에 있는 경우(클라우드에서 일반적), 로드 밸런서, 클라우드 공급자 CLI, BGP 또는 DNS 리디렉션과 같은 다른 라우팅 옵션을 사용합니다.
• 지연 시간이 긴 네트워크의 경우 비동기 복제 기능이 있는 백업 솔루션을 사용하세요.

SafeKit/Kubernetes 솔루션 개요

솔루션은 다음에서 설명합니다. 💡 Kubernetes K3s 고가용성: 2노드 동기 복제 및 장애 조치

Linux에 SafeKit/Kubernetes 솔루션 설치 및 구성(k3s.safe)

1. 패키지 다운로드

  • Linux용 SafeKit 8.2 무료 버전 다운로드(safekitlinux_xx.bin)
  • k3s.safe Linux 모듈을 다운로드하세요
  • k3sconfig.sh 스크립트를 다운로드하세요
  • 문서(pptx)

참고: k3sconfig.sh 스크립트는 2개의 Linux Ubuntu 24.04 노드에 K3S, MariaDB, NFS, SafeKit을 설치합니다.

SafeKit (Linux) 다운로드 >

k3s.safe 다운로드(Linux) >

k3sconfig.sh 다운로드 >

설명서(pdf) >

2. 두 노드 모두에서 먼저

루트 권한으로 2개의 Linux Ubuntu 24.04 노드에서 다음을 수행합니다

  • 노드가 인터넷에 접속할 수 있는지 확인하세요(프록시를 통해 접속할 수도 있음)
  • k3sconfig.sh, k3s.safe 및 safekit_xx.bin 패키지를 디렉터리로 복사한 다음 해당 디렉터리로 이동합니다
  • .bin 파일의 이름을 “safekit.bin"으로 변경하세요
  • k3sconfig.sh와 safekit.bin이 실행 가능한지 확인하세요.
  • k3sconfig.sh 스크립트를 편집하고 환경에 맞게 환경 변수(가상 IP 포함)를 사용자 지정합니다
  • 두 노드 모두에서 다음을 실행합니다. ./k3sconfig.sh prereq

스크립트는 다음을 수행합니다

  • 필요한 데비안 패키지 설치: alien, nfs-kernel-server, nfs-common, mariadb-server
  • MariaDB 보안 설치
  • 파일 복제를 위한 디렉터리 생성
  • 복제된 디렉터리를 공유하도록 NFS 서버를 준비합니다
  • SafeKit은 설치

3. 첫 번째 노드에서

첫 번째 노드에서 실행: ./k3sconfig.sh first

스크립트는 다음을 수행합니다

  • K3S 구성 데이터베이스 및 k3s 사용자 생성
  • 복제된 스토리지 볼륨 파일(희소 파일)을 생성하고 xfs 파일 시스템으로 포맷합니다
  • safekit 클러스터를 구성을 생성하고 적용합니다
  • 클러스터에 k3s.safe 모듈을 설치하고 구성합니다
  • 첫 번째 노드에서 k3s 모듈을 “prim"으로 시작합니다
  • k3s 다운로드, 설치 및 시작
  • nfs-subdir-external-provisioner Helm 차트를 다운로드하여 설치합니다
  • K3S 토큰 표시(두 번째 노드 설치 단계에서 사용)

4. 두 번째 노드에서

두 번째 노드에서 다음을 실행합니다. ./k3sconfig.sh second <token>

  • 은 첫 번째 노드에서 " k3sconfig.sh first"를 실행했을 때 마지막에 표시되는 문자열입니다

스크립트는 다음을 수행합니다

  • 첫 번째 노드에서 k3s 모듈이 prim으로 시작되었는지 확인하세요
  • 두 번째 노드에 k3s를 설치합니다
  • k3s 모듈을 시작합니다

5. k3s SafeKit 모듈이 두 노드 모두에서 실행 중인지 확인합니다

두 노드 모두에서 다음 명령으로 확인하십시오. /opt/safekit/safekit –H "*" state

답변은 이미지와 유사해야 합니다.

/opt/safekit/safekit –H "*" state
---------------- 서버= http://10.0.0.20:9010 ----------------
admin 작업=실행
--------------------- k3s 상태 ---------------------

  로컬(127.0.0.1): PRIM (서비스: 사용 가능)(색상: 녹색)
성공
---------------- 서버= http://10.0.0.21:9010 ----------------
admin 작업=실행
--------------------- k3s 상태 ---------------------

  로컬(127.0.0.1): SECOND (서비스: 사용 가능)(색상: 녹색)
성공

6. SafeKit 웹 콘솔을 시작하여 클러스터를 관리합니다

  • 브라우저를 SafeKit 웹 콘솔 URL http://server0-IP:9010에 연결합니다.
  • 이미지와 유사한 페이지가 표시됩니다.
  • Linux 명령줄을 사용하여 두 노드 모두에서 K3S 시작되었는지(start_prim 및 start_second에서 시작됨) 기본 노드에서 MariaDB 시작되었는지(start_prim에서 시작됨) 확인합니다.

SafeKit 웹 콘솔에서 Kubernetes 클러스터가 시작되었습니다

7. 테스트

  • PRIM 노드의 상황별 메뉴를 아래로 스크롤하여 Stop 클릭하여 노드를 중지합니다.
  • SECOND 노드에 장애 조치가 발생하여 ALONE 작동하는지(녹색) 확인합니다.
  • Linux의 명령줄을 사용하여 서비스의 장애 조치(stop_prim 스크립트에서 노드 1에서 중지되고 start_prim 스크립트에서 노드 2에서 시작됨)를 확인합니다. MariaDB와 K3S node2에서 실행되어야 합니다.

경고

node2에서 ALONE (녹색) 상태에 도달하지 못했다면 노드 2의 모듈 로그를 통해 원인을 분석하십시오.

  • 모듈 로그를 표시하려면 node2 클릭하세요.
  • start_prim의 서비스 이름이 유효하지 않은 SQL Server 모듈 로그의 예입니다. sqlserver.exe 프로세스는 모니터링되지만 시작되지 않으므로 모듈이 결국 중지됩니다.

경고

모든 것이 정상이라면 node1에서 시작을 실행하여 node2에서 복제된 디렉터리를 다시 동기화합니다.

문제가 발생하면 node2를 중지하고 node1 주 노드로 강제 시작합니다. 그러면 중지 시점에 로컬에서 정상적인 데이터로 다시 시작됩니다.

참고

🛠️ 테스트에 대한 자세한 내용은 사용 설명서를 참조하세요.

PRIM 서버에서 모듈을 중지합니다

8. 워드프레스와 같은 Kubernetes 애플리케이션으로 클러스터를 사용해 보세요

이미지에는 워드프레스 설치 예시가 나와 있습니다. 백엔드 데이터베이스가 포드로 구현된 웹 포털입니다.

동일한 방식으로 자체 애플리케이션을 배포할 수 있습니다.

워드프레스는 자동으로 높은 가용성을 제공합니다

  • SafeKit이 실시간으로 복제하는 영구 볼륨에 데이터(php + 데이터베이스)를 저장합니다
  • 사용자가 워드프레스 사이트에 접속할 수 있도록 가상 IP 주소를 제공합니다
  • 자동 장애 조치 및 자동 페일백 포함

참고:

  • 워드프레스 차트는 <service.port> 및 <service.httpsport> 포트에서 수신 대기하는 로드 밸런싱 서비스를 정의합니다.

  • 워드프레스는 다음 URL을 통해 접속할 수 있습니다: http://<virtual-ip>:<service.port>.

  • 가상 IP는 SafeKit에서 관리하며 장애 조치 시 자동으로 전환됩니다.

  • 기본적으로 K3S Klipper를 사용하여 로드 밸런서를 구현합니다.

  • Klipper는 : <service.port> 에서 수신 대기하고 TCP/IP 패킷을 선택한 WordPress 포드의 IP 주소 및 포트로 라우팅합니다.

    $ export KUBECONFIG= /etc/rancher/k3s/k3s.yaml $ helm repo add bitnami https://charts.bitnami.com/bitnami $ helm install my-release bitnami/wordpress –set global.storageClass=nfs-client –set service.ports.http=8099,service.ports.https=4439

이전 helm 명령은 registry-1.docker.io에서 WordPress 이미지를 다운로드해야 합니다. registry-1.docker.io에서 인증 문제가 발생할 수 있습니다. 이 경우 다음을 수행해야 합니다

  • 두 노드 모두에 다음 내용으로 /etc/rancher/k3s/registries.yaml 파일을 생성합니다

    configs:
      "registry-1.docker.io":
        auth:
          username: your_user_name
          password: your_password
        tls:
          insecure_skip_verify: true
    
  • k3s를 중지했다가 다시 시작하여 변경 사항을 적용하려면 systemctl stop k3s 및 systemctl start k3s 사용하세요.

  • helm registry login -u your_user_name docker.io 실행한 다음 암호를 입력하세요

9. 지원

  • 지원을 받으려면 각 노드에 대해 SafeKit Snapshots 2개(.zip 파일 2개)를 찍으십시오.

참고

🛠️ 사용 설명서의 문제 해결.

지원 스냅샷을 찍으세요

10. 필요한 경우 스플릿 브레인 체커를 구성합니다

매개변수 :

  • ident="witness" 리소스 이름 splitbrain.witness로 감시자를 식별합니다. 이 값을 변경하여 감시자를 식별할 수 있습니다.
  • exec="ping" 실행할 ping 코드를 참조합니다. 이 값을 변경하지 마십시오.
  • arg="witness IP"는 ping에 대한 인수입니다. 이 값을 witness(일반적으로 라우터인 견고한 요소)의 IP로 변경하십시오.

매개변수를 입력하세요

클러스터에서 네트워크가 고립될 경우 발생할 수 있는 다양한 시나리오는 무엇인가요?

단일 네트워크

네트워크가 격리된 경우 기본 동작은 다음과 같습니다

  • 각 노드에 대한 하트비트 손실되면 각 노드는 ALONE로 전환되고 가상 IP 주소로 애플리케이션을 실행합니다(로컬 데이터를 수정하는 애플리케이션의 이중 실행)
  • 격리가 복구되면, 하나의 ALONE 노드는 강제로 중지되고 다른 노드로부터 데이터를 재동기화해야 합니다
  • 결과적으로 클러스터는 PRIM-SECOND(또는 Windows에서 수행한 중복 가상 IP 주소 감지에 따라 SECOND-PRIM)가 됩니다.

전용 복제 네트워크를 갖춘 두 개의 네트워크

네트워크가 격리된 경우 전용 복제 네트워크를 사용하면 다음과 같이 동작합니다

  • 전용 복제 네트워크는 사설 네트워크에 구현됩니다
  • 프로덕션 네트워크의 하트비트 손실됩니다(네트워크 격리)
  • 복제 네트워크의 하트비트 작동 중입니다(격리된 네트워크가 아님)
  • 클러스터는 PRIM/SECOND 상태를 유지합니다.

단일 네트워크 및 스플릿 브레인 체커

네트워크가 분리되었을 때 스플릿 브레인 체커 의 동작은 다음과 같습니다

  • 스플릿 브레인 체커 증인(일반적으로 라우터)의 IP 주소로 구성되었습니다
  • 스플릿 브레인 체커 서버가 PRIM에서 ALONE으로 또는 SECOND에서 ALONE으로 전환될 때 작동합니다
  • 네트워크가 격리된 경우, ALONE으로 전환하기 전에 두 노드 모두 IP 주소를 테스트합니다
  • IP 주소에 액세스할 수 있는 노드는 ALONE으로 이동하고, 다른 노드는 WAIT으로 이동합니다
  • 격리가 복구되면 WAIT 노드는 데이터를 재동기화하고 SECOND 상태가 됩니다.

참고: 위트니스가 다운되거나 연결이 끊어지면 두 노드 모두 WAIT로 전환되고 애플리케이션은 더 이상 실행되지 않습니다. 따라서 라우터와 같이 견고한 위트니스를 선택해야 합니다.

SafeKit mirror 솔루션 시연

SafeKit 동영상: 애플리케이션 수준 클러스터링 (8:47)

이 비디오에서는 SAN의 복잡성 없이 SafeKit mirror HA 클러스터를 구현하는 방법을 알아보세요. 이 데모에서는 Microsoft SQL Server 사용하지만, 이 솔루션은 다른 데이터베이스 및 애플리케이션에서도 동일하게 작동합니다.

챕터

  1. 🎬 SQL Server가 있는 2개의 노드 (0:32)
  2. 🎬 클러스터 및 mirror.safe 모듈 구성 (3:58)
  3. 🎬 SQL 복제, 마이그레이션, 충돌 시 장애 조치 시작 및 테스트 (4:17)

단계별 구현

🔍 SafeKit 살펴보기

SafeKit의 기능, 아키텍처, 동영상, 설명서 및 무료 평가판에 대한 정보를 찾아보세요.

자원설명링크
주요 기능SafeKit가 간단하고 비용 효율적인 고가용성 솔루션인 이유를 알아보세요.주요 기능 살펴보기
사용 사례SafeKit이 중요 애플리케이션과 인프라의 가용성을 유지하는 방법을 알아보세요.사용 사례 살펴보기
배포 모델SafeKit는 SAN이나 공유 스토리지 없이도 고가용성을 제공합니다.배포 모델 살펴보기
고가용성 전략가상 머신과 애플리케이션의 고가용성을 비교합니다.두 가지 전략을 비교해 보세요
기술 사양SafeKit 클러스터의 기술 요구 사항 및 제한 사항을 확인하십시오.기술 사양을 읽어보세요
동영상SafeKit 구성 및 자동 장애 조치 시연을 시청하세요.기술 동영상 시청하기
아키텍처SafeKit mirror 클러스터 실시간으로 파일을 복제하고 장애 조치를 처리하는 방법을 알아보세요.Mirror 아키텍처 살펴보기
아키텍처SafeKit farm 클러스터 네트워크 트래픽의 균형을 맞추고 장애 조치를 처리하는 방법을 알아보세요.Farm 아키텍처 둘러보기
제품 비교SafeKit와 기존의 고가용성 클러스터 비교해 보세요.솔루션 비교
기술 자료기술 설명서를 찾아보고, SafeKit을 다운로드하고, 무료 평가판을 이용해 보세요.설명서 및 무료 평가판에 액세스하세요
애플리케이션 모듈사전 구성된 SafeKit 모듈을 사용하여 애플리케이션의 고가용성을 설정하세요.애플리케이션 모듈 살펴보기
SafeKit AI Chat SafeKit AI