mongoDB集群复制环境搭建

因为电脑不足,故在一台电脑上启动三个mongo环境,用以搭建mongo集群复制环境,一个为主节点(28001),一个为从节点(28002),另一个为选举节点(28003)。mongodb

  1. mongo新建三个目录,datalogconfshell

                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.conf28003.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),来标示能够进入,这样再查询,则能够查询获得刚才在从节点上插入的数据了。

                

可是对于选举节点,是查询不到这些库和数据的,是由于选举节点不用来存储数据,只是为了选举。

相关文章
相关标签/搜索