MongoDB高可用集群搭建
MongoDB副本集搭建
准备三台服务器:
10.175.120.131(主节点)
10.175.121.134(副本节点)
10.175.121.136(副本节点)
分别在每台服务器上安装MongoDB,并通过配置文件启动服务,配置文件如下:
dbpath=/data/db #指定数据库路径
logpath=/data/mongodb.log #指定日志文件路径
logappend=true #在日志文件持续添加
port=27017 #端口号
bind_ip=0.0.0.0 #允许远程访问
fork=true #后台运行
replSet=admin #设置副本集名称
2.进入MongoDB后台管理 Shell
./momgo
使用admin数据库
> use admin
定义副本集配置变量,这里的 _id:”admin” 和配置文件中的“replSet=admin” 要保持一致
> config = { _id:"admin",
members:[
{_id:0,host:"10.175.120.131:27017"},
{_id:1,host:"10.175.121.134:27017"},
{_id:2,host:"10.175.121.136:27017"}
]
}
5.初始化副本集配置
> rs.initiate(config)
查看集群节点的状态
> rs.status()
输出:
{
"set" : "admin",
"date" : ISODate("2018-09-21T08:52:24.064Z"),
"myState" : 1,
"term" : NumberLong(3),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1537519943, 1),
"t" : NumberLong(3)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1537519943, 1),
"t" : NumberLong(3)
},
"appliedOpTime" : {
"ts" : Timestamp(1537519943, 1),
"t" : NumberLong(3)
},
"durableOpTime" : {
"ts" : Timestamp(1537519943, 1),
"t" : NumberLong(3)
}
},
"members" : [
{
"_id" : 1,
"name" : "10.175.120.131:27017",
"health" : 1, "state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 5874,
"optime" : {
"ts" : Timestamp(1537519943, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2018-09-21T08:52:23Z"),
"electionTime" : Timestamp(1537514082, 1),
"electionDate" : ISODate("2018-09-21T07:14:42Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 2,
"name" : "10.175.121.134:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 5861,
"optime" : {
"ts" : Timestamp(1537519933, 1),
"t" : NumberLong(3)
},
"optimeDurable" : {
"ts" : Timestamp(1537519933, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2018-09-21T08:52:13Z"),
"optimeDurableDate" : ISODate("2018-09-21T08:52:13Z"),
"lastHeartbeat" : ISODate("2018-09-21T08:52:23.012Z"),
"lastHeartbeatRecv" : ISODate("2018-09-21T08:52:23.584Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.175.120.131:27017",
"configVersion" : 1
},
{
"_id" : 3,
"name" : "10.175.121.136:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 5866,
"optime" : {
"ts" : Timestamp(1537519933, 1),
"t" : NumberLong(3)
},
"optimeDurable" : {
"ts" : Timestamp(1537519933, 1),
"t" : NumberLong(3)
},
"optimeDate" : ISODate("2018-09-21T08:52:13Z"),
"optimeDurableDate" : ISODate("2018-09-21T08:52:13Z"),
"lastHeartbeat" : ISODate("2018-09-21T08:52:23.013Z"),
"lastHeartbeatRecv" : ISODate("2018-09-21T08:52:23.558Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "10.175.120.131:27017",
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1537519943, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1537519943, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
输出部分参数说明:
"health" : 1, #代表机器正常
"stateStr" : "PRIMARY", #代表是主节点,可读写,其中有以下几下状态
1. STARTUP:刚加入到复制集中,配置还未加载
2. STARTUP2:配置已加载完,初始化状态
3. RECOVERING:正在恢复,不适用读
4. ARBITER: 仲裁者
5. DOWN:节点不可到达
6. UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构,脑裂
7. REMOVED:移除复制集
8. ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态
9. FATAL:出错。查看日志grep “replSet FATAL”找出错原因,重新做同步
10. PRIMARY:主节点
11. SECONDARY:备份节点