VMware/vSphere

vCenter /storage/seat 용량 확보

raccoonnote 2025. 5. 15. 16:49

[개요]

vCenter Server에서 디스크 사용률이 높을 경우 503 에러가 발생할 수 있다. 따라서 용량을 어느정도 확보해줘야한다. /storage/seat의 경우 Postgres로 관리하기 때문에 용량이 부족할 경우 내부 테이블에서 특정기간을 이전의 데이터를 지우는 방식으로 용량을 확보한다.

 

[해결방법]

/storage/seat 로그 파일들은 Postgres로 작업되기 때문에 해당 부분으로 들어가서 확인 후 삭제한다.

 

[용량 회수 방법]

1. vCenter Server root로 접속한다

2. 먼저 서비스를 중지하고 작업을 진행한다. EX) /storage/seat 경우 vpxd, vmware-content-library 중지

3. 아래 명령어로 데이터베이스 로그인한다.

service-control --stop vmware-vpxd && service-control --stop vmware-content-library

 

 

4. 이벤트 소스를 확인한다.

vCetner 6.0

SELECT COUNT(EVENT_ID) AS NUMEVENTS, EVENT_TYPE, USERNAME FROM VPX_EVENT GROUP BY EVENT_TYPE, USERNAME ORDER BY NUMEVENTS DESC LIMIT 10;
vCenter 6.x/7.x/8.x

SELECT COUNT(EVENT_ID) AS NUMEVENTS, EVENT_TYPE, USERNAME FROM VPXV_EVENT_ALL GROUP BY EVENT_TYPE, USERNAME ORDER BY NUMEVENTS DESC LIMIT 10;

 

5. 공간 회수를 위해서 \q로 나가서 아래 명령을 실행한다.

/opt/vmware/vpostgres/current/bin/vacuumdb -d VCDB -e -v -f -U postgres > /tmp/vacuumdb.log

 

 

[데이터베이스에서 이벤트 정리]

정리 전에 반드시 스냅샷을 생성 뒤 작업 진행

1. vCenter에서 아래의 명령어 실행한다.

테이블에서 가장 큰 테이블 상위 20개가 표시된다.

vCenter Server Appliance 6.0의 이벤트 테이블 데이터를 잘라냅니다.

truncate table vpx_event cascade;
truncate table vpx_event_arg cascade;
vCenter Server Appliance 6.x/7.x/8.x

VCDB# SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 20;

 

2. [\d table_name]을 통해서 table_index를 확인하고 아래 명령어를 입력하면 오래된/최신 로그를 확인 가능하다.

table_index, time_index 확인후 수정

가장 오래된 로그 
SELECT * FROM table_index ORDER BY time_index ASC LIMIT 10;

가장 최신 로그
SELECT * FROM table_index ORDER BY time_index DESC LIMIT 10;

 

3. [\d table_name]을 통해서 table_index를 확인하고 아래 명령어를 입력하면 30일 이전 데이터는 삭제된다.

table_name, time_index 부분에 추가

DELETE FROM table_name WHERE time_index < now() - interval '30 days';

 

[추가자료]

스크립트를 사용해서 지우는 방법이 있다. 해당 스크립트는 테이블의 특정 이벤트를 선택해서 지우는 방식이다. 

 

[참고자료]