Mongodb集羣之副本集

上篇咱們遺留了幾個問題

1主節點能否自動切換連接?目前需要手動切換

2主節點讀寫壓力過大如何解決

3從節點每個上面的數據都是對數據庫全量拷貝,從節點壓力會不會過大

4數據壓力達到機器支撐不了時候能否自動擴展?


Nosql的產生是爲了解決大數據量,高擴展,高性能,靈活數據模型,高可用性。但是光通過主從模型的架構是遠遠達不到上面幾點的。因此,mongodb設計了副本集和分片的功能。咱們下面就來說說副本集

mongodb官方已經不建議使用主從模式,而是副本集進行代替。

IMPORTANT

Replica sets replace master-slave replication for most use cases. If possible, use replicasets rather than master-slave replication for all new production deployments.This documentation remains to support legacy deployments and for archivalpurposes only.

來自 <http://docs.mongodb.org/master/core/master-slave/>

 

什麼是副本集


   副本集合(ReplicaSets),是一個基於主/從複製機制的複製功能,但增加了自動故障轉移和恢復特性。一個集羣最多可以支持7個服務器,並且任意節點都可以是主節點。所有的寫操作都被分發到主節點,而讀操作可以在任何節點上進行。

 

 

 


 

從圖中可以發現,客戶端連接到整個副本集,不關係具體哪一臺服務器是否宕機。主服務器負責整個副本集的讀寫。副本集定期同步數據,一旦主節點掛了,副本節點就會選舉一個新主機作爲主節點。壞掉的節點修好後會自動擴充爲副本節點。


如何配置副本集

  在一臺機器上創建三個文件用戶存放三臺數據庫,之後分別配置三臺數據庫,使他們的replset(複製集分別形成閉環)配置啓動數據庫。

 

配置啓動參數



啓動配置文件

mongoA.bat
mongod --configa.conf
mongoB.bat
mongod --configb.conf
mongodbC.bat
Mongod--config c.conf

 

登錄數據庫

ashell.bat
mongo 127.0.0.1:9000
b.shell.bat
mongo 127.0.0.1:9001
c.shell.bat
mongo 127.0.0.1:9002

初始化副本集

 

在三臺機器上任意登陸一臺機器輸入如下命名回車

 

use admin
db.runCommand({"replSetInitiate":{	
	"_id":'child',
	"members":[
	{"_id":1,"host":"127.0.0.1:9000"},
	{"_id":2,"host":"127.0.0.1:9001"},
	{"_id":3,"host":"127.0.0.1:9002",},
	]
		}	
})


查看集羣狀態

child:SECONDARY> rs.status()
{
        "set" : "child",
        "date" : ISODate("2015-08-16T07:43:36Z"),
        "myState" : 2,
        "syncingTo" : "127.0.0.1:9002",
        "members" : [
                {
                        "_id" : 1,
                        "name" : "127.0.0.1:9000",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 182,
                        "optime" : Timestamp(1439170908, 1),
                        "optimeDate" : ISODate("2015-08-10T01:41:48Z"),
                        "infoMessage" : "syncing to: 127.0.0.1:9002",
                        "self" : true
                },
                {
                        "_id" : 2,
                        "name" : "127.0.0.1:9001",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 7,
                        "optime" : Timestamp(1439170908, 1),
                        "optimeDate" : ISODate("2015-08-10T01:41:48Z"),
                        "lastHeartbeat" : ISODate("2015-08-16T07:43:36Z"),
                        "lastHeartbeatRecv" : ISODate("2015-08-16T07:43:35Z"),
                        "pingMs" : 2,
                        "lastHeartbeatMessage" : "syncing to: 127.0.0.1:9002",
                        "syncingTo" : "127.0.0.1:9002"
                },
                {
                        "_id" : 3,
                        "name" : "127.0.0.1:9002",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 8,
                        "optime" : Timestamp(1439170908, 1),
                        "optimeDate" : ISODate("2015-08-10T01:41:48Z"),
                        "lastHeartbeat" : ISODate("2015-08-16T07:43:35Z"),
                        "lastHeartbeatRecv" : ISODate("2015-08-16T07:43:36Z"),
                        "pingMs" : 772,
                        "electionTime" : Timestamp(1439711010, 1),
                        "electionDate" : ISODate("2015-08-16T07:43:30Z")
                }
        ],
        "ok" : 1

}

整個部分創建成功

 

副本集數據庫測試

 

   啓動三個數據庫查看只有一個活躍節點其他爲副本節點

 

 

停掉活躍點,我們查看活躍點

child:PRIMARY>show dbs

2015-08-16T15:51:21.667+0800Socket recv() errno:10053你的主機中的軟件中止了一

個已建立的連接。127.0.0.1:9002

2015-08-16T15:51:21.669+0800SocketException: remote: 127.0.0.1:9002 error: 9001

 

再次連接數據庫發現 活躍點已轉移到 9000端口


 

再將9002數據庫開啓

查看狀態 9002數據庫爲備份點


 

以上說明我們的副本集已經搭建完成

 

小結:


   副本集解解決了我們的故障轉義功能,但是我們還是有一些問題 ,從節點每個上面的數據都是對數據庫全量拷貝,從節點壓力會不會過大?

數據壓力大到機器支撐不了的時候能否做到自動擴展?

 

發佈了258 篇原創文章 · 獲贊 23 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章