개요
이 시리즈의 마지막 편에서는 파티션 구조 적용 이후 Zabbix 서버의 내부 캐시 및 프로세스 튜닝을 통해
DB와 서버 프로세스 간의 I/O 밸런스를 맞추는 과정을 다룬다.
특히 Zabbix의 Housekeeper 기능을 완전히 비활성화하고,CacheSize, HistoryCacheSize, TrendCacheSize, StartDBSyncers 등 주요 항목을 조정해
대규모 환경에서도 안정적인 동작을 유지하도록 구성한다.
1) Housekeeper 비활성화
Housekeeper는 오래된 데이터를 주기적으로 삭제하는 프로세스다.
하지만 이미 파티션 기반 자동 삭제 스크립트를 운영 중이라면,
이 기능은 중복되고 불필요한 부하만 유발한다.
Zabbix 7.4 기준으로 웹 UI에서 직접 비활성화해야 한다.
경로:Administration → Housekeeping
| 항목 | 설정값 | 설명 |
|---|---|---|
| Events and alerts | ☐ (끄기) | 이벤트 로그 자동 삭제 중단 |
| Services | ☐ (끄기) | SLA 관련 서비스 이력 유지 안 함 |
| User sessions | ☑ (유지) | 사용자 세션만 유지 |
| History | ☐ (끄기) | DB 파티션 스크립트가 처리함 |
| Trends | ☐ (끄기) | DB 파티션 스크립트가 처리함 |
⚙️ Housekeeper가 남아 있으면, 대량 삭제 시 MySQL I/O를 잠시 정지시킬 수 있다.
파티션 구조 기반 환경에서는 반드시 비활성화해야 한다.
2) Zabbix 서버 캐시 및 프로세스 튜닝
설정 파일: /etc/zabbix/zabbix_server.conf
아래 항목들을 찾아 주석을 제거하고, 환경에 맞게 수정한다.
| 항목 | 설명 | 권장값 (RAM 128G 기준) |
|---|---|---|
| CacheSize | 설정 캐시(호스트/템플릿 구조 저장) | 256M ~ 512M |
| HistoryCacheSize | 실시간 메트릭 캐시 | 512M ~ 1G |
| TrendCacheSize | Trend 집계 캐시 | 256M 이상 |
| ValueCacheSize | 최근 값 캐시 (트리거 판단용) | 512M 이상 |
| StartDBSyncers | DB write 병렬 sync 프로세스 | 8~16 |
| StartPollers | Poller 프로세스 수 (호스트 수 / 50) 정도 | 환경별 조정 |
vi /etc/zabbix/zabbix_server.conf
예시:
CacheSize=512M
HistoryCacheSize=1G
TrendCacheSize=512M
ValueCacheSize=512M
StartDBSyncers=12
StartPollers=20
변경 후 적용:
systemctl restart zabbix-server
3) MySQL InnoDB 튜닝
설정 파일: /etc/mysql/mysql.conf.d/mysqld.cnf
서버 메모리 128G 기준의 안정적인 값 예시는 다음과 같다.
innodb_buffer_pool_size = 72G
innodb_log_file_size = 1G
innodb_flush_log_at_trx_commit = 2
innodb_doublewrite = 1
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_buffer_pool_instances = 4
| 항목 | 설정값 | 평가 |
|---|---|---|
| innodb_buffer_pool_size = 72G | RAM의 56~60% 수준, 적정 | ✅ |
| innodb_log_file_size = 1G | 안정성 중심, I/O 폭주 방지 | ⚙️ (쓰기량 많으면 4G 추천) |
| innodb_flush_log_at_trx_commit = 2 | 성능 중심(안정성 유지) | ✅ |
| innodb_doublewrite = 1 | innodb_doublewrite=0 은 NVMe의 높은 IOPS와 병렬 쓰기 성능 덕분에 성능상 궁합은 좋지만, 전원 장애나 커널 패닉 시 페이지 찢김(torn page) 이 발생할 수 있다. 따라서 운영 DB에서는 안정성을 위해 innodb_doublewrite=1 유지가 정석이다. | ✅ |
| innodb_flush_method = O_DIRECT | OS 캐시 중복 방지 | ✅ |
| innodb_io_capacity = 2000 | NVMe 기준 적정, 여유 시 3000~4000도 가능 | ✅ |
| innodb_read/write_io_threads = 8 | 충분 | ✅ |
| innodb_buffer_pool_instances = 4 | 72G 환경에서 권장 범위 | ✅ |
적용 후:
systemctl restart mysql
4) 점검 및 검증
- Housekeeper 중지 확인
- Zabbix UI →
Administration → Housekeeping - 관련 항목이 비활성화 상태인지 확인
- Zabbix UI →
- 서버 캐시 상태 확인
zabbix_server.log내 “Value cache size” 문구가 정상인지 체크- 부족 시 “Cache size cannot be increased” 경고 발생 여부 확인
- DB I/O 상태 확인
iostat -x 2 | grep mysql- 파티션·크론 구조 정상 작동 시 I/O 사용률이 일정하게 분산돼야 함
- Zabbix 대시보드 반응 속도 테스트
- 그래프/이벤트 탭 로딩 속도가 체감상 빨라지면 효과 정상
5) 결과 및 정리
| 단계 | 주요 효과 |
|---|---|
| Housekeeper 비활성화 | 중복 삭제 제거, DB 부하 감소 |
| 캐시 확장 | 메모리 기반 데이터 접근 증가, I/O 감소 |
| DB 파라미터 튜닝 | InnoDB 처리율 향상, Commit 효율 개선 |
| 전체 효과 | 파티션 기반 I/O 최적화 + Zabbix 프로세스 밸런스 완성 |
💡 이제 Zabbix는 수집·보존·삭제의 전체 주기가 자동화된 완전한 구조로 동작한다.
일별·월별 파티션 분리, 자동 크론 관리, 캐시 튜닝이 모두 결합되면
Zabbix DB의 병목은 사실상 제거된다.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.
🛠 마지막 수정일: 2025.10.28
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.