MongoDB叢集上複本集(replica set)建立

來源:互聯網
上載者:User

MongoDB叢集上複本集(replica set)建立

1複本集的配置
在單機上成功運行MongoDB後,要使用複本集來建立Mongodb叢集,需要先關閉mongod守護進程,然後:

mongod --replSet setname --fork

來使用自己設定的複本集的名字setname並啟動mongodb。注意,--fork可以不用,它的意義是讓mongod 在後台執行,以方便在shell中運行別的程式。

如果要在設定檔中使用這些選項,可以在設定檔mongo.conf中加入

replSet=setname
fork=true
oplogSize=1024 #記錄檔大小,兆(M)為單位。mongod啟動時會建立相應大小的檔案,如果設定太大會報磁碟空間不足的錯誤

然後使用 mongod -f mongo.conf 來啟動進程

其他選項參見 http://docs.mongodb.org/manual/reference/program/mongod/#cli-mongod-replica-set


2.啟動和增加節點
在各個節點上使用了1.中的配置啟動後,有兩種方法來建立複本集的串連:

1)初始化複本集,增加節點配置
用用戶端登陸進入mongo使用

rs.initiate()

初始化複本集,等待一段時間(主要是建立記錄檔oplog)後,看到提示符顯示setname:PRIMARY> 也就是成功了,然後:

rs.config()

可以查看複本集的配置狀態,比如:

{
        "_id" : "clover",
        "version" : 5,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "host1:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : 0,
                        "votes" : 1
                }
        ] ...

目前只有一個主節點(primary),在確保可以訪問另外兩個節點的mongo服務的情況下,在原生mongo shell中輸入:

rs.add("hostname:port")

來增加節點,成功後使用:


[html] view plain copy print?rs.status() 

rs.status()來查看副本狀態。


2)使用叢集配置文檔來棄置站台集

這個方法我沒有驗證,如果要利用配置文檔,在進入mongod shell之後,先要建立一個文檔:

config = {
 "_id"  : "setname",
 "members" : [
  {"_id" : 0, "host" : "host1:port"},
  {"_id" : 1, "host" : "host2:port"},
  {"_id" : 2, "host" : "host3:port"},
  ...
 ]
}

然後使用這個文檔來啟動複本集:

rs.initiate(config)

使用這種方法必須要用mongo shell來先建立配置文檔,而不能使用設定檔。

3.測試複本集
首先,使用

rs.isMaster()

得到:

{
        "setName" : "clover",
        "setVersion" : 7,
        "ismaster" : true,
        "secondary" : false,
        "hosts" : [
                "host1:27017",
                "host2:27017",
                "host3:27017"
        ],
        "primary" : "host1:27017",
        "me" : "host1:27017",
        "electionId" : ObjectId("5535c57b872d670c6331e5bf"),
        "maxBsonObjectSize" : 16777216,
        "maxMessageSizeBytes" : 48000000,
        "maxWriteBatchSize" : 1000,
        "localTime" : ISODate("2015-04-21T05:01:31.370Z"),
        "maxWireVersion" : 3,
        "minWireVersion" : 0,
        "ok" : 1
}

這樣來查看主節點和複本集的狀態,值得一提的是,備份節點(secondary)如果設定屬性hidden為0,則rs.isMaster()將不能觀察到此節點,例如下面的代碼:


[html] view plain copy print?cfg=rs.config() #擷取當前的配置 
cfg.members[2].priority=0 #讓_id為2的節點優先順序降為0 
cfg.members[2].hidden=1 #設定此節點隱藏,僅當其優先順序為0時有效 
rs.reconfig(cfg) #應用配置 

cfg=rs.config() #擷取當前的配置
cfg.members[2].priority=0 #讓_id為2的節點優先順序降為0
cfg.members[2].hidden=1 #設定此節點隱藏,僅當其優先順序為0時有效
rs.reconfig(cfg) #應用配置將_id為2的節點設為隱藏,使得其狀態不被rs.isMaster看到,但它可以被rs.status()看到。

接著,在mongo shell插入一個文檔:

for(i=0;i<1000;i++){test.coll.insert({count:i})}

db.coll.count() #測試插入文檔是否成功


1000

然後檢查備份節點上的情況:

new Mongo("host2:27017")
db.coll.count()
1000

說明在host2上的資料庫也更新了。

然後,嘗試將host1上的mongod進程宕掉,這種情況在實際生產中可能出現,查看host2和host3的情況:

在host1的bash上:

sudo bin/mongod --shutdown
killing process with pid: 15910

然後登陸host2上的mongo shell,發現提示符已經變為:setname>primary 表示host2已經變為主節點,在host2上db.coll.count()得到1000,表示備份的資料還在。

重新使用之前的叢集設定檔來啟動mongod -f mongo.conf ,發現提示符為setname:SECONDARY>表示其變為備份節點,在host2上用rs.isMaster()測試顯示:

  "setName" : "clover",
        "setVersion" : 9,
        "ismaster" : true,
        "secondary" : false,
        "hosts" : [
                "host1:27017",
                "host2:27017"
        ],
        "passives" : [
                "host3:27017"
        ],
        "primary" : "host2:27017",
        "me" : "zookeeper2:27017",<

複本集重新變為3台主機。host2仍為主節點,host3因為設定優先權為0變為消極(passives)狀態,它不會被選為主節點。

更多MongoDB相關教程見以下內容:

CentOS 編譯安裝 MongoDB與mongoDB的php擴充

CentOS 6 使用 yum 安裝MongoDB及伺服器端配置

Ubuntu 13.04下安裝MongoDB2.4.3

MongoDB入門必讀(概念與實戰並重)

Ubunu 14.04下MongoDB的安裝指南

《MongoDB 權威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

Nagios監控MongoDB分區叢集服務實戰

基於CentOS 6.5作業系統搭建MongoDB服務

MongoDB 的詳細介紹:請點這裡
MongoDB 的:請點這裡

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.