Balanceamento de carga do MongoDB

1

Eu tenho um aplicativo escrito em java com o tomcat que estou pronto para iniciar o dimensionamento para produção. Pelo que entendi, eu não deveria usar um balanceador de carga com instâncias de roteador mongodb, pois pode causar problemas.

No entanto, entendo que em algum momento precisarei de mais de um roteador Mongo.
Qual é a melhor maneira de fazer isso?

A única maneira de pensar é quando executo várias cópias do meu servidor Tomcat, uso um balanceador de carga para rotear o tráfego para um desses Tomcats e tenho cada Tomcat pré-configurado para usar um roteador mongodb específico. No entanto, eu não acho que isso funcionará muito bem, como se um roteador mongodb fosse desligado, então poderia haver erros, e se um tomcat cair, então estou perdendo um roteador mongodb.

    
por User093203920 28.01.2014 / 06:26

2 respostas

3

Como uma questão prática, você não precisará de mais instâncias do roteador MongoDB até que você tenha um LOTE de servidores (cada um fazendo um LOT do tráfego). Supondo que você chegue a esse ponto, o problema é realmente muito mais fácil de resolver do que você pensa.

Expandindo o que o MrKurt disse, o que você normalmente faria é dividir seus servidores Tomcat em grupos e, em seguida, configurar cada grupo de servidores Tomcat com um conjunto de roteadores do MongoDB para failover.

Portanto, se você tiver 30 servidores Tomcat, poderá dividi-los em três grupos de 10 do Tomcat.
Em seguida, configure um roteador Mongo para cada grupo e configure algo como:

Tomcat Group 1 -> Mongo 1, Mongo 2, Mongo 3
Tomcat Group 2 -> Mongo 2, Mongo 3, Mongo 1
Tomcat Group 3 -> Mongo 3, Mongo 1, Mongo 2

  • Cada grupo de servidores Tomcat está apontando para um roteador Mongo diferente
    Então você não está batendo em um único front-end com todos os seus pedidos.

  • Se o roteador Mongo padrão para um grupo falhar, você passa para o próximo
    Isso é tratado pelo driver de conexão do MongoDB.
    Observe o escalonamento da cadeia de failover, conforme mostrado acima. Isso evita que você descarregue cargas excessivas em qualquer servidor em uma condição de falha única.

  • Se você perder uma única ocorrência de tomcat, não estará "desperdiçando" o roteador Mongo
    Você teria que perder todas as instâncias do Tomcat em um grupo para que um dos roteadores Mongo ficasse ocioso (e mesmo assim não é "desperdiçado": ainda é uma capacidade redundante no caso de falha de outra instância do roteador Mongo.

por 29.01.2014 / 18:17
2

A maioria dos drivers Mongo atualmente pode manipular vários Mongos em uma string de conexão, o driver Java implementou isso a partir de 2.9.0: link

É apenas para failover, no entanto, não o balanceamento de carga. Você normalmente não precisa balancear a carga entre os Mongos, os gargalos estão normalmente nos shards de back-end em uma configuração bem otimizada.

    
por 28.01.2014 / 06:35