수년간 ESXi 를 이용해오면서 켜둘줄만 알았지 끄는것을 생각하지 못했습니다.
늘 저희집은 한구석에서 윙~ 소리가 나고 전기세도 꽤 나왔네요.ㅜㅜ
사실 끄고 키는게 귀찮아서 안했다고 핑계대 봅니다 ^^;;
문득 생각나 이제는 새벽시간부터 일과 시작하기 전까지는 꺼두고
일과시간에만 켜서 전기세도 아끼고 밤에도 조용히 해보자 하는 생각으로 구성한 후
잘 작동하길래 혹 필요하신 분 있을까 해서 공유해봅니다.^^;
사실 제가 한건 스크립트 몇 줄 짠거 밖에 없구요..
공개되 있는 정보가 워낙 많아 직접 구성해도 난이도가 그리 높지 않습니다.
그냥 참고용 정도만 생각해 주세요~
### 환경
Server ; HPE Proliant ML 310e Gen8 v2
OS : VMWare Vsphere ESXi 6.7U3
VM : Xpenology 6.2.3
Windows 11
Windows 10
CentOS 5.11
Xpenology 7.0.1
Ubuntu 18.04
## 준비물
Xpenology 종료 예약작업
ESXi용 쉘스크립트
## 전제조건
Xpenolgy 6.2.3은 정상 종료 할 수 있게 텀을 둘 것 - 새벽 02:00
나머지는 테스트용도니 그냥 종료해도 큰 무리 없음
앞 상황 고려해서 ESXi는 02:30 에 종료 진행하도록 구성
## 진행내용
1. 특정 VM 우선 종료
Xpenology 6.2.3 의 예약 종료 작업을 등록합니다.
제어판 - 전원 - 종료 02:00 지정 등록
통해 간단히 마쳐줍니다.
괜히 신경쓰여 전체종료 30분전에 미리 내리기로합니다.
새벽에 영화보기는 이제 포기하려고 합니다 ^^;;
이건 저만 가진 특수 사항이니 생략하시면 됩니다~
2. ESXi 에 ssh 접속
ESXi 내에 쉘스크립트 등록이 필요하므로 ssh 접속합니다.
3. 메인 스크립트 등록
수정가능하고 엑세스하기 좋은 경로에 등록합니다.
OS영역은 아무래도 Baremetal이니 제외하고 /vmfs/volume 하위에 구성된 디스크쪽으로 저는 정했습니다.
# touch /vmfs/volumes/VM_Storage/script/shutdown_esxi.sh |
vi 로 열어 아래의 내용으로 채워줍니다.
#!/bin/sh esxcli vm process list | grep World | awk '{print $3}' | while read LINE_C; sleep 120 VMCNT=`vim-cmd vmsvc/getallvms | grep -v Vmid | wc -l` vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}' | while read LINE_D; |
내용은 생각보다 단순합니다.
이해를 돕기위해 간략히 설명드리면
첫번째 반복문은 현재 VM들에 대해서 soft 방식으로 종료를 진행시킵니다.
나름 gracefully 한 방식으로 조회해서 나온 명령어로 해봤습니다.
각 VM간의 종료 시그널 간격은 10초로 했습니다. 저의경우는 Xpenlogy 외에는 다 가벼운상태라
오래걸릴 필요가 없었습니다.
모든 VM이 종료된 후 120초를 대기했다가..(만약을 대비해..)
헌재 등록된 VM의 수량을 파악합니다.
카운트용 변수하나를 초기화하고
두번째 반복문에서는 각 VM의 전원상태값을 가져와서 off인 대상을 카운트하고
그 카운트가 총 VM개수와 동일하게되면
ESXi를 유지보수관리모드로 변경하고
전원종료를 시작합니다.
이미 VM이 다 꺼졌는데 쓸데없는 동작하네 하실 수 있는데
사실 두번째 반복문을 먼저 만들고 뒤에 첫번째 껄 만들어서 그냥 뒀습니다.
그리고 행여나 종료가 안된 경우에는 문제로 파악해서 진행못하게 하려고...^^;;
암튼, 이렇게 해서 쉘파일 작성 및 저장 후 파일의 권한을 700 또는 755 정도로 만들어줍니다.
# chmod 755 /vmfs/volumes/VM_Storage/script/shutdown_esxi.sh |
4. 트리거 등록
만들어논 쉘파일을 작동하게 해줄 예약작업이 필요합니다.
아래 파일을 열어서 수정합니다.
# vi /etc/rc.local.d/local.sh |
exit 0 항목 위에 아래 내용을 넣어줍니다.
매일 동일한 시간에 예약작업이 수행되도록 crontabs 에 넣어주는 과정입니다.
/bin/echo "30 17 * * * /vmfs/volumes/VM_Storage/script/shutdown_esxi.sh" >> /var/spool/cron/crontabs/root esxcli system maintenanceMode set --enable no |
ESXi 상태는 UTC를 사용하기 때문에 우리가 원하는 KST 시간을 맞추려면 -9 를 해서
계산해 주어야합니다. 저는 02:30 에 진행 하기 때문에 그 보다 9시간 전인 17:30 으로 지정해 줬습니다.
이 경로는 시스템이 시작될 때 수행하는 내용을 넣는 경로입니다.
ESXi는 Baremetal OS라 read-only 특성이 있어 cron 내역을 유지하기 힘들어 매번 부팅할 때 저 예약작업을
넣어주는 방식을 사용하는 것입니다.
따라서 부팅당시에는 정보가 없지만 다올라와서 rc.local.d 아래 내역들이 수행되면 예약작업이 등록되어
우리가 원하는 시간에 진행 할 수 있는겁니다.
예약작업 등록과 더불어 전원종료 전 수행했던 유지보수모드를 다시 해제해 줍니다.
이 명령을 하는 이유는 자동으로 VM들을 시작하게 해주기 위해서입니다.
5. 적용
눈치채셨겠지만 적용을 위해서는 최초 1회 재부팅이 필요합니다.
테스트 할겸 아까 3번에 등록한 스크립트랄 바로 돌려 VM종료 및 ESXi 종료를 해봅니다.
정상 종료 후 전원을 켜서 부팅하시면 그때부터 적용입니다.
6. 자동시작등록
자동시작은 굳이 스크립트가 필요없습니다. (위에 내용 응용하면 스크립트로도 충분히 가능합니다..)
WebUI내에 인터페이스가 갖춰져있어서 쉽게 구성이 가능합니다.
호스트 > 관리 기능에 들어가시면 자동 시작 순서지정과 시작 간격 시작대상 등을 지정해서
자동시작을 등록 할 수 있습니다.
VM 등록 후 전체 설정편집에서 사용으로 전환해주면 작동하게 됩니다.
## 마무리
이렇게 하면 정해놓은 시간에 착착 종료가 되어 조용한 밤을 보낼 수 있습니다 ^^;
이걸 귀찮다고 몇년을 방치하다 이제 적용하네요 ...
스샷을 좀 첨부하려고 했는데 지금시간이.. 03:16... 자동으로 이미 꺼져서.. 키기 귀찮습니다.^^
종료만 늘어놓고 켜는 문제는 그럼?
이러실 것 같네요..
네 죄송합니다. 저는 벤더제품을 사용중이라 iLO가 있어 아침에 핸드폰으로 전원을 켬니다 하하...
impi 구성이 안된분껜 정말 죄송합니다.
WOL이나 여타 다른방법이 제가 아는게 있다면 알려드리겠으나..
그건 저도잘.. 그냥 벤더 제푸..ㅁ.... 죄송합니다....ㅜㅜ
필요하셨던 분게 조금이나마 참고가 되셨길 바라며...
* p.s : 행여나 스크립트에 오류가있거나 하면 지적 부탁드립니다~
모바일에서보니 소스가 엉망이네요 ㅠㅠ
되도록 PC로 봐주세요
¿ä±äÇÏ°Ô ¾µ¼ö Àְڳ׿ä ^^
°í±Þ Á¤º¸ °¨»çµå¸³´Ï´Ù.^^