此文档只是用来简单的记录下副本集配置的步骤。
1、副本集介绍
副本集通俗的讲就是用多台机器进行同一数据的异步同步,从而使多台机器拥有同一数据的多个副本,并且当主库掉线时在不需要用户干预的情况下自动切换其他备份服务器做主库,其实就是具有自动故障恢复功能的主从集群。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。
副本集和主从复制最大的区别就是在副本集中没有固定的“主节点;整个副本集会选出一个节点作为“主节点”,当其挂掉后,再在剩下的从节点中选举一个节点成为新的“主节点”,在副本集中总有一个主节点(primary)和一个或多个备份节点(secondary)。
参考文档:MongoDB之副本集配置
官方文档:MongoDB 复制(副本集)
2、准备工作
为了学习MongoDB的集群配置,准备了2台电脑,一台作为主节点Primary,另一台作为从节点Secondary。
环境:win10、MongoDB3.4、robo3t
3、配置步骤
3.1 配置文件修改
在配置文件中设置副本集。
Primary:192.168.0.4:27017
Secondary:192.168.0.232:27018
Primary配置:
dbpath=d:\mongodb\data\db #db文件夹
logpath=d:\mongodb\log\mongod.log #Log文件夹
bind_ip =192.168.0.4 #绑定IP地址
port=27017 #端口号 默认为27017
auth=false #开启用户认证
replSet=mySet #副本集名称,其他的节点必须使用这个名字做副本集名称
Secondary配置:
dbpath=d:\mongodb\data\db #db文件夹
logpath=d:\mongodb\log\mongod.log #Log文件夹
bind_ip =192.168.0.232 #绑定IP地址
port=27018 #端口号 默认为27017
auth=false #开启用户认证
replSet=mySet #副本集名称
3.2 副本集初始化
成功启动2个MongoDB的实例后,下面的工作就是如何将这2个实例组合成一个副本集。
我是在robo3t上进行操作,具体指令如下(使用192.168.0.4:27017实例):
//config_set={"_id":"mySet",members:[{_id:0,host:"192.168.0.4:27017"},{_id:1,host:"192.168.0.232:27017"}]}
//Primary节点初始化,以副本集启动
config_set={"_id":"mySet",members:[{_id:0,host:"192.168.0.4:27017"}]}
//启动副本集。若显示OK,表示副本集创建成功
rs.initiate(config_set)
//查看主节点
db.isMaster({})
//增加新的成员(辅助节点Secondary)
rs.add("192.168.0.232:27018")
//查看状态
rs.status({})
最终结果:
/* 1 */
{
"set" : "mySet",
"date" : ISODate("2021-02-16T03:38:47.295Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1613446721, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1613446721, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1613446721, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "192.168.0.4:27017",
"health" : 1.0, --1表示状态正常 ,0表示异常
"state" : 1, --1表示primary,2表示slave,即做备份的机器
"stateStr" : "PRIMARY",
"uptime" : 435,
"optime" : {
"ts" : Timestamp(1613446721, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2021-02-16T03:38:41.000Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1613446359, 1),
"electionDate" : ISODate("2021-02-16T03:32:39.000Z"),
"configVersion" : 2,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "192.168.0.232:27018",
"health" : 1.0,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 19,
"optime" : {
"ts" : Timestamp(1613446721, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1613446721, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2021-02-16T03:38:41.000Z"),
"optimeDurableDate" : ISODate("2021-02-16T03:38:41.000Z"),
"lastHeartbeat" : ISODate("2021-02-16T03:38:45.553Z"),
"lastHeartbeatRecv" : ISODate("2021-02-16T03:38:42.724Z"),
"pingMs" : NumberLong(6),
"lastHeartbeatMessage" : "",
"syncingTo" : "192.168.0.4:27017",
"syncSourceHost" : "192.168.0.4:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 2
}
],
"ok" : 1.0
}
3.3 新增数据测试
主节点中Students集合变化:
从节点中Students集合变化:
由此可看出,从节点已经将主节点插入的数据进行了同步。
后期学习的时候再补充……