UniFi - 거대한 수의 UniFi 장비를 위한 컨트롤러 튜닝하기

download at 2017-03-30T00:27:26Z origin

 Overview


이 문서는 부하가 많은 컨트롤러를 진단하고, 최적의 성능을 낼 수 있도록 적절한 수정을 어떻게 해야 할지에 대하여 기술합니다.

Table of Contents


1. Introduction

2. 증상: 높은 CPU 사용도 

3. 증상: 하트비트 없음 혹은 프로비전을 하기에 너무 느린 경우

4. 데이터베이스 커넥션 튜닝

5. 결론

6. 관련 문서


Introduction


맨위로 가기

수백개의 장비와 단일 UniFi 컨트롤러와 연결된 여러개의 사이트에 설치된 수많은 UniFi 장비를 관리할 때 몇가지 고려할 점이 존재합니다. 이 부하가 많은 컨트롤러는 부하가 적은 컨트롤러를 관리하는 방식과 동일한 방식으로 설정을 하면 몇가지 이슈를 만날 수 있습니다. 인지하거나 진단할 수 있는 증상이 존재하며, 이 경우에는 컨트롤러의 성능을 향상시킬 수 있는 몇가지 방법이 존재합니다.

Warning

기술된 설정을 진행하기 이전에, 머신과 컨트롤러 설정을 백업하십시오. 오타도 시스템을 다운시킬 수 있습니다.


증상: 높은 CPU 사용도


맨위로 가기

모니터링하는 가장 중요한 메트릭 중 하나는 UniFi 컨트롤러의 CPU 사용량입니다. 높은 CPU 사용량은 문제가 있다는 것의 첫 지표라고 할 수 있습니다. 불행하게도 이 것에 대한 만능 해결 방책은 없으며, CPU를 추가하는 것도 항상 정답이 되지는 않습니다.

규모를 증가시키기 이전에, `XMX` and `XMS` 옵션을 수 증가시키는 시도를 해보십시오. 기본값으로, UniFi 컨트롤러는 1GB 값을 설정합니다. system.properties 파일의 값에서 다음 엔트리를 수정하여 값을 변경할 수 있습니다. (system.properties 파일에 대한 자세한 설명은 관련 문서 를 참조하십시오.)

unifi.xmx=2048
unifi.xms=2048
단위는 MB 입니다.
위의 값을 변경하면 UniFi 컨트롤러가 사용할 수 있는 메모리를 1GB에서 2GB에서 증가함을 의미합니다. 충분한 메모리가 높은 CPU 사용점유를 일으키지 않는 이유는 자바 버추얾 머신이 너무 많은 CPU 사이클을 사용하여 1GB 메모리에 데이터를 저장하기 위해 가비지 컬렉션을 수행하기 때문입니다. 그러므로 CPU를 추가하기 이전에 위의 설정을 사용하여 머신의 사용 가능한 메모리 값을 증가시키는 것을 권장합니다. 이후에 CPU 사용량이 감소하는지 확인해보십시오.

하지만, 메모리 증가 이후에도 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는 이 모든 것에 대하여 관리 솔루션을 제공하고 있습니다. 더 많은 정보는 이 문서 를 참조하십시오.


관련 문서


맨위로 가기