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** Buy Me a Coffee at ko-fi.com -**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