Quando você está executando em uma configuração compartilhada, você não deve se conectar aos conjuntos de réplicas individualmente, em vez disso, basta conectar-se ao mongos e ele fará o proxy das conexões de volta ao shard apropriado. Você já tentou substituir sua configuração atual para apontar apenas para o host mongos (e porta) em vez do conjunto de réplicas?
Eu assumo não, já que os mongos não retornariam o erro "not master". Dado esse erro, eu também daria uma olhada em cada conjunto de réplicas individualmente e executaria o rs.status () para verificar se seus conjuntos de réplicas têm um primário.