VMWare

[서울대병원] wd api 사용 중 "502 Bad Gateway" 에러 발생


# 증상

- wd analyzer api 사용 중 "502 Bad Gateway" 에러 발생


# 원인

- 리눅스 named 서비스 종료 됨 (리눅스 로그상 1/19 15시 종료 됨) 

- named 서비스 확인 (명령어 : systemctl status named)


# 조치

- named 서비스 시작 (명령어 : systemctl start named)

- pod 상태 확인 및 재시작


# 특이 사항 (사내 서버 테스트 내용)

- bastion named 서비스가 종료되어도 wd api 사용 가능

- cp4d web 접속 및 로그인 가능

- openshift web 접속 불가

<= 원인을 파악 방안에 대해 조사 또는 관련 senior들의 견해나 확인 방법 의논 필요함 (박성진)

[삼성리서치] wd 개발 서버 rabbitmq pod 재시작 불가 에러


# 증상

- wd 개발 서버에 인덱싱 안되어 rabbitmq pod 재시작

- rabbitmq pod 2개중 1개 재시작 불가


# 원인

- wd 개발 서버 리스소 부족으로 해당 워커 노드에 pod 배포 불가


# 조치

1. rabbitmq pod 배포 불가능한 워커노드 확인

- 명령어 : oc get pod -o wide | grep rabbitmq

2. 위 1번에서 확인한 워커노드에 pod 배포 안되도록 설정

- 명령어 : oc adm cordon <worker node name>

3. 배포 안됐던 rabbitmq pod 삭제 

- 명령어 : oc delete pod <rabbitmq pod name> --force=true

- pod가 삭제되고 다른 워커노드에 pod 배포 확인

4. 위 2번에서 워커노드 pod 배포 안되록 설정했던 내용 원복

- 명령어 : oc adm uncordon <worker node name>

<= 근본 원인이라고 한 위의 서버리소스 부족인지는 어떻게 확인 가능합니까?
<= 리소스 부족 해소 방법은 무엇인지?

VM 인스턴스 실행 불가능 ESXi/ESX error: No free space left on device

# 조치 내용
  1. VMware firmware (OS) Update: 보안 패치 및 안정성, 버그 수정 등 23년 1월 정기 패치 팩
  2. 각 VM에 sched.swap.vmxSwapEnabled : False 항목 추가
  3. 각 VM에 할당 된 메모리를 162G -> 160G로 변경 및 인스턴스 시작 시 fixed 100% 메모리 할당이 아닌 1/3만 할당하고, 이용률에 따라 추가 할당하는 것으로 변경

# 원인
자원을 100% 할당하여 여분공간이 없음으로 인해 발생한 현상임. 통상 10%의 여유공간 (margin)을 추는 것을 권고하고 있음.



# 분석
VMWare는 기본 옵션으로 memory overcommit에 대비하여, 개별 VM 인스턴스 당 스왚파일을 생성 함.
  1. 이 스왚 파일은 해당 VM이 가진 메모리 총량과 동일한 크기임.
  2. 이 스왚이 생기는 이유는 메모리 공유 기능을 이용하여 물리 메모리가 10G인데 실제 VM에는 20G를 할당할 수 있기에, 오버 커밋이 발생하여 물리 메모리가 모자란 경우 디스크에 있는 스왚파일을 메모리 처럼 이용하기 위한 기능
  3. 그러나 일산병원의 시스템은 메모리를 오버커밋 하지 않고 100% VM에 맞게 할당하여 이 기능이 필요 없음
  4. 이 기능을 끔으로서 메모리 크기와 같은 디스크 공간인 0.5G를 확보 함.
  5. 현재 전체 공간 4.24TB 중 사용 3.77TB


그러면 기존에는 왜 문제가 없었나?
스토리지 할당 방식이 Thin Provisioning 방식이었기 때문임.
Thin Provisioning 은 처음부터 고정 공간으로 디스크를 할당하는 것이 아닌, 사용한 만큼만 디스크를 자치하게 되어있음.
전체 스토리지 공간을 VM에 100% 할당하기는 했으나, 시스템 초기에는 공간이 남아있어 문제가 없었을 것이고, 시간이 지남에 따라 메모리 스왚 기능과 겹쳐 공간 부족을 야기 함.


