2012-06-29 9 views
9

Jeśli tak, w jaki sposób?Czy mogę zmienić nazwę zestawu replik, gdy uruchomione są procesy mongod?

Po utworzeniu zestawu replik wybrałem mylące nazwisko; Chciałbym to teraz zmienić.

Nazwa zestawu replik jest wymieniona w /etc/mongod.conf i nie jestem pewien, kiedy to czyta/ponownie czyta. Ponieważ nazwa replika ustawiona może być również przekazywane jako parametr wiersza polecenia, jestem przy założeniu (a obecnie testuje) następujące:

  • po prostu wykorzystuje nazwę zestawu replik raz na starcie podczas synchronizacji z innymi węzłami
  • muszę rekonfiguracji, zatrzymać, zmienić replSet CLI argumentu lub replSet wartość /etc/mongod.conf, a następnie ponownie uruchom

innymi słowy, jestem przy założeniu odpowiedź do mojego pierwotnego pytania brzmi „nie należy ponownie uruchomić” lub "nie, nazwa zestawu replik jest niezmienna". Prawdopodobnie wkrótce to rozwiążę, odkąd próbuję go lokalnie.

+0

Nie, nie możesz tego zrobić. Dlaczego tak chciałeś? –

+1

Wspomnę o tym w moim poście. Jeśli jesteś pewien, że odpowiedź brzmi "nie", dlaczego nie po prostu odpowiedzieć na pytanie? –

+0

Zapomniałem dokładnej procedury zmiany nazwy RS (dlatego nie wysłałem tego jako odpowiedzi), ale z pewnością wymaga to ponownego uruchomienia mongody i usunięcia niektórych danych. –

Odpowiedz

32

Oto jak to zrobić z przestojami:

  1. zatrzymać wszystkie serwery
    • Jeśli autoryzacja jest włączona, upewnij się, że jest ona wyłączona lub zmiany w kolekcji local.system.replset nie może być upoważniony.
  2. Uruchom każdy serwer bez opcji --replSet, wskazując właściwy katalog danych.
  3. Zaktualizuj dokument local.system.replset na każdym serwerze, używając nowej nazwy zestawu replik. Musisz zmienić każdy serwer tutaj.
    Oto jak zaktualizować local.system.replset w Mongo skorupy:

    use local 
    var doc = db.system.replset.findOne() 
    doc._id = 'NewReplicaSetName' 
    db.system.replset.save(doc) 
    db.system.replset.remove({_id:'OldReplicaSetName'}) 
    
  4. Zamknij je ponownie w dół.
  5. Zmień opcję repetycji /etc/mongod.conf na nową nazwę na wszystkich serwerach.
  6. Uruchom je wszystkie, korzystając z oryginalnych opcji.
+0

Pracowałem dla mnie, dzięki! –

+2

Zrobiłem krok 3 w ten sposób: wyciąć cały JSON zwrócony z 'db.system.replset.find()' w powłoce 'mongo', wkleić w edytorze tekstu, zmienić wartość' _id', użyć edytowanego JSON w 'db.system .replset.update ({}, ) '. –

+1

Musisz użyć findOne, nie znaleźć, ale poza tym brzmi dobrze. – kristina

0

nr

Zobacz thread "Change replica set name" in mongodb-user ... Kristina Chodorow twierdzi, że przestój jest konieczne.

Dodam instrukcje, jak zmienić nazwę zestawu replik tutaj (z przestojami), kiedy już to stwierdzę (chyba, że ​​ktoś inny mnie do tego pobije).

+0

Była oficjalna strona wiki, jeśli się nie mylę . –

7

Odpowiedź Kristyny ​​jest dobra, ale krok 3 może przydać się nieco więcej wyjaśnień. W powłoce Mongo edytuj plik db.system.replset tak:

use local 
var doc = db.system.replset.findOne() 
doc._id = 'NewReplicaSetName' 
db.system.replset.save(doc) 
db.system.replset.remove({_id:'OldReplicaSetName'}) 
+1

Powinieneś poprawić oryginalną odpowiedź, jeśli myślisz, że dodajesz wartość. – whihathac

Powiązane problemy