클러스터 관리 · 6 min read · Jan 30, 2026
가네티를 이용한 데비안 레니의 젠 클러스터 관리
가네티를 이용한 데비안 레니의 젠 클러스터 관리
버전 1.0
저자: Falko Timme
가네티는 젠 기반의 클러스터 가상화 관리 시스템입니다. 이 튜토리얼에서는 두 개의 물리적 노드 클러스터에서 하나의 가상 젠 머신(인스턴스라고 함)을 생성하는 방법과 이 인스턴스를 두 개의 물리적 노드 간에 관리하고 장애 조치하는 방법을 설명합니다.
이 문서는 어떤 종류의 보증 없이 제공됩니다! 이 방법이 귀하에게 작동할 것이라는 보장을 하지 않습니다!
[업데이트 2010/01/21] 가네티 개발 팀으로부터 메시지를 받았습니다:
“ […] 최근 몇 달 동안 사람들이 귀하의 지침을 문자 그대로 따르려 하여 오래되거나 매우 오래된 가네티 버전을 설치하는 불행한 사실을 알게 되었습니다. 두 튜토리얼 모두 최신 가네티 버전으로 업데이트되지 않았다는 주석을 추가해 주시고 사람들이 http://docs.ganeti.org/ganeti/의 최신 문서를 참조하도록 요청해 주실 수 있나요? “
이 튜토리얼은 오래된 가네티 버전을 기반으로 합니다. 최신 문서는 http://docs.ganeti.org/ganeti/를 참조하십시오.
1 사전 참고
이 튜토리얼에서는 물리적 노드 node1.example.com과 node2.example.com을 사용합니다:
- node1.example.com: IP 주소 192.168.0.100; 클러스터의 마스터가 됩니다.
- node2.example.com: IP 주소 192.168.0.101; 가상 머신(인스턴스)의 기본 노드가 됩니다.
두 노드 모두 500GB 하드 드라이브를 가지고 있으며, / 파티션에 20GB, 스왑에 1GB를 사용하고 나머지는 가네티에서 사용할 수 있도록 비워둡니다(최소 20GB 필요!). 물론 파티션을 원하는 대로 변경할 수 있지만, 최소 비어 있는 공간을 기억하세요.
제가 만들 클러스터의 이름은 cluster1.example.com이며, IP 주소는 192.168.0.102입니다. 클러스터 IP 192.168.0.102는 항상 클러스터 마스터에 바인딩되므로, 마스터가 어떤 노드인지 모를 경우에도 클러스터 IP(또는 호스트 이름 cluster1.example.com)를 사용하여 SSH로 마스터에 연결할 수 있습니다.
가네티에서 인스턴스라고 불리는 젠 가상 머신은 inst1.example.com이라는 이름을 가지며, IP 주소는 192.168.0.105입니다. inst1.example.com은 DRBD를 사용하여 두 개의 물리적 노드 간에 미러링됩니다. 이는 일종의 네트워크 RAID1으로 볼 수 있습니다.
보시다시피, node1.example.com은 클러스터 마스터가 되며, 클러스터를 제어하고 관리할 수 있는 머신입니다. node2.example.com은 inst1.example.com의 기본 노드가 되며, inst1.example.com은 node2.example.com에서 실행됩니다(모든 변경 사항은 DRBD를 통해 node1.example.com으로 미러링됨) 노드2를 유지 보수를 위해 중단할 경우 node1.example.com으로 장애 조치할 때까지입니다. 이는 액티브-패시브 구성입니다.
두 노드 간의 역할을 분리하는 것이 좋은 관행이라고 생각합니다. 이렇게 하면 한 노드가 다운되더라도 클러스터 마스터와 기본 노드를 동시에 잃지 않게 됩니다.
여기 언급된 모든 호스트 이름은 모든 호스트에서 확인 가능해야 합니다. 즉, DNS에 존재해야 하거나 모든 호스트의 /etc/hosts 파일에 모든 호스트 이름을 추가해야 합니다(여기서 제가 할 일입니다).
모든 클러스터 노드는 동일한 네트워크 인터페이스를 사용해야 합니다(예: eth0). 한 노드가 eth0을 사용하고 다른 노드가 eth1을 사용하면 가네티가 올바르게 작동하지 않습니다.
좋습니다, 시작해 봅시다…
2 물리적 노드 준비
node1:
node1의 정적 IP 주소를 192.168.0.100으로 설정하고 싶으므로 제 /etc/network/interfaces 파일은 다음과 같습니다(allow-hotplug eth0을 auto eth0으로 변경합니다. 그렇지 않으면 네트워크를 재시작할 수 없으며 전체 시스템을 재부팅해야 합니다):
vi /etc/network/interfaces| # 루프백 네트워크 인터페이스 auto lo iface lo inet loopback # 기본 네트워크 인터페이스 #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
파일을 수정한 경우, 네트워크를 재시작합니다:
/etc/init.d/networking restart그런 다음 /etc/hosts를 편집합니다. 다음과 같이 만듭니다:
vi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # 다음 줄은 IPv6 지원 호스트에 바람직합니다 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
다음으로 명령어
hostname및
hostname -f가 전체 호스트 이름(node1.example.com)을 출력하는지 확인해야 합니다. 다른 결과가 나오는 경우(예: node1만 출력), 다음을 수행합니다:
echo node1.example.com > /etc/hostname
/etc/init.d/hostname.sh start그 후, 호스트 이름 명령어는 전체 호스트 이름을 표시해야 합니다.
그런 다음 시스템을 업데이트합니다:
aptitude updateaptitude safe-upgradenode2:
이제 node2.example.com에서도 동일한 작업을 수행합니다(노드2의 IP가 다르다는 점에 유의하십시오!):
vi /etc/network/interfaces| # 루프백 네트워크 인터페이스 auto lo iface lo inet loopback # 기본 네트워크 인터페이스 #allow-hotplug eth0 #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.0.101 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
/etc/init.d/networking restartvi /etc/hosts| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 node1.example.com node1 192.168.0.101 node2.example.com node2 192.168.0.102 cluster1.example.com cluster1 192.168.0.105 inst1.example.com inst1 # 다음 줄은 IPv6 지원 호스트에 바람직합니다 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |
echo node2.example.com > /etc/hostname
/etc/init.d/hostname.sh startaptitude updateaptitude safe-upgrade3 여유 HDD 공간에 LVM 설정
node1/node2:
하드 드라이브에 대해 알아봅시다:
fdisk -lnode1:~# fdisk -l
디스크 /dev/sda: 500.1 GB, 500107862016 바이트
255 헤드, 63 섹터/트랙, 60801 실린더
단위 = 실린더의 16065 * 512 = 8225280 바이트
디스크 식별자: 0x00023cd1
장치 부팅 시작 끝 블록 Id 시스템
/dev/sda1 * 1 62 497983+ 83 리눅스
/dev/sda2 63 6141 48829567+ 8e 리눅스 LVM
node1:~#이제 두 물리적 노드에서 나머지 하드 드라이브를 사용하여 파티션 /dev/sda3을 생성하고 LVM을 준비합니다:
fdisk /dev/sdanode1:~# fdisk /dev/sda
이 디스크의 실린더 수는 60801로 설정되어 있습니다.
그것은 잘못된 것이 아니지만, 1024보다 크므로 특정 설정에서 다음과 같은 문제를 일으킬 수 있습니다:
- 부팅 시 실행되는 소프트웨어(예: 오래된 LILO 버전)
- 다른 OS에서 부팅 및 파티션 소프트웨어(예: DOS FDISK, OS/2 FDISK)
명령 (도움말은 m): <– n
명령 작업
e 확장
p 기본 파티션 (1-4)
<– p
파티션 번호 (1-4): <– 3
첫 번째 실린더 (6142-60801, 기본값 6142): <– ENTER
기본값 6142 사용
마지막 실린더 또는 +크기 또는 +크기M 또는 +크기K (6142-60801, 기본값 60801): <– ENTER
기본값 60801 사용
명령 (도움말은 m): <– t
파티션 번호 (1-4): <– 3
16진수 코드 (코드 목록은 L): <– L
0 비어 있음 1e 숨겨진 W95 FAT1 80 오래된 미닉스 be 솔라리스 부트
1 FAT12 24 NEC DOS 81 미닉스 / 오래된 리눅스 bf 솔라리스
2 XENIX 루트 39 플랜 9 82 리눅스 스왑 / 소 c1 DRDOS/섹션 (FAT-
3 XENIX usr 3c 파티션매직 83 리눅스 c4 DRDOS/섹션 (FAT-
4 FAT16 <32M 40 베닉스 80286 84 OS/2 숨겨진 C: c6 DRDOS/섹션 (FAT-
5 확장 41 PPC PReP 부트 85 리눅스 확장 c7 시린스
6 FAT16 42 SFS 86 NTFS 볼륨 세트 da 비FS 데이터
7 HPFS/NTFS 4d QNX4.x 87 NTFS 볼륨 세트 db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 리눅스 평문 de 델 유틸리티
9 AIX 부팅 가능 4f QNX4.x 3rd part 8e 리눅스 LVM df 부트잇
a OS/2 부트 매니저 50 온트랙 DM 93 아모바 e1 DOS 접근
b W95 FAT32 51 온트랙 DM6 Aux 94 아모바 BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 스피드스토어
e W95 FAT16 (LBA) 53 온트랙 DM6 Aux a0 IBM 씽크패드 hi eb BeOS fs
f W95 Ext’d (LBA) 54 온트랙DM6 a5 프리BSD ee EFI GPT
10 OPUS 55 EZ-드라이브 a6 오픈BSD ef EFI (FAT-12/16/
11 숨겨진 FAT12 56 골든 보우 a7 넥스트스텝 f0 리눅스/PA-RISC b
12 컴팩 진단 5c 프리암 Edisk a8 다윈 UFS f1 스피드스토어
14 숨겨진 FAT16 <3 61 스피드스토어 a9 넷BSD f4 스피드스토어
16 숨겨진 FAT16 63 GNU HURD 또는 Sys ab 다윈 부트 f2 DOS 보조
17 숨겨진 HPFS/NTF 64 노벨 네트워크 b7 BSDI fs fd 리눅스 raid auto
18 AST 스마트슬립 65 노벨 네트워크 b8 BSDI 스왑 fe LANstep
1b 숨겨진 W95 FAT3 70 디스크 보안 멀티 bb 부트 마법사 hid ff BBT
1c 숨겨진 W95 FAT3 75 PC/IX
16진수 코드 (코드 목록은 L): <– 8e
파티션 3의 시스템 유형을 8e(리눅스 LVM)로 변경했습니다.
명령 (도움말은 m): <– w
파티션 테이블이 변경되었습니다!
ioctl()를 호출하여 파티션 테이블을 다시 읽습니다.
경고: 파티션 테이블을 다시 읽는 데 실패했습니다. 오류 16: 장치 또는 리소스가 사용 중입니다.
커널은 여전히 이전 테이블을 사용합니다.
새 테이블은 다음 재부팅 시 사용됩니다.
디스크 동기화 중.
node1:~#
이제 하드 드라이브를 다시 살펴봅시다:
fdisk -lnode1:~# fdisk -l
디스크 /dev/sda: 500.1 GB, 500107862016 바이트
255 헤드, 63 섹터/트랙, 60801 실린더
단위 = 실린더의 16065 * 512 = 8225280 바이트
디스크 식별자: 0x00023cd1
장치 부팅 시작 끝 블록 Id 시스템
/dev/sda1 * 1 62 497983+ 83 리눅스
/dev/sda2 63 6141 48829567+ 8e 리눅스 LVM
/dev/sda3 6142 60801 439056450 8e 리눅스 LVM
node1:~#좋습니다. 이제 두 물리적 노드를 재부팅하여 커널이 새 파티션 테이블을 읽을 수 있도록 해야 합니다:
reboot재부팅 후, LVM을 설치합니다(아마 이미 설치되어 있을 것이지만, 확실히 하는 것이 좋습니다):
aptitude install lvm2재부팅 후, 두 노드에서 /dev/sda3을 LVM을 위해 준비하고 볼륨 그룹 xenvg에 추가합니다:
pvcreate /dev/sda3
vgcreate xenvg /dev/sda3(가네티는 자체 볼륨 그룹을 사용하고 싶어하므로 xenvg를 생성합니다. 이론적으로는 충분한 비할당 공간이 있는 기존 볼륨 그룹을 사용할 수 있지만, gnt-cluster verify 명령이 이에 대해 불만을 제기할 것입니다.)
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.