VM이 실제 쓰는 사용량은 매우 적다. 공간이 부족한 것이 맞는가?
현대의 파일 시스템에서 파일을 지울 때 실제로는 지우는 것이 아니고, 인덱스에서만 제거하고 포인터만 옮겨갑니다.
시스템을 쓰면서 임시 파일이 생성되고 사라지는데, 실제로 지워지는 건 아니고 다만 빈 공간으로 포인터만 옮겨 간 것임.

때문에 Thin Provisioning 된 디스크는 시간이 지남에 따라 그 크기가 커지게 됩니다. 그리고 어느 시점에 이르러 디스크 부족 사태를 야기하게 됩니다.

기타

기타

USB 장치에 VMFS를 만들어 ESXi 시스템에서 사용하기

# USB를 호스트에서 사용할 수 있도록 설정 변경

ESXi 시스템에 USB 장치가 연결 되면 ESXi는 이걸 VM에서만 인식할 수 있는 형태로 인식한다. 때문에 호스트인 ESXi에서 사용하기 위해서 약간의 설정 변경이 필요하다.

방법 1 - Disable usbarbitrator service
Navigate to ESX > Configure > System > Advanced System Settings and click "Edit"
Search for USB.arbitratorAutoStartDisabled and set the Value to 1
Reboot the ESXi

방법 2 alternative option
Connect to the ESXi host with SSH
Stop the USB arbitrator service.
    /etc/init.d/usbarbitrator stop
Permanently disable the USB arbitrator service after reboot.
    chkconfig usbarbitrator off
No reboot is required



# USB 장치에 VMFS 파티션 만들기
USB 장치는 GUI 환경에서는 다룰 수 없기에 콘솔에 접속할 수 있어야 한다.

호스트 -> 관리 -> 서비스 항목으로 이동,
TSM-SSH를 활성화 해준다.

콘솔에 접속해서 vdq -q 명령을 통해 장치를 확인.

[
   {
      "Name"     : "naa.5000cca2b089ea6c",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
"StoragePoolState": "Ineligible for use by Storage Pool",
"StoragePoolReason": "Has partitions",
      "IsSSD"    : "0",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
      "Size(MB)" : "11444224",
    "FormatType" : "512e",
   "IsVsanDirectDisk" : "0"
   },

   {
      "Name"     : "mpx.vmhba32:C0:T0:L0",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
"StoragePoolState": "Ineligible for use by Storage Pool",
"StoragePoolReason": "Has partitions",
      "IsSSD"    : "0",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
      "Size(MB)" : "117348",
    "FormatType" : "512n",
   "IsVsanDirectDisk" : "0"
   },

   {
      "Name"     : "t10.NVMe____Samsung_SSD_970_PRO_512GB_______________E93640115C382500",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
"StoragePoolState": "Ineligible for use by Storage Pool",
"StoragePoolReason": "Has partitions",
      "IsSSD"    : "1",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
      "Size(MB)" : "488386",
    "FormatType" : "512e",
   "IsVsanDirectDisk" : "0"
   }
]

위와 같은 결과 값이 나오는데, USB 장치는 보통 mpx. 으로 시작한다.


# 파티션 작업
먼저 파티션 테이블을 만들어야 한다. VMWare에서는 GPT 형식만 지원한다.


partedUtil mklabel /dev/disks/mpx.vmhba32:C0:T0:L0 gpt


이제 제대로 만들어 졌는지 확인 해 보자.

partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 

gpt
14959 255 63 240328704

라고 나오면 정상이다. 숫자는 디스크 크기에 따라 다르다.
참고로 위의 숫자의 의미는 다음과 같다.

 

rtaImage.jpg

파티션을 만들기 위해서는 마지막 섹터를 알아야 하는데, 마지막 숫자에서 2048을 뺀 숫자가 된다.
위의 예제에서는 240328704 - 2048 = 240326656 이 마지막 섹터가 된다.

이제 파티션을 만들어 보자.

partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 <마지막 섹터> AA31E02A400F11DB9590000C2911D1B8 0"

