Saltstack Large Scale tuning Point
현재 아래 스펙으로 문제없이 운영중
Single master (24 core / mem 32G) VM (syndic node 추가 예정)
Minions 11,000 VM (윈도우:리눅스 8:2)
적절한 튜닝이 꼭 필요함 (튜닝 안하면 여러가지 문제점이 발생됨 / 특히 windows minion 이 많으면...)
아래 설정값 이외 에도 각 환경설정 파일 및 튜닝 포인트를 참고하여 인프라 scale에 맞게 운영해야 한다.
※ 아래 saltstack 튜닝 포인트는 참고 용도로 사용 바랍니다.
서비스 환경(minions 수, master spec, 네트워크 환경)이 틀릴 경우 다양한 이슈가 발생 할수도 있습니다.
- Minion 수천대 ~ 만대이상 일때 이슈 사항
문제점:
Master 서버 부하 문제 Minion이 수천대~ 이상일때 결과 처리에 대한 응답시간 초과현상 windows minion 일때 응답시간이 느림 에러 로그는 종종 worker_thread를 증가 시키라고 함 네트워크 성능 이슈 이외 다양한 에러 레벨 로그 발생..... |
해결 방안
OS 리소스 증설 필요 : cpu, memroy UP (cpu core수는 worker_threads 설정과 관련이 깊음)
salt master OS 네트워크 설정 튜닝 tunning
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.core.rmem_default=87380
sysctl -w net.core.wmem_default=87380
sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'
sysctl -w net.ipv4.tcp_wmem='4096 87380 16777216'
sysctl -w net.ipv4.tcp_mem='16777216 16777216 16777216'
sysctl -w net.ipv4.route.flush=1
salt master OS systemd
Ubuntu 16.x 기준
/lib/systemd/system/salt-master.service
[Unit]
Description=The Salt Master Server
After=network.target
[Service]
LimitCORE=infinity
LimitNOFILE=65535
LimitNPROC=65535
Type=notify
NotifyAccess=all
ExecStart=/usr/bin/salt-master
[Install]
WantedBy=multi-user.target
salt master config 환경설정 최적화
key_cache: 'sched'
timeout: 90
gather_job_timeout: 5
max_open_files: 100000
worker_threads: 500
job_cache: False
salt minion config 튜닝
multiprocessing: False
(윈도우는 쓰레드 기반이라는 구글링 / 여튼 이렇게 해야 윈도우 미니언일때
처리가 빠름 / 리눅스 미니언은 제외)
random_reauth_delay: 120
recon_default: 1000
recon_max: 59000
recon_randomize: True
Minion did not return. [No response] 많이 발생하면
(예를들어 master <-> minions 통신 과정에 라우팅을 많이 거쳐가거나, 중간에 방화벽 같은 장비가 있거나
Azure, amazon 인프라에 서버를 운영 중이라면 아래 사항 참고)
keepalive 관련된 환경 설정 적절하게 셋팅
tcp_keepalive: True
tcp_keepalive_idle: 60
################## 기타 ############################
ex) minions(VM) 몇 천대에 동시에 'HealthService' 라는 프로세스를 내렸다 올린다면,
스토리지 IOPS,CPU,Latency,Bandwidth 가 순간적으로 과부하(증가) 발생됨.
(모든 VM(몇천대)은 스토리지에 이미지가 있음)
운영중 서비스에 영향을 미칠수 있음
그래서 salt 옵션중 -b (batch) 옵션으로 약 100~x개 로 분할하여 실행
아래와 같이 적절하게 나눠서 처리하면 순간적으로 증가하는 부하를 피할수 있음.
salt -G roles:xxx service.start 'HealthService' -b 100
참고 url : https://docs.saltstack.com/en/latest/topics/targeting/batch.html
################## 참고 #################
대용량 스케일에서 튜닝 포인트는 saltstack 공식 홈페이지에 있으나, 실제 운영중인 서비스에 맞게
적절하게 튜닝해야함 sample config (master Large Scale config) 파일은 8000 minion 기준으로 작성되어져 있음)
minion 10,000대 이상이나 그 이상일 경우는 운영하면서 여러가지 이슈가 발생할수 있다.
pupet chef 등 사용해 보았으나 saltstack이 구조적으로 심플하고 여러가지 운영 장점이 많아 saltstack 선택!
다양한 종류의 인프라 구성 자동화 툴 (devops tool) 이 있지만 가장 잘 다룰수 있고 운영 서비스에 적합한 tool을 선택하면 됨.
이외 기본적으로 ZeroMQ방식을 사용중이나 RAET 라는 전송 방식도 사용할수 있다고 한다.
참고 : https://docs.saltstack.com/en/latest/topics/transports/raet/index.html