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),來標示能夠進入,這樣再查詢,則能夠查詢獲得剛纔在從節點上插入的數據了。

                

可是對於選舉節點,是查詢不到這些庫和數據的,是由於選舉節點不用來存儲數據,只是爲了選舉。

相關文章
相關標籤/搜索