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.