UniFi - 거대한 수의 UniFi 장비를 위한 컨트롤러 튜닝하기¶
download at 2017-03-30T00:27:26Z origin
Overview
이 문서는 부하가 많은 컨트롤러를 진단하고, 최적의 성능을 낼 수 있도록 적절한 수정을 어떻게 해야 할지에 대하여 기술합니다.
Table of Contents
3. 증상: 하트비트 없음 혹은 프로비전을 하기에 너무 느린 경우
Introduction
수백개의 장비와 단일 UniFi 컨트롤러와 연결된 여러개의 사이트에 설치된 수많은 UniFi 장비를 관리할 때 몇가지 고려할 점이 존재합니다. 이 부하가 많은 컨트롤러는 부하가 적은 컨트롤러를 관리하는 방식과 동일한 방식으로 설정을 하면 몇가지 이슈를 만날 수 있습니다. 인지하거나 진단할 수 있는 증상이 존재하며, 이 경우에는 컨트롤러의 성능을 향상시킬 수 있는 몇가지 방법이 존재합니다.
Warning
기술된 설정을 진행하기 이전에, 머신과 컨트롤러 설정을 백업하십시오. 오타도 시스템을 다운시킬 수 있습니다.
증상: 높은 CPU 사용도
모니터링하는 가장 중요한 메트릭 중 하나는 UniFi 컨트롤러의 CPU 사용량입니다. 높은 CPU 사용량은 문제가 있다는 것의 첫 지표라고 할 수 있습니다. 불행하게도 이 것에 대한 만능 해결 방책은 없으며, CPU를 추가하는 것도 항상 정답이 되지는 않습니다.
규모를 증가시키기 이전에, `XMX` and `XMS` 옵션을 수 증가시키는 시도를 해보십시오. 기본값으로, UniFi 컨트롤러는 1GB 값을 설정합니다. system.properties 파일의 값에서 다음 엔트리를 수정하여 값을 변경할 수 있습니다. (system.properties 파일에 대한 자세한 설명은 관련 문서 를 참조하십시오.)
unifi.xmx=2048 unifi.xms=2048
하지만, 메모리 증가 이후에도 CPU 사용량이 지속적으로 높게 점유중이라면, 더 고사양의 CPU와 넉넉한 메모리가 이 문제를 해결할 수도 있습니다.
증상: 하트비트 없음 혹은 프로비전을 하기에 너무 느린 경우
횟수에 상관 없이, 모든 장비는 컨트롤러에 자신의 상태를 알리려고 합니다. 기본 값으로 컨트롤러는 장비로부터 동시에 200개의 연결을 제어할 수 있습니다. 그러므로 어떤 장비의 하트비트가 없다는 것은 하나의 컨트롤러가 수천개의 장비를 관라하고 있지 않는한 문제가 되지 않습니다. 관리하는 장비의 수를 수백기 아래로 낮추었을때는 원하는 결과를 얻지 못할수도 있습니다. 동시에 전달 받을 수 있는 메시지의 수는 system.properties의 다음 값을 조정하여 수정할 수 있습니다:
inform.num_thread=200 inform.max_keep_alive_requests=100
max_keep_alive_requests 의 기본 값은 200이며 num_thread 의 수보다 항상 낮아야 합니다. 이 곳에서부터 시작해보십시오: 장비가 꾸준히 증가한다면, 설정 값을 조금 더 높인다면 꾸준히 안정적으로 표시될 수 있습니다.
데이터베이스 커넥션 튜닝
큰 규모의 UniFi 설치를 수행하는 경우에는 외부 몽고 클러스터를 사용하여 UniFi 컨트롤러 애플리케이션으로부터 독자적으로 데이터베이스 규모를 확장할 수도 있습니다. 이에 대한 의견은 here on our community forum 에서 확인할 수 있습니다.
높은 CPU 점유율이 몽고 프로세스에서 감지된다면, 더 사양이 좋은 머신 혹은 mongodb 프로세스를 위에서 언급한 대로 분리가 필요한 것을 의미할 수 있습니다. 위의 작업이 이루어 지고 나면, 다음 작업을 통해서 더 좋은 애플리케이션 성능을 확인할 수 있을 것입니다.
db.mongo.connections_per_host=100 db.mongo.threads_multiplier=5
위의 작업의 결과로 몽고 연결을 위한 500개의 스레드가 생성됩니다. 하지만 더 많은 스레드는 많은 CPU 점유를 의미합니다. CPU는 스레드간 컨텍스트 스위치를 수행하기에 점유가 올라가는 것은 당연합니다. 높은 DB 출력을 얼을 수는 있겠지만, 몽고 프로세스가 더 많은 CPU를 사용하여야지만 요청을 빠르게 처리할 수 있습니다.
결론
성능을 향상시키고 거대한 규모의 작업에서 안전성을 제공하는 가장 좋은 방법은 시스템 자원을 계속 모니터링 하는 것입니다. 모니터링을 넘어서는 데이터베이스의 작업 하중을 오프로딩 하거나 메모리를 증가시켜서 UniFi 컨트롤러로 하여금 더 많은 클라이언트와 장비를 서비스 할수 있도록 하는 것입니다. 이 작업은 자원 사용량과 UniFi 컨트롤러 UI 성능에 반영이 되어야 합니다.
UniFi는 이 모든 것에 대하여 관리 솔루션을 제공하고 있습니다. 더 많은 정보는 이 문서 를 참조하십시오.
관련 문서