在同一台Centos下安装MongoDB的复制集
准备三份配置文件:
mongod.conf
bind_ip=0.0.0.0
port = 27017
dbpath = /usr/local/mongo/data/
logpath = /usr/local/mongo/log/mongod.log
fork=true
logappend=true
replSet=myMongoSet
mongod2.conf
bind_ip=0.0.0.0
port = 27018
dbpath = /usr/local/mongo/data2/
logpath = /usr/local/mongo/log2/mongod.log
fork=true
logappend=true
replSet=myMongoSet
mongod3.conf
bind_ip=0.0.0.0
port = 27019
dbpath = /usr/local/mongo/data3/
logpath = /usr/local/mongo/log3/mongod.log
fork=true
logappend=true
replSet=myMongoSet
进入bin目录下分别启动三台mongo实例
./mongod -f ../conf/mongod.conf
./mongod -f ../conf/mongod2.conf
./mongod -f ../conf/mongod3.conf
查看进程,验证三台MongoDB实例是否启动成功
[root@192 conf]# ps -ef | grep mongod
root 559 130632 0 14:53 pts/1 00:00:00 grep --color=auto mongod
root 130957 1 0 14:37 ? 00:00:04 ./mongod -f ../conf/mongod.conf
root 130986 1 0 14:37 ? 00:00:04 ./mongod -f ../conf/mongod2.conf
root 131014 1 0 14:37 ? 00:00:04 ./mongod -f ../conf/mongod3.conf
说明三台MongoDB实例已经启动成功
连接第一台mongo
./mongo 192.168.15.31:27017/admin
准备初始化实例
> config={_id:"myMongoSet",members:[{_id:0,host:"192.168.15.31:27017"},{_id:1,host:"192.168.15.31:27018"},{_id:2,host:"192.168.15.31:27019"}]}
{
"_id" : "myMongoSet",
"members" : [
{
"_id" : 0,
"host" : "192.168.15.31:27017"
},
{
"_id" : 1,
"host" : "192.168.15.31:27018"
},
{
"_id" : 2,
"host" : "192.168.15.31:27019"
}
]
}
定义config内容为集群的实例信息后
初始化复制集
执行后输出如下:
rs.initiate(config)
{
"ok" : 1,
"operationTime" : Timestamp(1517640358, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1517640358, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
说明MongoDB的复制集创建成功
查看复制集状态
myMongoSet:SECONDARY> rs.status()
{
"set" : "myMongoSet",
"date" : ISODate("2019-02-03T06:46:09.449Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"appliedOpTime" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
},
"durableOpTime" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
}
},
"members" : [
{
"_id" : 0,
"name" : "192.168.15.31:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 546,
"optime" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("2019-02-03T06:45:58Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1517640368, 1),
"electionDate" : ISODate("2019-02-03T06:46:08Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "192.168.15.31:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 10,
"optime" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("2019-02-03T06:45:58Z"),
"optimeDurableDate" : ISODate("2019-02-03T06:45:58Z"),
"lastHeartbeat" : ISODate("2019-02-03T06:46:08.931Z"),
"lastHeartbeatRecv" : ISODate("2019-02-03T06:46:05.733Z"),
"pingMs" : NumberLong(0),
"configVersion" : 1
},
{
"_id" : 2,
"name" : "192.168.15.31:27019",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 10,
"optime" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(1517640358, 1),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("2019-02-03T06:45:58Z"),
"optimeDurableDate" : ISODate("2019-02-03T06:45:58Z"),
"lastHeartbeat" : ISODate("2019-02-03T06:46:08.932Z"),
"lastHeartbeatRecv" : ISODate("2019-02-03T06:46:05.734Z"),
"pingMs" : NumberLong(0),
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1517640358, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1517640368, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
验证数据同步:
连接27017实例:
myMongoSet:PRIMARY>use stu
myMongoSet:PRIMARY> db.stuinfo.insert({"name":"张三","age":12,"address":"山东"})
查询添加的内容:
myMongoSet:PRIMARY> db.stuinfo.find()
{ "_id" : ObjectId("5a755b6a4dfb8ddaa17bad20"), "name" : "张三", "age" : 12, "address" : "山东" }
进入27018实例:
myMongoSet:SECONDARY> db.stuinfo.find()
Error: error: {
"operationTime" : Timestamp(1517641210, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1517641210, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
查看信息,可能会报如上问题,这是因为MongoDB的salve默认是不允许读写的。 解决方法:
myMongoSet:SECONDARY> rs.slaveOk()
查看信息是否同步:
myMongoSet:SECONDARY> use stu
switched to db stu
myMongoSet:SECONDARY> db.stuinfo.find()
{ "_id" : ObjectId("5a755b6a4dfb8ddaa17bad20"), "name" : "张三", "age" : 12, "address" : "山东" }
连接实例27019,执行同样的操作。 由此可见,数据信息可以正确同步, 到此为止,MongoDB的复制集搭建成功