Ein MongoDB Sharded Cluster besteht aus folgenden Komponenten:
Weitere Informationen: MongoDB Manual – Deploy a Sharded Cluster
Nachfolgend ein Beispiel für die Einrichtung eines Sharded Clusters mit zwei Shards, einem dreiknotigen Konfigurationsserver-Replikationssatz und einem Router. Seit MongoDB 3.6 müssen alle Shards als Replica Sets betrieben werden. Für Testzwecke kann jedes Shard-Replica Set nur ein einziges Mitglied haben, produktiv sollten es jedoch mindestens drei sein.
Drei Instanzen für den Konfigurationsserver:
mkdir -p /data/configdb1 /data/configdb2 /data/configdb3
mongod --configsvr --replSet configReplSet --bind_ip localhost --port 27020 --dbpath /data/configdb1
mongod --configsvr --replSet configReplSet --bind_ip localhost --port 27021 --dbpath /data/configdb2
mongod --configsvr --replSet configReplSet --bind_ip localhost --port 27022 --dbpath /data/configdb3Mit der ersten Instanz verbinden und den Replikationssatz initialisieren:
mongosh --port 27020rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [
{ _id: 0, host: "localhost:27020" },
{ _id: 1, host: "localhost:27021" },
{ _id: 2, host: "localhost:27022" }
]
})Jeder Shard als Replica Set, hier im Testbetrieb mit nur einem Mitglied:
Shard 1 einrichten:
mkdir -p /data/shard1db
mongod --shardsvr --replSet shard1ReplSet --bind_ip localhost --port 27030 --dbpath /data/shard1dbInitialisierung:
mongosh --port 27030rs.initiate({
_id: "shard1ReplSet",
members: [{ _id: 0, host: "localhost:27030" }]
})Shard 2 einrichten:
mkdir -p /data/shard2db
mongod --shardsvr --replSet shard2ReplSet --bind_ip localhost --port 27040 --dbpath /data/shard2dbInitialisierung:
mongosh --port 27040rs.initiate({
_id: "shard2ReplSet",
members: [{ _id: 0, host: "localhost:27040" }]
})Router starten:
mongos --configdb configReplSet/localhost:27020,localhost:27021,localhost:27022 --bind_ip localhost --port 27050Mit dem Router verbinden:
mongosh --port 27050Shards zum Cluster hinzufügen:
sh.addShard("shard1ReplSet/localhost:27030")
sh.addShard("shard2ReplSet/localhost:27040")Status prüfen:
sh.status()Sharding für eine Datenbank aktivieren:
sh.enableSharding("exampleDB")Shard-Key für eine Kollektion festlegen:
sh.shardCollection("exampleDB.exampleCollection", { shardKeyField: 1 })