MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Die Grundlagen der Bereitstellung eines MongoDB-Replikatsatzes und von Shards mit Puppet

Datenbanksysteme funktionieren am besten, wenn sie in einige gut definierte Ansätze integriert sind, die sowohl den Lese- als auch den Schreibdurchsatz erleichtern. MongoDB ging noch einen Schritt weiter, indem es Replikation und Sharding mit dem Ziel umfasste, horizontale und vertikale Skalierung zu ermöglichen, im Gegensatz zu relationalen DBMs, deren gleiches Konzept nur die vertikale Skalierung verbessert.

 Sharding sorgt für eine Lastverteilung zwischen den Mitgliedern des Datenbankclusters, sodass die Lesevorgänge mit geringer Latenz ausgeführt werden. Ohne Sharding kann die Kapazität eines einzelnen Datenbankservers mit einem großen Datensatz und Operationen mit hohem Durchsatz technisch herausgefordert werden und zum Ausfall dieses Servers führen, wenn die erforderlichen Maßnahmen nicht berücksichtigt werden. Wenn beispielsweise die Abfragerate sehr hoch ist, wird die CPU-Kapazität des Servers überlastet.

Replikation hingegen ist ein Konzept, bei dem verschiedene Datenbankserver die gleichen Daten enthalten. Es gewährleistet eine hohe Datenverfügbarkeit und verbessert die Datenintegrität. Nehmen Sie ein Beispiel für eine leistungsstarke Social-Media-Anwendung:Wenn das Hauptdatenbanksystem ausfällt, wie im Falle eines Stromausfalls, sollten wir ein anderes System haben, das dieselben Daten bereitstellt. Ein gutes Replica-Set sollte mehr als 3 Mitglieder, einen Arbiter und optimales electionTimeoutMillis haben. Bei der Replikation haben wir einen Master-/Primärknoten, auf dem alle Schreibvorgänge durchgeführt und dann auf ein Oplog angewendet werden. Aus dem Oplog werden dann alle vorgenommenen Änderungen auf die anderen Mitglieder angewendet, die in diesem Fall als sekundäre Knoten oder Slaves bezeichnet werden. Falls der primäre Knoten nach einiger Zeit nicht kommuniziert:electionTimeoutMillis, wird den anderen Knoten signalisiert, dass sie eine Wahl anstreben. Der electionTimeoutMillis sollte weder zu hoch noch zu niedrig eingestellt werden, da die Systeme für lange Zeit ausfallen und daher viele Daten verlieren oder häufige Wahlen auftreten, die auch bei vorübergehender Netzwerklatenz und damit Dateninkonsistenz resultieren können. Ein Arbiter wird verwendet, um einem Gewinnermitglied eine Stimme zu geben, um ein Meister zu werden, falls es ein Unentschieden gibt, aber er trägt keine Daten wie die anderen Mitglieder.

Warum Puppet zum Bereitstellen eines MongoDB-Replikatsatzes verwenden

Häufiger wird Sharding Hand in Hand mit Replikation verwendet. Das Konfigurieren und Verwalten eines Replikatsatzes ist aus folgenden Gründen nicht einfach:

  1. Hohe Wahrscheinlichkeit menschlicher Fehler
  2. Unfähigkeit, sich wiederholende Aufgaben automatisch auszuführen
  3. Zeitaufwändig, besonders wenn eine große Anzahl von Mitgliedern involviert ist
  4. Mögliche Arbeitsunzufriedenheit
  5. Überwältigende Komplexität, die entstehen kann.

Um die skizzierten Rückschläge zu überwinden, begnügen wir uns mit einem automatisierten System wie Puppet, das viele Ressourcen hat, die uns helfen, mit Leichtigkeit zu arbeiten.

In unserem vorherigen Blog haben wir den Prozess der Installation und Konfiguration von MongoDB mit Puppet kennengelernt. Es ist jedoch wichtig, die grundlegenden Ressourcen von Puppet zu verstehen, da wir sie zum Konfigurieren unseres Replikatsatzes und unserer Shards verwenden werden. Falls Sie es verpasst haben, ist dies die Manifestdatei für den Prozess der Installation und Ausführung Ihrer MongoDB auf dem von Ihnen erstellten Computer

​  package {'mongodb':

    ensure => 'installed',

  }

  service {'mongodb':

    ensure => 'running',

    enable => true

  }

Also können wir den obigen Inhalt in eine Datei namens runMongoDB.pp einfügen und mit dem Befehl 

