Wie man einen MongoDB-Cluster einrichtet

Wie man einen MongoDB-Cluster einrichtet

  • ITOps & DevOps
5 Minuten Lesezeit Aktualisiert Mar 6, 2019

Auf einen Blick: Die Einrichtung eines MongoDB-Clusters beinhaltet die Installation eines Konfigurationsservers, eines Abfragerouters und eines Shard-Servers. Der Prozess umfasst die Konfiguration jedes Servers, die Sicherstellung eines ordnungsgemäßen Netzwerks und das Aktivieren von Sharding für die Datenverteilung. Wichtige Schritte umfassen das Bearbeiten von Konfigurationsdateien, das Starten von Diensten und die Überprüfung von Protokollen auf Fehler. Für detaillierte Anweisungen folgen Sie den bereitgestellten Schritten und Links zu weiteren MongoDB-Ressourcen.

  • Installiere den Konfigurationsserver, frage den Router und den Shard-Server ab.
  • Aktiviere Sharding für die Datenverteilung im gesamten Cluster.

Hier zeigen wir, wie man einen MongoDB-Cluster einrichtet. Im vorherigen Beitrag haben wir gezeigt, wie man ihn auf einem Rechner installiert.

Es gibt drei Teile zu installieren:

  1. Config Server
  2. Abfragerouter
  3. Shard-Server, also Datenbank

Betrachtet man das untenstehende Diagramm, läuft der Mongos-Prozess als Router, was bedeutet, dass er den Clients anzeigt, wo sie nach Daten suchen sollen. Die Daten werden über den Cluster verteilt, basierend auf dem Teilen. Sharding ist die Zuweisung von Datensätzen an Server basierend auf dem gehashten Wert eines Indexes. Der Konfigurationsserver speichert Konfigurationsinformationen.

Konfigurationsserver

Installieren Sie MongoDB

Technisch gesehen bedeutet eine MongoDB als Cluster einfach drei Schichten der MongoDB-Architektur als separate Prozesse. Das könnte man für akademische Zwecke auf einer Maschine machen. Aber hier verwenden wir zwei.

Wir installieren den Router und die Konfigurationsserver auf 172.31.46.15 und den Shard-Server auf 172.31.47.43. Der Einfachheit halber nennen wir den ersten Server den Konfigurationsserver und den zweiten Server den Datenbankserver.

Verwenden Sie nicht apt-get zur Installation von MongoDB, da dies normalerweise nicht die aktuelle Version ist. Folgen Sie stattdessen den folgenden Schritten. Beachten Sie, dass mongod (Konfiguration und Shard-Server), mongos (Router) und Mongo Client als drei separate Pakete installiert werden.

Öffnen Sie die Firewall-Ports 27017, 27018 und 27019 zwischen den beiden Servern.

Du brauchst alle drei Pakete auf dem Konfigurationsserver, aber nur mongodb-org-server auf dem Datenbankserver. Unter Ubuntu installiere sie so.

    wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-server_4.0.5_amd64.deb

sudo dpkg -i mongodb-org-server_4.0.5_amd64.deb

wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-shell_4.0.5_amd64.deb

sudo dpkg -i mongodb-org-shell_4.0.5_amd64.deb

wget https://repo.mongodb.org/apt/ubuntu/dists/xenial/mongodb-org/4.0/multiverse/binary-amd64/mongodb-org-mongos_4.0.5_amd64.deb

 sudo dpkg -i mongodb-org-mongos_4.0.5_amd64.deb

Beachte, dass du bei einem Fehler den Server entfernst und dann die Datendateibibliothek /var/lib/mongodb löschst. Wenn du die Datendateien beim Neuinstallieren der Software nicht löschst, behält sie die vorherige Konfiguration und stellt somit alle Fehler wieder her.

Melde dich beim Konfigurationsserver an.

Um alle drei Server einzurichten, wiederholen wir auf jedem Server dieselben vier Schritte:

  1. Konfigurationsdatei bearbeiten
  2. Startprozess
  3. Überprüfen Sie das Protokoll auf Fehler
  4. Melde dich in Shell an, um weitere Konfigurationen vorzunehmen

