天天看點

Mongo的Replica Sets (複制集)的配置全過程和心得體會

一、MongoDB Replica Sets(副本集)簡單的說就是有自動故障恢複功能的主從叢集,主從叢集和副本集的最為明顯的差別是副本集沒有固定的"主節點":整個叢集會選舉出來一個"主節點"當其不能正常工作時則變更到其他的節點,提高了系統的穩定性。

MongoDB Replica Sets的架構如圖所示:

如上圖所示,MongoDB Replica Sets的結構類似于以叢集,完全可以把他當成一個叢集,因為他确實與叢集實作的作用是一樣的:如果其中一個節點出現故障,其他的節點會馬上将業務接管過來。而無需停機操作

二、MongoDB Replica Sets的配置步驟:

1:首先要做是啟動三個節點

介紹一下涉及到的參數

--oplogSize 日志操作檔案的大

--dbpath   資料檔案路徑

--logpath  日志檔案路徑

--port        端口号,預設是27017.我這裡使用的也是這個端口号.

--replSet   複制集的名字,一個replica sets中的每個節點的這個參數都要用一個複制集名字,這裡是test.

--replSet test/  這個後面跟的是其他standard節點的ip和端口

--maxConns   最大連接配接數

--fork       背景運作

--logappend   日志檔案循環使用,如果日志檔案已滿,那麼新日志覆寫最久日志。

--keyFile       辨別同一叢集的認證私鑰

其中在啟動節點時一定要加上oplogSize 的參數 為其設定大小,不然在64位作業系統上的mongodb,oplogs都相當大-可能是5%的磁盤空間,要根據情況設定個合理的值。

2:啟動三個節點

 啟動第一個節點:/usr/local/mongodb/bin/mongod --port 28010 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r0/ --logpath=/sdb1/liujijun/data/log/r0.log --replSet rs1/127.0.0.1:28011,127.0.0.1:28012 --maxConns 800 --fork --logappend

啟動第二個節點: /usr/local/mongodb/bin/mongod --port 28012 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r2/ --logpath=/sdb1/liujijun/data/log/r2.log --replSet rs1/127.0.0.1:28010,127.0.0.1:28011 --maxConns 800 --fork --logappend

啟動第三個節點:/usr/local/mongodb/bin/mongod --port 28011 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r1/ --logpath=/sdb1/liujijun/data/log/r1.log --replSet rs1/127.0.0.1:28010,127.0.0.1:28012 --maxConns 800 --fork --logappend

3:連結任選一個節點

# /usr/local/mongodb/bin/mongo --port 28010

> config={_id : 'rs1',members : [{_id : 0, host : 'localhost:28010'},{_id : 1, host : 'localhost:28011'},{_id : 2, host : 'localhost:28012'}]}//配置節點資訊

{

        "_id" : "rs1",

        "members" : [

                {

                        "_id" : 0,

                        "host" : "localhost:28010"

                },

                        "_id" : 1,

                        "host" : "localhost:28011"

                        "_id" : 2,

                        "host" : "localhost:28012"

                }

        ]

}

> rs.initiate(config)//這個過程可能要等個一到兩分鐘的時間。

        "info" : "Config now saved locally.  Should come online in about a minute.",

        "ok" : 1

> rs.status()

        "set" : "rs1",

        "date" : ISODate("2012-02-19T06:01:34Z"),

        "myState" : 1,

                        "name" : "localhost:28010",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "optime" : {

                                "t" : 1329630925000,

                                "i" : 1

                        },

                        "optimeDate" : ISODate("2012-02-19T05:55:25Z"),

                        "self" : true

                        "name" : "localhost:28011",

                        "state" : 2,

                        "stateStr" : "SECONDARY",

                        "uptime" : 367,

                        "lastHeartbeat" : ISODate("2012-02-19T06:01:33Z"),

                        "pingMs" : 0

                        "name" : "localhost:28012",

        ],

PRIMARY>

配置到此結束。

備注:

如果要讀寫分離的話:db.getMongo().setSlaveOk()指令實作從庫的可以查詢的目的。在利用副本集時最好不要設定使用者名和密碼,因為這樣會影響效率的,權限系統,非常耗資源,需要大量的運算。