1. mongodb 主从复制
MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。
- Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。
- Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
- Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。
1.1 主从复制(不推荐)
–master用来确定主服务器
–slave 和 –source 来控制从服务器
可以在mongodb.conf配置文件里指明主从关系,这样启动mongodb的时候只要跟上配置文件就行,就不需要通过–master和–slave来指明主从了。
1.2 副本集
只能 master 写, 从不能写。
下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15docker pull mongo:latest
# 主服务器
docker run \
-d \
-p 27018:27017 \
--name mongo1 \
mongo mongod --replSet my-mongo-set
# 从服务器
docker run \
-d \
-p 27019:27017 \
--name mongo2 \
mongo mongod --replSet my-mongo-set配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31docker exec -it mongo1 mongo
config = {
"_id" : "my-mongo-set",
"members" : [
{
"_id" : 0,
"host" : "172.17.0.1:27018"
},
{
"_id" : 1,
"host" : "172.17.0.1:27019"
}
]
}
rs.initiate(config)
# 下面是输出
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1595349445, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1595349445, 1)
}
# 如果一切顺利,提示符将变成这样:(需手动随便敲命令触发下)
my-mongo-set:PRIMARY>测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 启动从服务器
docker exec -it mongo2 mongo
my-mongo-set:PRIMARY>
# 主服务器
my-mongo-set:PRIMARY> db.mycollection.insert({name : 'sample'})
WriteResult({ "nInserted" : 1 })
my-mongo-set:PRIMARY> db.mycollection.find()
{ "_id" : ObjectId("5f171a9bfb41dd82f33d6b2d"), "name" : "sample" }
# 从服务器
my-mongo-set:SECONDARY> db.setSlaveOk() # 设置同步
my-mongo-set:SECONDARY> db.mycollection.find()
{ "_id" : ObjectId("5f171a9bfb41dd82f33d6b2d"), "name" : "sample" }
# 查询状态
1. 判断是不是master: db.isMaster()
2. 复制集状态查询:rs.status()
3. 查看oplog状态: rs.printReplicationInfo()
4. 查看复制延迟: rs.printSlaveReplicationInfo()
5. 查看服务状态详情: db.serverStatus()