2

Wir implementieren den mongodb-Cluster über ansible in der AWS EC2-Instanz. Sobald eine DB-Instanz bereitgestellt ist, geben wir ihr ein entsprechendes Tag für Primary/Secondary. Wir haben 3 Knoten - 1 für Primary und 2 für Secondary.AWS MongoDB-Cluster Bereitstellung über Ansible

Während die ansible Skripte zum ersten Mal ausgeführt wird, werden wir die primäre Instanz von Tag-Typ Auswahl, initiiert es und das Hinzufügen von sekundären Knoten, um es

rs.initiate() 
rs.add(secodnaryHost1) 
rs.add(secondaryHost2) 

Dies funktioniert gut.

Wenn jedoch einer der sekundären die primäre wird, sind unsere Instanz-Tag-Typ - primäre und MongoDB - primäre nicht identisch. Wenn wir in einem solchen Szenario unsere ansible-Skripts ausführen, schlagen sie fehl, weil der primäre Tag-Typ (der jetzt sekundär ist) nicht über Befehle ausgeführt werden kann.

Was sind die besten Möglichkeiten, um solche Diskrepanzen zu beheben?

+0

Es ist nicht hilfreich Tags zu verwenden, um anzuzeigen, welche Knoten die primäre und die sekundäre, weil (wie Sie bemerkt haben), wenn Der vorhandene primäre Knoten wird offline geschaltet und ein anderer Knoten wird [gewählt] (https://docs.mongodb.com/manual/core/replica-set-elections/), um die Rolle des primären Knoten zu übernehmen. Gibt es einen besonderen Grund, warum Ihr Ansible-Skript wissen muss, welcher Knoten der primäre ist? –

Antwort

2

Sie sollten the current status lesen und in einer Vorlage oder über die Befehlszeile entsprechende Einstellungen definieren. Bitte suchen Sie in available ansible-galaxy roles.

PS:

Beispiel Template repset_init.j2 und seine Bestimmung

- name: Create the file to initialize the mongod replica set 
    template: src=repset_init.j2 dest=/tmp/repset_init.js 

- name: Pause for a while 
    pause: seconds=20 

- name: Initialize the replication set 
    shell: /usr/bin/mongo --port "{{ mongod_port }}" /tmp/repset_init.js