因为电脑不足,故在一台电脑上启动三个mongo环境,用以搭建mongo集群复制环境,一个为主节点(28001),一个为从节点(28002),另一个为选举节点(28003)。mongodb
在mongo新建三个目录,data,log,confshell
data用来存放数据库文件数据库
log用来存放日志文件app
conf用来存放各个节点的配置文件测试
二、编写配置文件spa
28001.conf线程
port=28001 bind_ip=192.168.0.106,127.0.0.1 logpath=/opt/mongodb-3.0.7/log/28001.log dbpath=/opt/mongodb-3.0.7/data/28001/ logappend=true pidfilepath=/opt/mongodb-3.0.7/data/28001/28001.pid fork=true oplogSize=1024 replSet=MONGO
28002.conf和28003.conf 和上面相似,只是修改一下目录和文件为对应的目录和文件便可日志
对于mongo的各个配置文件的详细信息,请参照文章《mongoDB 配置文件详解》code
3、启动各个节点ip
bin/mongod -f conf/28001.conf
bin/mongod -f conf/28001.conf
bin/mongod -f conf/28001.conf
出现如下信息,则表明启动成功
经过ps –ef |grep mongo命令,能够查看到启动的各个线程
四、配置节点主从复制模式
bin/mongo 127.0.0.1:28001/admin 进入shell
配置各个节点
> config={ ... _id:"MONGO", ... members:[ ... {_id:0,host:"127.0.0.1:28001"}, ... {_id:1,host:"127.0.0.1:28002"}, ... {_id:2,host:"127.0.0.1:28003"}]}
配置 28003为选举节点
config.members[2] ={ "_id" : 2, "host" : "127.0.0.1:28003","arbiterOnly":true}
cofig完成之后进行初始化
此时能够观察到shell窗口的前面的符号已经发生变化,更改成了MONGO:OTHER
经过输入rs.status()命令,能够查看如今各个节点的状态以及所处的位置
MONGO:OTHER> rs.status() { "set" : "MONGO", "date" : ISODate("2015-12-12T03:08:27.537Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "127.0.0.1:28001", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 856, "optime" : Timestamp(1449889628, 1), "optimeDate" : ISODate("2015-12-12T03:07:08Z"), "electionTime" : Timestamp(1449889630, 1), "electionDate" : ISODate("2015-12-12T03:07:10Z"), "configVersion" : 1, "self" : true }, { "_id" : 1, "name" : "127.0.0.1:28002", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 78, "optime" : Timestamp(1449889628, 1), "optimeDate" : ISODate("2015-12-12T03:07:08Z"), "lastHeartbeat" : ISODate("2015-12-12T03:08:26.662Z"), "lastHeartbeatRecv" : ISODate("2015-12-12T03:08:26.639Z"), "pingMs" : 0, "lastHeartbeatMessage" : "could not find member to sync from", "configVersion" : 1 }, { "_id" : 2, "name" : "127.0.0.1:28003", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 78, "lastHeartbeat" : ISODate("2015-12-12T03:08:26.662Z"), "lastHeartbeatRecv" : ISODate("2015-12-12T03:08:26.628Z"), "pingMs" : 0, "configVersion" : 1 } ], "ok" : 1 }
5、测试
从以上配置文件上能够看出 主节点是127.0.0.1:28001节点,在主节点上插入数据
登陆上28002节点之后,运行show dbs出现一个错误
2015-12-12T11:17:15.304+0800 E QUERY Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" } at Error (<anonymous>) at Mongo.getDBs (src/mongo/shell/mongo.js:47:15) at shellHelper.show (src/mongo/shell/utils.js:630:33) at shellHelper (src/mongo/shell/utils.js:524:36) at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47
报错信息为不是主节点,这是由于mongdb为了保证数据的一致性,若是不是经过驱动链接上从节点,是不容许进入这个节点操做的,这时能够利用命令 rs.slaveOK(true),来标示能够进入,这样再查询,则能够查询获得刚才在从节点上插入的数据了。
可是对于选举节点,是查询不到这些库和数据的,是由于选举节点不用来存储数据,只是为了选举。