Em vez de tentar um comando em todos os membros do conjunto de réplicas para descobrir qual deles é o primário atual, você deve usar uma cadeia de caracteres de conexão do conjunto de réplicas com sua linha de comando mongo
. Opcionalmente, você pode incluir credenciais de nome de usuário e senha na string de conexão, em vez de usar parâmetros de linha de comando separados.
Exemplo usando o shell do MongoDB 3.6.3:
mongo "mongodb://USERNAME:PASSWORD@mngdb-cbt-stg-01:27058,mngdb-cbt-stg-02:27058/DATABASE?replicaSet=cdt_prod_playground" --eval "db.${file%.*}.remove({})"
Você não precisa listar todos os membros do conjunto de réplicas na cadeia de conexão. Eu usei dois no meu exemplo acima, pois isso deve garantir a descoberta do primário em um conjunto de réplicas de três membros (que precisa de 2/3 de membros votantes disponíveis para manter um primário). O driver / cliente determinará os membros atuais contanto que você inclua o replicaSet
name na string de conexão e que pelo menos um dos membros da string de conexão esteja íntegro.
Consulte Formato de URI da cadeia de conexão para obter uma referência das informações disponíveis. opções.
Observe também que chamar db.collection.remove({})
excluirá documentos individuais enquanto mantém as definições de índice. Se você tiver uma quantidade significativa de dados de coleta para remover, seria mais rápido chamar db.colellection.drop()
e recriar todos os índices necessários.
The reason is I need to do this is because I don't know which host is the replica set PRIMARY, so I just have to test it brute force, because I don't have the authorization to run rs.status()
Se você precisar descobrir o programa principal atual, use o comando isMaster
. Esse comando é usado pelos drivers e clientes do MongoDB (como o mongo
shell) como parte da negociação de conexão inicial. Quando conectado a um membro do conjunto de réplicas, a saída isMaster
inclui primary
e outros detalhes para a atual estado do conjunto de réplicas .
Como no MongoDB 3.6, o comando isMaster
não requer autenticação, pois é usado para fornecer informações que os drivers / clientes precisam para a descoberta do servidor e negociar uma conexão autenticada.