와 같은 형식이고, AA31E02A400F11DB9590000C2911D1B8의 의미는 파티션 형태가 VMFS라는 뜻이다.
partedUtil showGuids 명령을 통해 VMWare ESXi에서 만들수 있는 파티션 GUID의 목록을 볼수 있다.

위의 예제에서는

partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 240326656  AA31E02A400F11DB9590000C2911D1B8 0"

라고 입력한다.

gpt
0 0 0 0
1 2048 240326656 AA31E02A400F11DB9590000C2911D1B8 0

처럼 결과가 나오면 성공한 것이다.

 


# 데이터스토어를 만들고 이를 시스템에 탑재하기
명령의 형식은 아래와 같다.

vmkfstools -C vmfs6 -S <이름> /dev/disks/<deviceID>:1

이름은 내가 원하는 DataStore의 이름이고, <deviceID>:1에서 :1은 해당 장치의 첫 번째 파티션이라는 의미이다.

vmkfstools -C vmfs6 -S usb_store /dev/disks/mpx.vmhba32:C0:T0:L0:1

실행 해보자.

create fs deviceName:'/dev/disks/mpx.vmhba32:C0:T0:L0:1', fsShortName:'vmfs6', fsName:'usb_store'
deviceFullPath:/dev/disks/mpx.vmhba32:C0:T0:L0:1 deviceFile:mpx.vmhba32:C0:T0:L0:1
ATS on device /dev/disks/mpx.vmhba32:C0:T0:L0:1: not supported.
Checking if remote hosts are using this device as a valid file system. This may take a few seconds...
Creating vmfs6 file system on "mpx.vmhba32:C0:T0:L0:1" with blockSize 1048576, unmapGranularity 1048576, unmapPriority default and volume label "usb_store".
Successfully created new volume: 63bfb975-7328d029-c8f4-2cf05df47a0d

이제 웹콘솔 스토리지로 이동하면 만든 usb store가 보일 것이다.

usb_store.jpg

 

만약 추가한 USB 장치가 하드디스크라면 더 이상 할 작업은 없지만, 메모리 스틱이나 SSD인 경우에는 드라이브 유형을 비SSD에서 SSD로 바꿔줄 필요가 있다. 이 항목은 다음의 문서를 참고하면 더 자세한 정보를 얻을 수 있다.
https://kb.vmware.com/s/article/2013188


먼저, SSD로 선언이 가능하도록 아래의 명령을 실행한다.

esxcli system settings advanced set -o /Disk/AllowUsbClaimedAsSSD -i 1


그후 USB 장치의 정보를 불러온다.

esxcli storage nmp device list

mpx.vmhba32:C0:T0:L0
   Device Display Name: Local USB Direct-Access (mpx.vmhba32:C0:T0:L0)
   Storage Array Type: VMW_SATP_LOCAL
   Storage Array Type Device Config: SATP VMW_SATP_LOCAL does not support device configuration.
   Path Selection Policy: VMW_PSP_FIXED
   Path Selection Policy Device Config: {preferred=vmhba32:C0:T0:L0;current=vmhba32:C0:T0:L0}
   Path Selection Policy Device Custom Config: 
   Working Paths: vmhba32:C0:T0:L0
   Is USB: true

Storage Array Type을 눈여겨 봐야한다. 다음의 명령을 실행할 때 동일한 타입으로 선언 해 주어야 하기 때문이다.

esxcli storage nmp satp rule add --satp=<SATP_TYPE> --device <장치이름> --option "enable_ssd"

위의 예제의 경우 다음과 같이 입력한다.

 

esxcli storage nmp satp rule add --satp=VMW_SATP_LOCAL --device mpx.vmhba32:C0:T0:L0 --option "enable_ssd"

 


명령 수행 후, 아래의 명령을 실행 해 보면

esxcli storage core device list -d mpx.vmhba32:C0:T0:L0 | grep SSD
Is SSD: false

 

라고 나온다. 실망하지 말고 VMWare ESXi를 리부팅 해보자.

부팅 후에는 Is SSD: true 라는 메시지를 볼 수 있으며, 웹 콘솔에서도 SSD로 표기가 된다.