2014-09-08 1 views
2

질문의 출처 : https://groups.google.com/forum/#!topic/logstash-users/cYv8ULhHeE0 아래의 logstash 확장 전략을 비교하면 tcp load balancer는 트래픽/CPU 부하가 균형을 이루면 최상의 성능을 발휘합니다. 그러나 logstash-forwarder의 성격으로 인해 항상 트래픽 균형을 맞추는 것이 어려워 보입니다. < -> logstash tcp connections. 누구나 logstash 노드에서 트래픽/CPU로드를 균형있게 조정하는 것이 좋습니다. 조언 :로그 대시 및 균형로드를 확장하는 더 나은 방법은 무엇입니까?

< 내 시나리오>

  • 10 + 서비스 노드 중앙 logstash 노드에 로그를 전달하는 logstash-전달자 장착 (클러스터)
  • 각 서비스 노드의 로그 평균 처리량, 처리량 감사합니다 일일 분포, 로그 유형의 필터 복잡성은 많이 다릅니다.
    • 로그 평균 처리량 : 예 service_1 : 0.5k 이벤트/초; service_2 : 5k 이벤트/초
    • 처리량 일일 분포 : 예 : service_1의 오전 피크, 밤의 service_2 피크
    • 로그 유형의 필터 복잡도 : service_1의 로그 유형은 300 이벤트/초에서 처리 할 수 ​​있으며 service_2의 로그 유형은 1500 이벤트/초에서 처리 할 수 ​​있습니다.

< TCP 부하 분산> 결국 TCP 연결 량이 모든 logstash 걸쳐 최소 접속 최소 부하로 균형 또는 분산 여부 수단 logstash-전달자와 logstash 사이 지속성있는 TCP 연결 때문에

노드. 모든 logstash 노드에서 트래픽/cpu로드 균형을 보장하지는 않습니다. 내 시나리오에 따르면 각 TCP 연결의 트래픽은 시간이 지남에 따라 일일 평균에 따라 다르며 이벤트 복잡성이 있습니다. 악화 된 경우 logstash_1과 logstash_2는 모두 10 개의 TCP 연결을 가지고 있지만 logstash_1의 연결에 트래픽이 많고 복합기 이벤트가 있기 때문에 logstash_1의 CPU로드가 logstash_2의 3 배가 될 수 있습니다.

< 수동 할당 logstash - 포워더는 우리가 역사적 일 평균 트래픽을 기반으로 부하를 분산으로 계획 할 수 있기 때문에>

는, TCP 부하 분산과 같은 상황에 직면 할 수 있음 logstash,하지만 그것은 시간이 지남에 따라 변경없이 물론이지.

< 메시지 큐>

아키텍처로서 : 서비스 logstash-전달자와 노드 -> queuer : rabbitmq에 logstash -> 인덱서 : rabbitmq에서 logstash 및 CPU 오버 헤드 주위

  • 30 % ElasticSearch 할 모든 노드에 대해 큐 브로커와 메시지를주고받을 때.
+1

최상의 확장 옵션은 많은 데이터를 효율적으로 수신하고 전송할 수있는 중간/브로커/버퍼를 갖는 것입니다. Logstash는 메시지 스트림을 처리하기 위해 만들어 졌으므로 브로커로 redis/rabbitqm/sqs를 사용하는 것이 좋습니다. 이렇게하면 분리 된 이후 전달자와 인덱서를 독립적으로 조정할 수 있습니다. – Frank

+0

logstash의 성능을 보완하기위한 또 다른 노드가 있기 때문에 클러스터 된 환경에서 logstash의 cpu 오버 헤드에 신경 쓰지 않아도됩니다. – Frank

+0

조언을 주셔서 고마워, 나는 중간 중개인 접근법도 좋아한다. 그러나 rabbitMQ에서 msg를 소비/생성하는 모든 노드에서 여분의 CPU 30 %는 리소스 제약 조건에 많은 피해를주었습니다. 즉, tcp load balancer와 동일한 처리량을 얻기 위해 노드를 1.5 ~ 2 배까지 예약 할 수 있습니다. 비용이 내 보스의 관심사 인 곳. –

답변

1

질문의 한 측면에 초점을 맞 춥니 다. 이는 RabbitMQ 클러스터의로드 밸런싱입니다. RabbitMQ 클러스터는 항상 단일 마스터 노드와 0 ... n 슬레이브 노드로 구성됩니다. 따라서 round-robin, leastconn 등을 구현하는 대신 마스터 노드에 강제로 연결하는 것이 바람직합니다.

RabbitMQ는 Load Balancer가 다른 노드로 라우트하는 경우에도 자동으로 트래픽을 마스터 노드로 자동 라우팅합니다. This posts explains the concept.

관련 문제