diff --git a/.gitignore b/.gitignore
index e8bedc5..f99d84b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,8 @@
/client/DemoMongoClusterReader/bin/Release/netcoreapp2.2
/client/DemoMongoClusterWriter/bin/Release/netcoreapp2.2
/client/MongoCluster.Messages/bin/Release/netstandard2.0
+/client/.vs/ProjectEvaluation
+/client/DemoMongoClusterReader/bin/Debug/net5.0
+/client/DemoMongoClusterWriter/bin/Debug/net5.0
+/client/MongoCluster.Messages/bin/Debug/netstandard2.1
+docs
diff --git a/PSA/docker-compose.yml b/PSA/docker-compose.yml
index 64f4647..478dcf2 100644
--- a/PSA/docker-compose.yml
+++ b/PSA/docker-compose.yml
@@ -4,7 +4,7 @@ services:
## Router
router01:
image: mongo:4.0
- container_name: rydell-router-01
+ container_name: router-01
command: mongos --port 27017 --configdb rs-config-server/configsvr01:27017,configsvr02:27017,configsvr03:27017 --bind_ip_all
ports:
- 27117:27017
@@ -12,7 +12,7 @@ services:
- ./scripts:/scripts
router02:
image: mongo:4.0
- container_name: rydell-router-02
+ container_name: router-02
command: mongos --port 27017 --configdb rs-config-server/configsvr01:27017,configsvr02:27017,configsvr03:27017 --bind_ip_all
volumes:
- ./scripts:/scripts
@@ -24,7 +24,7 @@ services:
## Config Servers
configsvr01:
image: mongo:4.0
- container_name: rydell-mongo-config-01
+ container_name: mongo-config-01
command: mongod --port 27017 --configsvr --replSet rs-config-server
volumes:
- ./scripts:/scripts
@@ -36,7 +36,7 @@ services:
- shard03-a
configsvr02:
image: mongo:4.0
- container_name: rydell-mongo-config-02
+ container_name: mongo-config-02
command: mongod --port 27017 --configsvr --replSet rs-config-server
volumes:
- ./scripts:/scripts
@@ -46,7 +46,7 @@ services:
- configsvr01
configsvr03:
image: mongo:4.0
- container_name: rydell-mongo-config-03
+ container_name: mongo-config-03
command: mongod --port 27017 --configsvr --replSet rs-config-server
volumes:
- ./scripts:/scripts
@@ -59,7 +59,7 @@ services:
## Shards 01
shard01-x:
image: mongo:4.0
- container_name: rydell-shard-01-node-x
+ container_name: shard-01-node-x
command: mongod --port 27017 --shardsvr --replSet rs-shard-01
volumes:
- ./scripts:/scripts
@@ -70,7 +70,7 @@ services:
- shard01-b
shard01-a:
image: mongo:4.0
- container_name: rydell-shard-01-node-a
+ container_name: shard-01-node-a
command: mongod --port 27017 --shardsvr --replSet rs-shard-01
volumes:
- ./scripts:/scripts
@@ -78,7 +78,7 @@ services:
- 27123:27017
shard01-b:
image: mongo:4.0
- container_name: rydell-shard-01-node-b
+ container_name: shard-01-node-b
command: mongod --port 27017 --shardsvr --replSet rs-shard-01
volumes:
- ./scripts:/scripts
@@ -88,7 +88,7 @@ services:
## Shards 02
shard02-x:
image: mongo:4.0
- container_name: rydell-shard-02-node-x
+ container_name: shard-02-node-x
command: mongod --port 27017 --shardsvr --replSet rs-shard-02
volumes:
- ./scripts:/scripts
@@ -99,7 +99,7 @@ services:
- shard02-b
shard02-a:
image: mongo:4.0
- container_name: rydell-shard-02-node-a
+ container_name: shard-02-node-a
command: mongod --port 27017 --shardsvr --replSet rs-shard-02
volumes:
- ./scripts:/scripts
@@ -107,7 +107,7 @@ services:
- 27126:27017
shard02-b:
image: mongo:4.0
- container_name: rydell-shard-02-node-b
+ container_name: shard-02-node-b
command: mongod --port 27017 --shardsvr --replSet rs-shard-02
volumes:
- ./scripts:/scripts
@@ -117,7 +117,7 @@ services:
## Shards 03
shard03-x:
image: mongo:4.0
- container_name: rydell-shard-03-node-x
+ container_name: shard-03-node-x
command: mongod --port 27017 --shardsvr --replSet rs-shard-03
volumes:
- ./scripts:/scripts
@@ -128,7 +128,7 @@ services:
- shard03-b
shard03-a:
image: mongo:4.0
- container_name: rydell-shard-03-node-a
+ container_name: shard-03-node-a
command: mongod --port 27017 --shardsvr --replSet rs-shard-03
volumes:
- ./scripts:/scripts
@@ -136,7 +136,7 @@ services:
- 27129:27017
shard03-b:
image: mongo:4.0
- container_name: rydell-shard-03-node-b
+ container_name: shard-03-node-b
command: mongod --port 27017 --shardsvr --replSet rs-shard-03
volumes:
- ./scripts:/scripts
diff --git a/PSA/readme.md b/PSA/readme.md
index 872a157..fa12e18 100644
--- a/PSA/readme.md
+++ b/PSA/readme.md
@@ -53,21 +53,21 @@ docker-compose exec shard03-a sh -c "mongo < /scripts/init-shard03.js"
docker-compose exec shard01-a mongo --port 27017
rs.addArb("shard01-x:27017") // make sure that you are in primary before run this command
// or
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.addArb(\""shard01-x:27017\"")' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.addArb(\""shard01-x:27017\"")' | mongo --port 27017"
```
```bash
docker-compose exec shard02-a mongo --port 27017
rs.addArb("shard02-x:27017") // make sure that you are in primary before run this command
// or
-docker exec -it rydell-shard-02-node-a bash -c "echo 'rs.addArb(\""shard02-x:27017\"")' | mongo --port 27017"
+docker exec -it shard-02-node-a bash -c "echo 'rs.addArb(\""shard02-x:27017\"")' | mongo --port 27017"
```
```bash
docker-compose exec shard03-a mongo --port 27017
rs.addArb("shard03-x:27017") // make sure that you are in primary before run this command
// or
-docker exec -it rydell-shard-03-node-a bash -c "echo 'rs.addArb(\""shard03-x:27017\"")' | mongo --port 27017"
+docker exec -it shard-03-node-a bash -c "echo 'rs.addArb(\""shard03-x:27017\"")' | mongo --port 27017"
```
- **Step 4: Initializing the router**
@@ -129,9 +129,9 @@ sh.status()
> You should see 1 PRIMARY, 1 SECONDARY and 1 ARBITER
```bash
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-02-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-03-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-02-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-03-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
```
*Sample Result:*
```
@@ -344,13 +344,13 @@ db.MyCollection.getShardDistribution()
### More commands
```bash
-docker exec -it rydell-mongo-config-01 bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it mongo-config-01 bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.help()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.printReplicationInfo()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.printSlaveReplicationInfo()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.help()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.printReplicationInfo()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.printSlaveReplicationInfo()' | mongo --port 27017"
```
---
diff --git a/assets/mongo-cluster.drawio b/assets/mongo-cluster.drawio
new file mode 100644
index 0000000..627cae8
--- /dev/null
+++ b/assets/mongo-cluster.drawio
@@ -0,0 +1 @@
+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
\ No newline at end of file
diff --git a/client/.dockerignore b/client/.dockerignore
new file mode 100644
index 0000000..3729ff0
--- /dev/null
+++ b/client/.dockerignore
@@ -0,0 +1,25 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
\ No newline at end of file
diff --git a/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj b/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj
index bd416ef..62806d9 100644
--- a/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj
+++ b/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj
@@ -2,10 +2,12 @@
Exe
- netcoreapp2.2
+ net5.0
+ Linux
+
diff --git a/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj.user b/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj.user
new file mode 100644
index 0000000..c310115
--- /dev/null
+++ b/client/DemoMongoClusterReader/DemoMongoClusterReader.csproj.user
@@ -0,0 +1,9 @@
+ο»Ώ
+
+
+ DemoMongoClusterReader
+
+
+ ProjectDebugger
+
+
\ No newline at end of file
diff --git a/client/DemoMongoClusterReader/Program.cs b/client/DemoMongoClusterReader/Program.cs
index 406e197..fb9cfdb 100644
--- a/client/DemoMongoClusterReader/Program.cs
+++ b/client/DemoMongoClusterReader/Program.cs
@@ -2,25 +2,33 @@
using MongoDB.Bson;
using MongoDB.Driver;
using System;
+using System.Collections.Concurrent;
using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
namespace DemoMongoClusterReader
{
class Program
{
- static List supplierToTest = new List
+ static ConcurrentQueue queue = new();
+ private static readonly Random rnd = new Random();
+
+ private static int GetRandomNumber(int minIncludeValue, int maxExcludeValue)
{
- "61a8720f-c0ad-422d-a2fe-5c95b1cfbea5",
- "3b414cdb-c290-40d2-82e2-42907f08b0a1",
- "211f44bd-c81d-4f17-9c13-1319ea845826",
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- new Guid().ToString(), new Guid().ToString(), new Guid().ToString(), new Guid().ToString(),
- };
+ return rnd.Next(minIncludeValue, maxExcludeValue);
+ }
+
+ public static string RandomString(int length)
+ {
+ const string chars = "ABCD";
+ return new string(Enumerable.Repeat(chars, length)
+ .Select(s => s[GetRandomNumber(0, s.Length)]).ToArray());
+ }
+
+
static void Main(string[] args)
{
var ran = new Random();
@@ -29,42 +37,91 @@ static void Main(string[] args)
var client = new MongoClient($"mongodb://127.0.0.1:27117,127.0.0.1:27118/{dbName}");
var database = client.GetDatabase(dbName);
- var collection = database.GetCollection("MyCollection", new MongoCollectionSettings {ReadPreference = ReadPreference.Nearest });
+ var collection = database.GetCollection("MyCollection", new MongoCollectionSettings { ReadPreference = ReadPreference.SecondaryPreferred }); // Always read from a secondary, read from the primary if no secondary is available (https://severalnines.com/blog/become-mongodb-dba-how-scale-reads)
+
- while (true)
+ Task.Run(() =>
{
- try
+ long counter = 0;
+ while (true)
{
- //double totalDocuments = collection.CountDocumentsAsync(FilterDefinition.Empty).GetAwaiter().GetResult();
- //Console.WriteLine($"Total Records: {totalDocuments} - {Guid.NewGuid()}");
-
- var ranSupplierId = supplierToTest[ran.Next(0, supplierToTest.Count)];
- var docEntry = collection.FindAsync(x => x.SupplierId == ranSupplierId).GetAwaiter().GetResult().ToList();
- if (docEntry.Count >= 1)
+ if (queue.TryDequeue(out string msg))
{
- Console.WriteLine($"\nFound {docEntry.Count} items for supplier {ranSupplierId}");
+ counter++;
+ Console.WriteLine($"{counter}. {msg}");
}
- Console.Write("-");
- }
- catch (MongoConnectionException mgConnEx)
- {
- Console.WriteLine($"{ Guid.NewGuid()} - { mgConnEx.Message}");
- if (mgConnEx.InnerException != null)
+ else
{
- Console.WriteLine($"\tInner exception: {mgConnEx.InnerException.Message}");
+ Thread.Sleep(10);
}
- Console.WriteLine($"\tConnectionInfo: {mgConnEx.ConnectionId}");
}
- catch (Exception ex)
+ });
+
+ Console.WriteLine($"Start {DateTime.Now}");
+ while (true)
+ {
+ var maxIterations = 10;
+
+ var parallelGroups = Enumerable.Range(0, maxIterations);
+
+ var oldOem = string.Empty;
+
+ var parallelTasks = parallelGroups.Select(groups =>
{
- Console.WriteLine($"{ Guid.NewGuid()} - { ex.Message}");
- }
+ return Task.Run(async () =>
+ {
+ var oemNumber = string.Empty;
- //System.Threading.Thread.Sleep(500);
- }
+ while (true)
+ {
+ oemNumber = RandomString(4);
+ if (oldOem != oemNumber)
+ {
+ oldOem = oemNumber;
+ break;
+ }
+ }
+
+ await FindSomethingAsync(collection, oemNumber);
+ });
+ });
+ Task.WhenAll(parallelTasks).GetAwaiter().GetResult();
+ Console.WriteLine("====================================\n");
+
+ }
+ Console.WriteLine($"Done {DateTime.Now}");
Console.ReadKey();
}
+
+ private static async Task FindSomethingAsync(IMongoCollection collection, string oemNumber)
+ {
+ var filterBuilder = Builders.Filter;
+ var filter = filterBuilder.Eq(x => x.OemNumber, oemNumber);
+
+ var xx = GetRandomNumber(0, 3);
+ var canFilterZip = xx % 2 == 0;
+
+ string zipCode = string.Empty;
+
+ if (canFilterZip)
+ {
+ zipCode = GetRandomNumber(1, 1000).ToString().PadLeft(4, '0');
+ filter = filterBuilder.Eq(x => x.ZipCode, zipCode);
+ }
+
+ Stopwatch stopwatch = Stopwatch.StartNew();
+ var data = await collection.Find(filter).Skip(0).Limit(50).ToListAsync();
+ var nbrDocs = data.Count();
+
+ //var nbrDocs = await collection.CountDocumentsAsync(filter);
+ stopwatch.Stop();
+
+ _ = Task.Run(() =>
+ {
+ queue.Enqueue($"Found {nbrDocs}\trecords in {Math.Round(stopwatch.Elapsed.TotalMilliseconds, 2)}ms\t[ OEM {oemNumber} {(string.IsNullOrWhiteSpace(zipCode) ? "]" : $"- Zip {zipCode} ]")}");
+ });
+ }
}
}
diff --git a/client/DemoMongoClusterWriter/DemoMongoClusterWriter.csproj b/client/DemoMongoClusterWriter/DemoMongoClusterWriter.csproj
index bd416ef..bdb7644 100644
--- a/client/DemoMongoClusterWriter/DemoMongoClusterWriter.csproj
+++ b/client/DemoMongoClusterWriter/DemoMongoClusterWriter.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp2.2
+ net5.0
diff --git a/client/DemoMongoClusterWriter/Program.cs b/client/DemoMongoClusterWriter/Program.cs
index bab76b3..e3abb2c 100644
--- a/client/DemoMongoClusterWriter/Program.cs
+++ b/client/DemoMongoClusterWriter/Program.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Linq;
namespace DemoMongoClusterWriter
{
@@ -11,35 +12,47 @@ class Program
{
static char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
- static void Main(string[] args)
+ private static readonly Random rnd = new Random();
+ private static int GetRandomNumber(int minIncludeValue, int maxExcludeValue)
+ {
+ return rnd.Next(minIncludeValue, maxExcludeValue);
+ }
+
+ public static string RandomString(int length)
{
- var ranOem = new Random();
+ const string chars = "ABCD";
+ return new string(Enumerable.Repeat(chars, length)
+ .Select(s => s[GetRandomNumber(0, s.Length)]).ToArray());
+ }
+ static void Main(string[] args)
+ {
var dbName = "MyDatabase";
var client = new MongoClient($"mongodb://127.0.0.1:27117,127.0.0.1:27118/{dbName}");
//var client = new MongoClient($"mongodb://127.0.0.1:27050/{dbName}");
var database = client.GetDatabase(dbName);
- var collection = database.GetCollection("MyCollection");
+ var collection = database.GetCollection("MyCollection");
var id = 0;
var nbrRecordsInBatch = 10_000;
Stopwatch stopwatch = Stopwatch.StartNew();
- for (int times = 0; times < 10; times ++)
+ for (int times = 0; times < int.MaxValue; times++)
{
Stopwatch stopwatchPart = Stopwatch.StartNew();
- List requests = new List();
+ List requests = new List();
Console.WriteLine($"{times} - start buiding records...");
for (int j = 0; j < nbrRecordsInBatch; j++)
{
- var oemNumber = alpha[ranOem.Next(0, alpha.Length)].ToString();
- requests.Add(new User
+ var zipCode = GetRandomNumber(1, 1000).ToString().PadLeft(4, '0');
+
+ requests.Add(new MyDocument
{
Id = new ObjectId { },
SupplierId = Guid.NewGuid().ToString(),
- OemNumber = oemNumber,
- Age = 30 + id,
+ OemNumber = RandomString(4),
+ ZipCode = zipCode,
Name = "Jin Auto " + id,
Blog = $"{id} - " + @"The company needed that grimoire because it was going to try to cast a spell in the real worldβto transform a popular albeit niche game,
complicated and nerdy, into a cross-media franchise. That has happened for comic books, for literature, even for toys, heaven help us.
@@ -49,7 +62,7 @@ Lots of people would agree that existing franchises can turn into games.
And then maybe live action. Movies. Turn the universe of Magic: The Gathering into a story universe."
});
- id++;
+ id++;
}
Console.WriteLine($"{times} - start inserting...");
@@ -57,7 +70,7 @@ Lots of people would agree that existing franchises can turn into games.
collection.InsertManyAsync(requests, new InsertManyOptions { IsOrdered = false }).GetAwaiter().GetResult();
stopwatchPart.Stop();
- Console.WriteLine($"{times} - {stopwatchPart.Elapsed.TotalMilliseconds}ms - {nbrRecordsInBatch} records");
+ Console.WriteLine($"{times} - {stopwatchPart.Elapsed.TotalMilliseconds}ms - {nbrRecordsInBatch} records");
}
stopwatch.Stop();
diff --git a/client/MongoCluster.Messages/MongoCluster.Messages.csproj b/client/MongoCluster.Messages/MongoCluster.Messages.csproj
index 7b0da0a..5512734 100644
--- a/client/MongoCluster.Messages/MongoCluster.Messages.csproj
+++ b/client/MongoCluster.Messages/MongoCluster.Messages.csproj
@@ -1,7 +1,7 @@
- netstandard2.0
+ netstandard2.1
diff --git a/client/MongoCluster.Messages/User.cs b/client/MongoCluster.Messages/User.cs
index 07fc642..1fabde8 100644
--- a/client/MongoCluster.Messages/User.cs
+++ b/client/MongoCluster.Messages/User.cs
@@ -1,10 +1,9 @@
ο»Ώusing MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
-using System;
namespace MongoCluster.Messages
{
- public class User
+ public class MyDocument
{
[BsonId]
public ObjectId Id { get; set; }
@@ -21,8 +20,8 @@ public class User
[BsonElement("blog")]
public string Blog { get; set; }
- [BsonElement("age")]
- public int Age { get; set; }
+ [BsonElement("zipCode")]
+ public string ZipCode { get; set; }
[BsonElement("location")]
public string Location { get; set; }
diff --git a/docker-compose.yml b/docker-compose.yml
index 84a4f84..9fc2ee9 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -4,16 +4,16 @@ services:
## Router
router01:
image: mongo:5.0
- container_name: rydell-router-01
- command: mongos --port 27017 --configdb rs-config-server/configsvr01:27017 --bind_ip_all
+ container_name: router-01
+ command: mongos --port 27017 --configdb rs-config-server/configsvr01:27017,configsvr02:27017,configsvr03:27017 --bind_ip_all
ports:
- 27117:27017
volumes:
- ./scripts:/scripts
router02:
image: mongo:5.0
- container_name: rydell-router-02
- command: mongos --port 27017 --configdb rs-config-server/configsvr01:27017 --bind_ip_all
+ container_name: router-02
+ command: mongos --port 27017 --configdb rs-config-server/configsvr01:27017,configsvr02:27017,configsvr03:27017 --bind_ip_all
volumes:
- ./scripts:/scripts
ports:
@@ -24,7 +24,7 @@ services:
## Config Servers
configsvr01:
image: mongo:5.0
- container_name: rydell-mongo-config-01
+ container_name: mongo-config-01
command: mongod --port 27017 --configsvr --replSet rs-config-server
volumes:
- ./scripts:/scripts
@@ -33,13 +33,34 @@ services:
links:
- shard01-a
- shard02-a
+ - shard03-a
+ configsvr02:
+ image: mongo:5.0
+ container_name: mongo-config-02
+ command: mongod --port 27017 --configsvr --replSet rs-config-server
+ volumes:
+ - ./scripts:/scripts
+ ports:
+ - 27120:27017
+ links:
+ - configsvr01
+ configsvr03:
+ image: mongo:5.0
+ container_name: mongo-config-03
+ command: mongod --port 27017 --configsvr --replSet rs-config-server
+ volumes:
+ - ./scripts:/scripts
+ ports:
+ - 27121:27017
+ links:
+ - configsvr02
## Shards
## Shards 01
shard01-a:
image: mongo:5.0
- container_name: rydell-shard-01-node-a
+ container_name: shard-01-node-a
command: mongod --port 27017 --shardsvr --replSet rs-shard-01
volumes:
- ./scripts:/scripts
@@ -50,7 +71,7 @@ services:
- shard01-c
shard01-b:
image: mongo:5.0
- container_name: rydell-shard-01-node-b
+ container_name: shard-01-node-b
command: mongod --port 27017 --shardsvr --replSet rs-shard-01
volumes:
- ./scripts:/scripts
@@ -58,7 +79,7 @@ services:
- 27123:27017
shard01-c:
image: mongo:5.0
- container_name: rydell-shard-01-node-c
+ container_name: shard-01-node-c
command: mongod --port 27017 --shardsvr --replSet rs-shard-01
volumes:
- ./scripts:/scripts
@@ -68,7 +89,7 @@ services:
## Shards 02
shard02-a:
image: mongo:5.0
- container_name: rydell-shard-02-node-a
+ container_name: shard-02-node-a
command: mongod --port 27017 --shardsvr --replSet rs-shard-02
volumes:
- ./scripts:/scripts
@@ -79,7 +100,7 @@ services:
- shard02-c
shard02-b:
image: mongo:5.0
- container_name: rydell-shard-02-node-b
+ container_name: shard-02-node-b
command: mongod --port 27017 --shardsvr --replSet rs-shard-02
volumes:
- ./scripts:/scripts
@@ -87,9 +108,40 @@ services:
- 27126:27017
shard02-c:
image: mongo:5.0
- container_name: rydell-shard-02-node-c
+ container_name: shard-02-node-c
command: mongod --port 27017 --shardsvr --replSet rs-shard-02
volumes:
- ./scripts:/scripts
ports:
- 27127:27017
+
+ ## Shards 03
+ shard03-a:
+ image: mongo:5.0
+ container_name: shard-03-node-a
+ command: mongod --port 27017 --shardsvr --replSet rs-shard-03
+ volumes:
+ - ./scripts:/scripts
+ ports:
+ - 27128:27017
+ links:
+ - shard03-b
+ - shard03-c
+ shard03-b:
+ image: mongo:5.0
+ container_name: shard-03-node-b
+ command: mongod --port 27017 --shardsvr --replSet rs-shard-03
+ volumes:
+ - ./scripts:/scripts
+ ports:
+ - 27129:27017
+ shard03-c:
+ image: mongo:5.0
+ container_name: shard-03-node-c
+ command: mongod --port 27017 --shardsvr --replSet rs-shard-03
+ volumes:
+ - ./scripts:/scripts
+ ports:
+ - 27130:27017
+
+
\ No newline at end of file
diff --git a/docs/MongoDB Sharded Cluster Tutorial - FileId - 187406.pdf b/docs/MongoDB Sharded Cluster Tutorial - FileId - 187406.pdf
deleted file mode 100644
index a551a63..0000000
Binary files a/docs/MongoDB Sharded Cluster Tutorial - FileId - 187406.pdf and /dev/null differ
diff --git a/docs/MongoDB-sharding-guide.pdf b/docs/MongoDB-sharding-guide.pdf
deleted file mode 100644
index ee6b94c..0000000
Binary files a/docs/MongoDB-sharding-guide.pdf and /dev/null differ
diff --git a/docs/PerconaLive - Sharded Cluster Tutorial.pdf b/docs/PerconaLive - Sharded Cluster Tutorial.pdf
deleted file mode 100644
index ddea07e..0000000
Binary files a/docs/PerconaLive - Sharded Cluster Tutorial.pdf and /dev/null differ
diff --git a/docs/how queries work with sharding.pdf b/docs/how queries work with sharding.pdf
deleted file mode 100644
index f751e5d..0000000
Binary files a/docs/how queries work with sharding.pdf and /dev/null differ
diff --git a/images/sharding-and-replica-sets.png b/images/sharding-and-replica-sets.png
index d7a63cf..ff97a1d 100644
Binary files a/images/sharding-and-replica-sets.png and b/images/sharding-and-replica-sets.png differ
diff --git a/readme.md b/readme.md
index d8806a0..f1de4a7 100644
--- a/readme.md
+++ b/readme.md
@@ -7,6 +7,25 @@ Need PSA? Check [here](https://github.com/minhhungit/mongodb-cluster-docker-comp
---
+## π Table of Contents
+- [β Mongo Components?](#-mongo-components-)
+- [β¨ Steps](#-steps-)
+ - [Step 1: Start all of the containers](#-step-1-start-all-of-the-containers-)
+ - [Step 2: Initialize the replica sets (config servers and shards)](#-step-2-initialize-the-replica-sets-config-servers-and-shards-)
+ - [Step 3: Initializing the router](#-step-3-initializing-the-router-)
+ - [Step 4: Enable sharding and setup sharding-key](#-step-4-enable-sharding-and-setup-sharding-key-)
+- [β
Verify](#-verify-)
+ - [Verify the status of the sharded cluster](#-verify-the-status-of-the-sharded-cluster-)
+ - [Verify status of replica set for each shard](#-verify-status-of-replica-set-for-each-shard-)
+ - [Check database status](#-check-database-status-)
+- [π More commands](#-more-commands-)
+ - [Normal Startup](#-normal-startup-)
+ - [Resetting the Cluster](#-resetting-the-cluster-)
+ - [Clean up docker-compose](#-clean-up-docker-compose-)
+- [πΊ Screenshot](#-screenshot-)
+- [π Donate ^^](#-donate--)
+- [π Refrences](#-refrences-)
+
### WARNING (Windows & OS X)
>The default Docker setup on Windows and OS X uses a VirtualBox VM to host the Docker daemon.
@@ -20,18 +39,21 @@ Need PSA? Check [here](https://github.com/minhhungit/mongodb-cluster-docker-comp
>or [here](https://github.com/docker-library/mongo/issues/232#issuecomment-355423692))
---
-### Mongo Components
+## β Mongo Components [π](#-table-of-contents)
-* Config Server (1 member replica set): `configsvr01`
-* 2 Shards (each a 3 member `PSS` replica set):
+* Config Server (3 member replica set): `configsvr01`,`configsvr02`,`configsvr03`
+* 3 Shards (each a 3 member `PSS` replica set):
* `shard01-a`,`shard01-b`, `shard01-c`
* `shard02-a`,`shard02-b`, `shard02-c`
+ * `shard03-a`,`shard03-b`, `shard03-c`
* 2 Routers (mongos): `router01`, `router02`
-### Setup
-- **Step 1: Start all of the containers**
+## β¨ Steps [π](#-table-of-contents)
+### π Step 1: Start all of the containers [π](#-table-of-contents)
+
+Clone this repository, open powershell or cmd on the repo folder and run:
```bash
docker-compose up -d
@@ -45,13 +67,14 @@ in Windows Docker Desktop (Settings -> Resources-> WSL Integration -> Enable int
Link: https://stackoverflow.com/a/65347214/3007147
-- **Step 2: Initialize the replica sets (config servers and shards) and routers**
+### π Step 2: Initialize the replica sets (config servers and shards) [π](#-table-of-contents)
```bash
docker-compose exec configsvr01 sh -c "mongo < /scripts/init-configserver.js"
docker-compose exec shard01-a sh -c "mongo < /scripts/init-shard01.js"
docker-compose exec shard02-a sh -c "mongo < /scripts/init-shard02.js"
+docker-compose exec shard03-a sh -c "mongo < /scripts/init-shard03.js"
```
If you get error like "E QUERY [thread1] SyntaxError: unterminated string literal @(shellhelp2)", problem maybe due to:
@@ -62,14 +85,14 @@ To fix it, modify script files in `scripts` folder, remove newline, change multi
Link: https://stackoverflow.com/a/51728442/3007147
-- **Step 3: Initializing the router**
+### π Step 3: Initializing the router [π](#-table-of-contents)
>Note: Wait a bit for the config server and shards to elect their primaries before initializing the router
```bash
docker-compose exec router01 sh -c "mongo < /scripts/init-router.js"
```
-- **Step 4: Enable sharding and setup sharding-key**
+### π Step 4: Enable sharding and setup sharding-key [π](#-table-of-contents)
```bash
docker-compose exec router01 mongo --port 27017
@@ -77,15 +100,18 @@ docker-compose exec router01 mongo --port 27017
sh.enableSharding("MyDatabase")
// Setup shardingKey for collection `MyCollection`**
-db.adminCommand( { shardCollection: "MyDatabase.MyCollection", key: { supplierId: "hashed", eomNumber: "hashed" } } )
+db.adminCommand( { shardCollection: "MyDatabase.MyCollection", key: { oemNumber: "hashed", zipCode: 1, supplierId: 1 } } )
```
->Done! but before you start inserting data you should verify them first
+---
+### βοΈ Done !!!
+#### But before you start inserting data you should verify them first
+---
-### Verify
+## π Verify [π](#-table-of-contents)
-- **Verify the status of the sharded cluster**
+### β
Verify the status of the sharded cluster [π](#-table-of-contents)
```bash
docker-compose exec router01 mongo --port 27017
@@ -117,16 +143,16 @@ sh.status()
{ "_id" : "config", "primary" : "config", "partitioned" : true }
```
-- **Verify status of replica set for each shard**
+### β
Verify status of replica set for each shard [π](#-table-of-contents)
> You should see 1 PRIMARY, 2 SECONDARY
```bash
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-02-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-03-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-02-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-03-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
```
*Sample Result:*
-```
+```ps1
MongoDB shell version v4.0.11
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("dcfe5d8f-75ef-45f7-9595-9d72dc8a81fc") }
@@ -261,7 +287,7 @@ MongoDB server version: 4.0.11
bye
```
-- **Check database status**
+### β
Check database status [π](#-table-of-contents)
```bash
docker-compose exec router01 mongo --port 27017
use MyDatabase
@@ -343,52 +369,54 @@ db.MyCollection.getShardDistribution()
}
```
-### More commands
+## π More commands [π](#-table-of-contents)
```bash
-docker exec -it rydell-mongo-config-01 bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it mongo-config-01 bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.help()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.printReplicationInfo()' | mongo --port 27017"
-docker exec -it rydell-shard-01-node-a bash -c "echo 'rs.printSlaveReplicationInfo()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.help()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.status()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.printReplicationInfo()' | mongo --port 27017"
+docker exec -it shard-01-node-a bash -c "echo 'rs.printSlaveReplicationInfo()' | mongo --port 27017"
```
---
-### Normal Startup
-The cluster only has to be initialized on the first run. Subsequent startup can be achieved simply with `docker-compose up` or `docker-compose up -d`
+### β¦ Normal Startup [π](#-table-of-contents)
+The cluster only has to be initialized on the first run.
-### Resetting the Cluster
+Subsequent startup can be achieved simply with `docker-compose up` or `docker-compose up -d`
+
+### β¦ Resetting the Cluster [π](#-table-of-contents)
To remove all data and re-initialize the cluster, make sure the containers are stopped and then:
```bash
docker-compose rm
```
-### Clean up docker-compose
+### β¦ Clean up docker-compose [π](#-table-of-contents)
```bash
docker-compose down -v --rmi all --remove-orphans
```
-Execute the **First Run** instructions again.
-
-### Screenshot
+## πΊ Screenshot [π](#-table-of-contents)
-### Donate ^^
+---
+
+## π Donate ^^ [π](#-table-of-contents)
**If you like my works and would like to support then you can buy me a coffee βοΈ anytime**
-**I would appreciate it!!!**
+**I would appreciate it β€οΈβ€οΈβ€οΈ**
---
-#### Inspired by:
+## π Refrences [π](#-table-of-contents)
- https://github.com/jfollenfant/mongodb-sharding-docker-compose
- https://viblo.asia/p/cai-dat-mongo-cluster-voi-docker-m68Z0NN25kG
diff --git a/scripts/init-configserver.js b/scripts/init-configserver.js
index a060c1e..f7b4a34 100644
--- a/scripts/init-configserver.js
+++ b/scripts/init-configserver.js
@@ -1 +1 @@
-rs.initiate({_id: "rs-config-server", configsvr: true, version: 1, members: [ { _id: 0, host : 'configsvr01:27017' } ] })
\ No newline at end of file
+rs.initiate({_id: "rs-config-server", configsvr: true, version: 1, members: [ { _id: 0, host : 'configsvr01:27017' }, { _id: 1, host : 'configsvr02:27017' }, { _id: 2, host : 'configsvr03:27017' } ] })
\ No newline at end of file
diff --git a/scripts/init-router.js b/scripts/init-router.js
index cc453b2..1c72ba9 100644
--- a/scripts/init-router.js
+++ b/scripts/init-router.js
@@ -4,3 +4,6 @@ sh.addShard("rs-shard-01/shard01-c:27017")
sh.addShard("rs-shard-02/shard02-a:27017")
sh.addShard("rs-shard-02/shard02-b:27017")
sh.addShard("rs-shard-02/shard02-c:27017")
+sh.addShard("rs-shard-03/shard03-a:27017")
+sh.addShard("rs-shard-03/shard03-b:27017")
+sh.addShard("rs-shard-03/shard03-c:27017")
diff --git a/scripts/init-shard03.js b/scripts/init-shard03.js
new file mode 100644
index 0000000..add0788
--- /dev/null
+++ b/scripts/init-shard03.js
@@ -0,0 +1 @@
+rs.initiate({_id: "rs-shard-03",version: 1,members: [{ _id: 0, host : "shard03-a:27017" },{ _id: 1, host : "shard03-b:27017" },{ _id: 2, host : "shard03-c:27017" },]})
\ No newline at end of file