MongoDB: Corrigindo o erro ReplicaSet ao reconfigurar - “Tarefa Server :: doWork: rs Exceção do gerenciador: db não autorizado: tipo de bloqueio local: 2 clientes”

1

Pergunta: Como corrijo meus servidores e os levo de volta ao ReplicaSet normal sem mensagens de erro?

Eu ofereço uma recompensa séria, mas todos os meus pontos estão em SO :(

Detalhes do problema

Estou executando um ReplicaSet do MongoDB de 3 nós (1 mestre, 1 escravo, 1 árbitro) em servidores separados. Eu estava brincando com o failover automático, garantindo que meu escravo fosse promovido a mestre adequadamente. Depois que eu dominei e o escravo assumiu como mestre, eu segui as instruções para reeleger meu antigo mestre de volta ao primário ( Forçando um Membro a ser Primário ). Do meu novo PRIMARY, eu corri:

> use admin
> db.auth("admin", "mypassword")
> config = rs.conf()
{
    "_id" : "foo",
    "version" : 1,
    "members" : [
        {
            "_id" : 0,
            "host" : "A",
        },
        {
            "_id" : 1,
            "host" : "B",
        },
        {
            "_id" : 2,
            "host" : "C",
        }
    ]
}
> config.version++
> // the default priority is 1
> config.members[1].priority = 2
> rs.reconfig(config)

Isso gerou um erro, então eu tentei o método # 2:

db.adminCommand({replSetStepDown:1000000, force:1})

Isso pareceu dar errado em meus servidores, fazendo com que nenhum servidor fosse promovido a primário e meu antigo mestre e árbitro começassem a receber os seguintes erros:

Mon Aug 29 19:16:22 [rs Manager] replset msgReceivedNewConfig version: version: 2
Mon Aug 29 19:16:22 [rs Manager] replSet info saving a newer config version to local.system.replset
Mon Aug 29 19:16:22 [rs Manager] Server::doWork task:rs Manager exception:unauthorized db:local lock type:2 client:(NONE)
Mon Aug 29 19:16:22 [initandlisten] connection accepted from 192.168.139.50:28130 #476
Mon Aug 29 19:16:22 [initandlisten] connection accepted from 192.168.132.14:32014 #477
Mon Aug 29 19:16:23 [initandlisten] connection accepted from 192.168.139.50:28133 #478
Mon Aug 29 19:16:23 [initandlisten] connection accepted from 192.168.139.50:28136 #479
Mon Aug 29 19:16:23 [initandlisten] connection accepted from 192.168.132.14:32017 #480
Mon Aug 29 19:16:24 [initandlisten] connection accepted from 192.168.139.50:28139 #481
Mon Aug 29 19:16:24 [rs Manager] replset msgReceivedNewConfig version: version: 2
Mon Aug 29 19:16:24 [rs Manager] replSet info saving a newer config version to local.system.replset
Mon Aug 29 19:16:24 [rs Manager] Server::doWork task:rs Manager exception:unauthorized db:local lock type:2 client:(NONE)
Mon Aug 29 19:16:24 [rs Manager] replSet info not electing self, we are not freshest
Mon Aug 29 19:16:24 [initandlisten] connection accepted from 192.168.139.50:28142 #482
Mon Aug 29 19:16:24 [initandlisten] connection accepted from 192.168.132.14:32020 #483
Mon Aug 29 19:16:25 [initandlisten] connection accepted from 192.168.139.50:28145 #484
Mon Aug 29 19:16:25 [initandlisten] connection accepted from 192.168.139.50:28148 #485
Mon Aug 29 19:16:25 [initandlisten] connection accepted from 192.168.132.14:32023 #486
Mon Aug 29 19:16:26 [initandlisten] connection accepted from 192.168.139.50:28151 #487

Após algumas pesquisas, descobri que isso é um bug com o ReplicaSets:

Algumas informações sobre minha configuração:

  • estou rodando no Mongo 1.8.1
  • eu tenho journal = true
  • eu tenho keyFile = /path/to/file
  • Eu tenho autenticação de usuário ativada (o que parece estar causando o bug)
  • Eu tenho um firewall habilitado com portas 27017-27019 abertas para mongod
  • Tudo estava funcionando bem antes da troca
por Corey Ballou 30.08.2011 / 13:21

1 resposta

1

Como o repórter atualizou a questão, isso foi relatado como um bug e, desde então, foi corrigido em uma versão mais recente do software.

Bug reportado / corrigido aqui: link

Esta questão deve ser marcada como respondida / fechada.

    
por 22.04.2012 / 14:21