Jetzt bearbeite auf dem Konfigurationsserver die Konfigurationsdatei. Zur Einfachheit lassen wir jede Konfigurationsdatei einen beschreibenden Namen haben:

Melde dich beim Konfigurationsserver an.

    sudo vim /etc/mongodConfig.conf

Fügen Sie den untenstehenden Text ein. Zuerst erklären wir einige der Felder:

Weg: /var/log/mongodb/mongodConfig.log
Für jeden Prozess geben wir dem Log einen Namen, der klar angibt, für welchen Prozess es sich handelt.
Port: 27019
bindIp: 172.31.46.15
Standardmäßig läuft der Konfigurationsserver auf Port 2019 in einer clusterbasierten Konfiguration. Das machen wir hier explizit, daher muss man sich das nicht merken. Außerdem ist die IP-Adresse eine Non-Loopback-Adresse. Das ist, damit andere Server diesen Server finden können.
sharding:
clusterRolle: configsvr
Sharding bedeutet, Daten nach einem Hashing-Schema zu verteilen. Hier sagen wir MongoDB, dass dieser Server ein Konfigurationsserver ist, im Gegensatz zu einem Sharing-Server.
replication:
replSetName: ConfigReplSet
Das bedeutet, diese Konfigurationsdaten zu replizieren. Wir verwenden rs. ()-Funktionen, um weitere Repliken hinzuzufügen. Wir können jeden Namen verwenden.

Fügen Sie diesen Text in /etc/mongodConfig.conf ein:

Beginnen Sie mit dem Prozess:

    storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongodConfig.log

net:
  port: 27019
  bindIp: 172.31.46.15

sharding:
  clusterRole: configsvr

replication:
  replSetName: ConfigReplSet

Beginnen Sie mit dem Prozess:

    sudo mongod --config /etc/mongodConfig.conf&

Überprüfen Sie die Protokolle auf Fehler:

    sudo tail -100 /var/log/mongodb/mongodConfig.log

Loggen Sie sich in die Hülle ein:

    mongo 172.31.46.15:27019