ausführen
$ sudo apply runMongoDB.pp

Singen Sie das 'mongodb'-Modul und die Funktionen, wir können unseren Replikatsatz mit den entsprechenden Parametern für jede mongodb-Ressource einrichten.

MongoDB-Verbindung

Wir müssen eine Mongodb-Verbindung zwischen einem Knoten und dem Mongodb-Server herstellen. Das Hauptziel besteht darin, zu verhindern, dass Konfigurationsänderungen angewendet werden, wenn der mongodb-Server nicht erreichbar ist, aber möglicherweise für andere Zwecke wie die Datenbanküberwachung verwendet werden kann. Wir verwenden den mongodb_conn_validator

mongodb_conn_validator{‘mongodb_validator’:

ensure => present,

     server: ‘127.0.0.1:27017’,

     timeout: 40,

     tcp_port:27017

    }

name:  in diesem Fall definiert der Name mongodb_validator die Identität der Ressource. Es könnte auch als Verbindungszeichenfolge betrachtet werden

Server:Dies kann eine Zeichenfolge oder ein Array von Zeichenfolgen sein, die DNS-Namen/IP-Adressen des Servers enthalten, auf dem mongodb ausgeführt werden soll.

timeout:Dies ist die maximale Anzahl von Sekunden, die der Validator warten sollte, bevor er entscheidet, dass die puppetdb nicht läuft.

tcp_port:  Dies ist ein Anbieter für die Ressource, die die Mongodb-Verbindung validiert, indem versucht wird, eine https-Verbindung zum Mongodb-Server herzustellen. Das Setup des Puppet-SSL-Zertifikats aus der lokalen Puppet-Umgebung wird bei der Authentifizierung verwendet.

Datenbank erstellen

mongodb_database{‘databaseName’:

ensure => present,

     tries => 10

}

Diese Funktion benötigt 3 Parameter, nämlich:

name:  in diesem Fall definiert der Name databaseName den Namen der Datenbank, die wir erstellen, die auch als name => „databaseName“ deklariert worden wäre.

trys:Dies definiert die maximale Anzahl von zwei Sekunden Versuchen, um auf den Start von MongoDB zu warten

MongoDB-Benutzer erstellen

Das Modul mongodb_user ermöglicht das Erstellen und Verwalten von Benutzern für eine bestimmte Datenbank im Puppet-Modul.

mongodb_user {userprod:

  username => ‘prodUser’,

  ensure => present,

  password_hash => mongodb_password(‘prodUser’, ‘passProdser’),

  database => prodUser,

  roles => [‘readWrite’, ‘dbAdmin’],

  tries  => 10

}

Eigenschaften

Benutzername:definiert den Namen des Benutzers.

password_hash:Dies ist der Passwort-Hash des Benutzers. Die in MongoDB 3.0 und höher verfügbare Funktion mongodb_password() wird zum Erstellen des Hashs verwendet.

Rollen:Dies definiert die Rollen, die der Benutzer auf der Zieldatenbank ausführen darf.

Passwort:Dies ist der einfache Text des Benutzerpassworts.

Datenbank:definiert die Zieldatenbank des Benutzers.

Ein Replikat-Set erstellen

Wir verwenden das Modul mongodb_replset, um ein Replikat-Set zu erstellen.

Mongodb_replset{'replicaset1':

   arbiter: 'host0:27017',

   ensure  => present,

   members => ['host0:27017','host1:27017', 'host2:27017', 'host3:27017'] 

   initialize_host: host1:27017

}

name:definiert den Namen des Replica Sets.

Mitglieder:Ein Array von Mitgliedern, die das Replikat-Set enthalten wird.

initialize_host:Host, der bei der Initialisierung des Replica-Sets verwendet werden soll

Arbiter:definiert das Replikat-Set-Mitglied, das als Arbiter verwendet wird.

Erstellen eines MongoDB-Shards

mongodb_shard{'shard1':

   ensure  => present,

   members => ['shard1/host1:27017', 'shard1/host2:27017', 'shard1/host3:27017'] 

   keys: 'price'

}

name:definiert den Namen des Shards.

Mitglieder:Dies ist die Reihe von Mitgliedern, die der Shard enthalten wird.

Schlüssel:Definieren Sie den Schlüssel, der im Sharding verwendet werden soll, oder ein Array von Schlüsseln, die zum Erstellen eines zusammengesetzten Shard-Schlüssels verwendet werden können.