[TOC]
副本集(replica)
mongodb副本集是一组拥有相同数据的mongodb实例,主mongodb接受所有的写操作,所有的其他实例可以接受主实例的操作以保持数据同步。
docker 搭建
参看: go-mod/k8s/docker/mongo/replication
验证主从同步
1 2 3 4 5 6 7 8 9 10 11
| use test db.people.insert({"name": "percy1", "age": 18}) db.people.insert({"name": "percy2", "age": 19})
db.getMongo().setSlaveOk() use test mongoreplset:SECONDARY> db.people.find() { "_id" : ObjectId("5f3b810824e755927a408da7"), "name" : "percy1", "age" : 18 } { "_id" : ObjectId("5f3b810924e755927a408da8"), "name" : "percy2", "age" : 19 }
|
验证故障转移
副本集模式下,如果Primary不可用,整个集群将会选举出新的Primary来继续对外提供读写服务,一起来验证一下 mymongo1 不可用的时候的状况:
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker stop mymongo1
docker exec -it mymongo2 mongo
docker start mymongo1
rs.status()
|
分片集群 (sharding)
docker 搭建
参看: go-mod/k8s/docker/mongo/sharding
验证数据分片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| docker exec -it mymongo_mongos1 mongo --port 27017
sh.enableSharding("mapp")
sh.shardCollection("mapp.order", {"_id": "hashed" })
use mapp for (i = 1; i <= 1000; i=i+1){ db.order.insert({'price': 1}) } db.order.find().count()
docker exec -it mymongo_shard1 mongo --port 27018 use mapp db.order.find().count() 454
|
explain 分析查询
参看: go-mod/k8s/docker/mongo/sharding
参考
docker 搭建副本集集群
docker 搭建分片集群
mongodb 分片使用