saltstack 사용법 및 최적화 팁

SYSTEM/TECH / /
반응형

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

 

그리고 ZeroMQ 관련 값 아래와 같이 적절하게 조정
 
zmq_backlog: 3000
pub_hwm: 3000
salt_event_pub_hwm: 128000
event_publisher_pub_hwm: 64000
 
 
salt Minion이 winodws  or 노드수(minion) 수천대~ 이상일때 minion 환경 설정
 

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  

 

 

 

 

 

 

 

 

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기