Aktiviere die Replikation mit rs.initiate() und prüfe den Status mit rs.status(). Beachte, dass der Name des Replikationssets, das wir in der Konfigurationsdatei ConfigReplSet konfiguriert haben, abgerufen wird.

    > rs.initiate()
{
	"info2" : "no configuration specified. Using a default configuration for the set",
	"me" : "172.31.46.15:27019",
	"ok" : 1,
	"operationTime" : Timestamp(1548598138, 1),
	"$gleStats" : {
		"lastOpTime" : Timestamp(1548598138, 1),
		"electionId" : ObjectId("000000000000000000000000")
	},
	"lastCommittedOpTime" : Timestamp(0, 0),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548598138, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
ConfigReplSet:SECONDARY> rs.status()
{
	"set" : "ConfigReplSet",

Abfragerouter konfigurieren

Bearbeite die Konfigurationsdatei:

    sudo vim /etc/mongoRouter.conf

Fügen Sie den untenstehenden Text ein. Hinweis:

configDB: ConfigReplSet/172.31.46.15:27019
Dies zeigt dem Abfragerouter, wo er den Konfigurationsserver und deren Replikensätze finden kann.
    systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongoRouter.log

net:
  port: 27017
  bindIp: 172.31.46.15

sharding:
  configDB: ConfigReplSet/172.31.46.15:27019

Starte den Service. Beachte das s in Mongos. Das ist der Prozess des Abfragerouters.

    sudo mongos --config /etc/mongoRouter.conf&

Überprüfen Sie das Protokoll und achten Sie auf Fehler:

    mongo 172.31.46.15:27017

Shard konfigurieren

Melden Sie sich beim Datenbankserver an.

    sudo vim /etc/mongodShard.conf

Fügen Sie den untenstehenden Text ein. Beachten Sie, dass:

Beginnen Sie mit dem Prozess.

clusterRolle: shardsvr
Das bedeutet, dass es sich um einen Shard-Server handelt, im Gegensatz zu einem Konfigurationsserver.
replSetName: ShardReplSet
Das bedeutet, die Daten zu replizieren. Im Konfigurationsserver haben wir ihm gesagt, dass die Konfiguration repliziert werden soll.
Port: 27018
Standardmäßig laufen Shard-Server auf Port 27018. Deshalb machen wir das explizit, damit wir uns daran nicht erinnern müssen.
    storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongodShard.log

net:
  port: 27018 
  bindIp: 172.31.47.43

sharding:
  clusterRole: shardsvr

replication:
  replSetName: ShardReplSet

Beginnen Sie mit dem Prozess.

    sudo mongod --config /etc/mongodShard.conf&

Überprüfe das Protokoll auf Fehler.

Logge dich in die Hülle ein.

    sudo tail -f /var/log/mongodb/mongodShard.log

Logge dich in die Hülle ein.

    mongo 172.31.47.43:2018

Aktiviere Replikationen mit rs.initiate() und überprüfe dann den Status mit rs.status(). Beachte den Namen ShardReplSet. Wir könnten jeden Namen verwenden, solange wir denselben Namen für alle Shards im Cluster verwenden.

    rs.initiate()
{
	"info2" : "no configuration specified. Using a default configuration for the set",
	"me" : "172.31.47.43:27018",
	"ok" : 1,
	"operationTime" : Timestamp(1548602253, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548602253, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
ShardReplSet:SECONDARY> rs.status()
{
	"set" : "ShardReplSet",

Shard zum Cluster hinzufügen

Gehe zurück zum Konfigurationsserver und verbinde dich mit dem Router:

    mongo 172.31.46.15:27017

Füge alle folgenden Befehle in die Hülle ein:

    sh.addShard( "ShardReplSet/172.31.47.43:27018")

{
	"shardAdded" : "ShardReplSet",
	"ok" : 1,
	"operationTime" : Timestamp(1548602529, 4),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548602529, 4),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

Erstelle eine Datenbank namens Books und aktiviere dann Sharding.

    use books
switched to db books

sh.enableSharding("books")

{
	"ok" : 1,
	"operationTime" : Timestamp(1548602601, 6),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548602601, 6),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

Erstellen Sie eine Sammlung.

    db.createCollection("collection")


{
	"ok" : 1,
	"operationTime" : Timestamp(1548602659, 5),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548602659, 5),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

Erstellen Sie einen Index. Wir indexieren das Feld ISBN in absteigender Reihenfolge.

Füge eine Platte hinzu.

    db.collection.createIndex( { isbn: -1 } )


{
	"raw" : {
		"ShardReplSet/172.31.47.43:27018" : {
			"createdCollectionAutomatically" : false,
			"numIndexesBefore" : 1,
			"numIndexesAfter" : 2,
			"ok" : 1
		}
	},
	"ok" : 1,
	"operationTime" : Timestamp(1548602670, 9),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548602670, 9),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

Füge eine Platte hinzu.

    db.collection.insertOne( { isbn: 100 } )


{
	"acknowledged" : true,
	"insertedId" : ObjectId("5c4dcd69e83741cb900b46f8")
}

Schalte das Splittern für die Sammlung ein.

    sh.shardCollection("books.collection", { isbn : "hashed" } )

{
	"collectionsharded" : "books.collection",
	"collectionUUID" : UUID("0d10320b-3086-472e-a3ac-4be67fae21f9"),
	"ok" : 1,
	"operationTime" : Timestamp(1548603537, 12),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1548603537, 12),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

Überprüfen Sie nun, dass die Daten wie unten gezeigt über den Cluster verteilt sind. Natürlich haben wir nur einen Datenbankserver, also wird nur einer angezeigt. In einem weiteren Blogbeitrag zeigen wir, wie man weitere Server hinzufügen kann.

    db.collection.getShardDistribution()

Shard ShardReplSet at ShardReplSet/172.31.47.43:27018
 data : 0B docs : 0 chunks : 2
 estimated data per chunk : 0B
 estimated docs per chunk : 0

Totals
 data : 0B docs : 0 chunks : 2
 Shard ShardReplSet contains NaN% data, NaN% docs in cluster, avg obj size on shard : NaNGiB

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus ITOps & DevOps

Interessieren Sie sich für mehr von BMC?

The Brief ist unsere monatliche E-Mail zum Mainframe und zur Enterprise-Orchestrierung: Recherchen, Kundenberichte, Produktnachrichten, Events.

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Sie haben The Brief abonniert

Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.