摘要:投票節(jié)點(diǎn)僅僅在選舉中進(jìn)行投票。如下圖所示從節(jié)點(diǎn)無(wú)法升職為主節(jié)點(diǎn)的情況其他概念從節(jié)點(diǎn)還有集中特殊的設(shè)置情況,不同的設(shè)置有不同的需求優(yōu)先級(jí)為設(shè)置,那么該結(jié)點(diǎn)將不能成為主節(jié)點(diǎn),但是其數(shù)據(jù)仍是與主節(jié)點(diǎn)保持一致的而且應(yīng)用程序也可以進(jìn)行讀操作。
介紹
replicattion set 多臺(tái)服務(wù)器維護(hù)相同的數(shù)據(jù)副本,提高服務(wù)器的可用性,總結(jié)下來(lái)有以下好處:
MongoDB 復(fù)制集的結(jié)構(gòu)以及基本概念數(shù)據(jù)備份與恢復(fù)
讀寫分離
正如上圖所示,MongoDB 復(fù)制集的架構(gòu)中,主要分為兩部分:主節(jié)點(diǎn)(Primary)和從節(jié)點(diǎn)(Secondary)。
主節(jié)點(diǎn):在一個(gè)復(fù)制集中只有并且必須有一個(gè)主節(jié)點(diǎn),主節(jié)點(diǎn)也是眾多實(shí)例中唯一可以接收客戶端寫操作的節(jié)點(diǎn),當(dāng)然也可以進(jìn)行讀操作;
從節(jié)點(diǎn):從節(jié)點(diǎn)會(huì)復(fù)制主節(jié)點(diǎn)的操作,以獲取完全一致的數(shù)據(jù)集。客戶端不能夠直接對(duì)從節(jié)點(diǎn)進(jìn)行寫操作,但是可以進(jìn)行讀操作,這個(gè)需要通過(guò)復(fù)制集選項(xiàng)進(jìn)行設(shè)置。
投票節(jié)點(diǎn):投票節(jié)點(diǎn) 并不含有 復(fù)制集中的數(shù)據(jù)集副本,且也 無(wú)法 升職為主節(jié)點(diǎn)。投票節(jié)點(diǎn)的存在是為了使復(fù)制集中的節(jié)點(diǎn)數(shù)量為奇數(shù),這樣保證在進(jìn)行投票的時(shí)候不會(huì)出現(xiàn)票數(shù)相同的情況。如果添加了一個(gè)節(jié)點(diǎn)后,總節(jié)點(diǎn)數(shù)為偶數(shù),那么就需要相應(yīng)的增加一個(gè)投票節(jié)點(diǎn)。
最基本的復(fù)制集架構(gòu)注:MongoDB 3.0 把復(fù)制集中的成員數(shù)量從原來(lái)的12個(gè)提升到了50個(gè),但是投票節(jié)點(diǎn)的數(shù)量仍然保持不變,還是7個(gè)。
一個(gè)主節(jié)點(diǎn),兩個(gè)從節(jié)點(diǎn),自動(dòng)化故障切換的特性
最基本的復(fù)制集架構(gòu)是有3個(gè)節(jié)點(diǎn)的形式。這樣在主節(jié)點(diǎn)不可用以后,從節(jié)點(diǎn)會(huì)進(jìn)行投票選出一個(gè)節(jié)點(diǎn)成為主節(jié)點(diǎn),繼續(xù)工作。如下圖所示:
三個(gè)節(jié)點(diǎn)的復(fù)制集架構(gòu),還有另外一種形式:一個(gè)主節(jié)點(diǎn),一個(gè)從節(jié)點(diǎn),一個(gè)投票節(jié)點(diǎn)。如下圖所示:
一個(gè)主節(jié)點(diǎn),一個(gè)從節(jié)點(diǎn),一個(gè)投票節(jié)點(diǎn)
在這種架構(gòu)中,當(dāng)主節(jié)點(diǎn)不可用時(shí),只有從節(jié)點(diǎn)可以升為主節(jié)點(diǎn),而投票節(jié)點(diǎn)是不可以成為主節(jié)點(diǎn)的。投票節(jié)點(diǎn)僅僅在選舉中進(jìn)行投票。如下圖所示:
其他概念
從節(jié)點(diǎn)還有集中特殊的設(shè)置情況,不同的設(shè)置有不同的需求:
優(yōu)先級(jí)為0:設(shè)置 priority:0 ,那么該結(jié)點(diǎn)將不能成為主節(jié)點(diǎn),但是其數(shù)據(jù)仍是與主節(jié)點(diǎn)保持一致的,而且應(yīng)用程序也可以進(jìn)行讀操作。這樣可以在某些特殊的情況下,保證其他特定節(jié)點(diǎn)優(yōu)先成為主節(jié)點(diǎn)。
隱藏節(jié)點(diǎn):隱藏節(jié)點(diǎn)與主節(jié)點(diǎn)的數(shù)據(jù)集一致,但是對(duì)于應(yīng)用程序來(lái)說(shuō)是不可見(jiàn)的。隱藏節(jié)點(diǎn)可以很好的與 復(fù)制集 中的其他節(jié)點(diǎn)隔離,并應(yīng)對(duì)特殊的需求,比如進(jìn)行報(bào)表或者數(shù)據(jù)備份。隱藏節(jié)點(diǎn)也應(yīng)該是一個(gè)不能升職為主節(jié)點(diǎn)的優(yōu)先級(jí)為0的節(jié)點(diǎn)。
延時(shí)節(jié)點(diǎn):延時(shí)節(jié)點(diǎn)也將從 復(fù)制集 中主節(jié)點(diǎn)復(fù)制數(shù)據(jù),然而延時(shí)節(jié)點(diǎn)中的數(shù)據(jù)集將會(huì)比復(fù)制集中主節(jié)點(diǎn)的數(shù)據(jù)延后。舉個(gè)例子,現(xiàn)在是09:52,如果延時(shí)節(jié)點(diǎn)延后了1小時(shí),那么延時(shí)節(jié)點(diǎn)的數(shù)據(jù)集中將不會(huì)有08:52之后的操作。
由于延時(shí)節(jié)點(diǎn)的數(shù)據(jù)集是延時(shí)的,因此它可以幫助我們?cè)谌藶檎`操作或是其他意外情況下恢復(fù)數(shù)據(jù)。舉個(gè)例子,當(dāng)應(yīng)用升級(jí)失敗,或是誤操作刪除了表和數(shù)據(jù)庫(kù)時(shí),我們可以通過(guò)延時(shí)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)恢復(fù)。
oplog:全拼 oprations log,它保存有數(shù)據(jù)庫(kù)的所有的操作的記錄。在復(fù)制集中,主節(jié)點(diǎn)產(chǎn)生 oplog,然后從節(jié)點(diǎn)復(fù)制主節(jié)點(diǎn)的 oplog 進(jìn)行相應(yīng)的操作,這樣達(dá)到保持?jǐn)?shù)據(jù)集一致的要求。因此從節(jié)點(diǎn)的數(shù)據(jù)與主節(jié)點(diǎn)的數(shù)據(jù)相比是有延遲的。
配置# 創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄 mkdir -p /data/r0 /data/r1 /data/r2 # 創(chuàng)建日志文件 touch /var/log/mongo17.log /var/log/mongo18.log /var/log/mongo19.log #啟動(dòng)3個(gè)實(shí)例,且聲明實(shí)例屬于某復(fù)制集 rsa ./bin/mongod --port 27017 --dbpath /data/r0 --smallfiles --replSet rsa --fork --logpath /var/log/mongo17.log ./bin/mongod --port 27018 --dbpath /data/r1 --smallfiles --replSet rsa --fork --logpath /var/log/mongo18.log ./bin/mongod --port 27019 --dbpath /data/r2 --smallfiles --replSet rsa --fork --logpath /var/log/mongo19.log # 進(jìn)入27017進(jìn)行配置初始化 ./bin/mongo --port 27017 rsconf = { _id:"rsa", members: [ {_id:0, host:"192.168.42.168:27017" } ] } rs.initiate(rsconf); # 如果以后需要再重載一下config的話,用rs.reconfig(rsconf); # 添加節(jié)點(diǎn) rs.add("192.168.42.168:27018"); rs.add("192.168.42.168:27019"); # 查看狀態(tài) rs.status(); # 刪除節(jié)點(diǎn) rs.remove("192.168.1.201:27019"); # 主節(jié)點(diǎn)插入數(shù)據(jù) >use test >db.user.insert({uid:1,name:"lily"}); #連接secondary查詢同步情況 ./bin/mongo --port 27019 >show dbs rsa:SECONDARY> show dbs; 2015-08-27T11:39:00.638+0800 E QUERY Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" } # 還可以通過(guò)isMaster()命令來(lái)查看信息; rsa:PRIMARY> db.isMaster(); { "setName" : "rsa", "setVersion" : 5, "ismaster" : true, "secondary" : false, "hosts" : [ "192.168.42.168:27018", "192.168.42.168:27019", "192.168.42.168:27017" ], "primary" : "192.168.42.168:27018", "me" : "192.168.42.168:27018", "electionId" : ObjectId("55dea0cffa0c638625a82486"), "maxBsonObjectSize" : 16777216, "maxMessageSizeBytes" : 48000000, "maxWriteBatchSize" : 1000, "localTime" : ISODate("2015-08-27T05:49:13.740Z"), "maxWireVersion" : 3, "minWireVersion" : 0, "ok" : 1 } # 出現(xiàn)上述錯(cuò)誤,是因?yàn)閟lave默認(rèn)不許讀寫 >rs.slaveOk(); >show dbs; # 執(zhí)行上面一個(gè)語(yǔ)句就可以看到和primary一致的數(shù)據(jù),并且可以把讀和寫分離開(kāi)來(lái);
以上便是一個(gè)最簡(jiǎn)單的復(fù)制集架構(gòu),其中如果27017的主節(jié)點(diǎn)崩潰,那27018的節(jié)點(diǎn)就由從節(jié)點(diǎn)變?yōu)橹鞴?jié)點(diǎn);注意,如果再添加原來(lái)的27017節(jié)點(diǎn)進(jìn)來(lái),那主節(jié)點(diǎn)還是27018;
自動(dòng)化配置腳本#!/bin/bash IP="192.168.1.202" NA="rsb" if [ "$1" = "reset" ] then pkill -9 mongo rm -rf /home/m* exit fi if [ "$1" = "install" ] then mkdir -p /home/m0 /home/m1 /home/m2 /home/mlog /usr/local/mongodb/bin/mongod --dbpath /home/m0 --logpath /home/mlog/m17.log --logappend --port 27017 --fork --replSet ${NA} /usr/local/mongodb/bin/mongod --dbpath /home/m1 --logpath /home/mlog/m18.log --logappend --port 27018 --fork --replSet ${NA} /usr/local/mongodb/bin/mongod --dbpath /home/m2 --logpath /home/mlog/m19.log --logappend --port 27019 --fork --replSet ${NA} exit fi if [ "$1" = "repl" ] then /usr/local/mongodb/bin/mongo <
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/18806.html
摘要:簡(jiǎn)述為何要分片減少單機(jī)請(qǐng)求數(shù),降低單機(jī)負(fù)載,提高總負(fù)載減少單機(jī)的存儲(chǔ)空間,提高總存空間。就是用來(lái)存儲(chǔ)所有節(jié)點(diǎn)的配置信息每個(gè)的范圍在各的分布情況該集群中所有和的配置信息。 簡(jiǎn)述 為何要分片 減少單機(jī)請(qǐng)求數(shù),降低單機(jī)負(fù)載,提高總負(fù)載 減少單機(jī)的存儲(chǔ)空間,提高總存空間。 showImg(http://static.oschina.net/uploads/space/2014/0201/1...
摘要:導(dǎo)入導(dǎo)出可以操作的是本地的服務(wù)器也可以是遠(yuǎn)程的服務(wù)器所以都有如下通用選項(xiàng)主機(jī)端口用戶名密碼導(dǎo)出庫(kù)名表名列名查詢條件導(dǎo)出的文件名導(dǎo)出格式便于和傳統(tǒng)數(shù)據(jù)庫(kù)交換數(shù)據(jù)導(dǎo)出庫(kù)下面的表從哪里導(dǎo)出導(dǎo)出的文檔數(shù)導(dǎo)出庫(kù)下 導(dǎo)入/導(dǎo)出可以操作的是本地的mongodb服務(wù)器,也可以是遠(yuǎn)程的服務(wù)器所以,都有如下通用選項(xiàng): -h host 主機(jī) --port port 端口 -u username 用...
摘要:大體分為成員的角色及轉(zhuǎn)換成員狀態(tài)及轉(zhuǎn)換兩部分。每個(gè)復(fù)制集成員在啟動(dòng)后,都先進(jìn)入狀態(tài),然后加載成員的復(fù)制集配置,之后進(jìn)入到狀態(tài)。選舉行為除了受和兩個(gè)屬性影響外,成員的狀態(tài)也會(huì)影響選舉,僅有和五種狀態(tài)的成員允許進(jìn)行投票操作。 此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問(wèn)網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 復(fù)制集(Replica Set)是MongoDB核心組件,相比早期版本采用...
摘要:前言在使用加載數(shù)據(jù)數(shù)據(jù)庫(kù)常見(jiàn)的優(yōu)化操作后端掘金一索引將放第一位,不用說(shuō),這種優(yōu)化方式我們一直都在悄悄使用,那便是主鍵索引。 Redis 內(nèi)存壓縮實(shí)戰(zhàn) - 后端 - 掘金在討論Redis內(nèi)存壓縮的時(shí)候,我們需要了解一下幾個(gè)Redis的相關(guān)知識(shí)。 壓縮列表 ziplist Redis的ziplist是用一段連續(xù)的內(nèi)存來(lái)存儲(chǔ)列表數(shù)據(jù)的一個(gè)數(shù)據(jù)結(jié)構(gòu),它的結(jié)構(gòu)示例如下圖 zlbytes: 記錄整...
閱讀 1390·2021-09-22 10:02
閱讀 1914·2021-09-08 09:35
閱讀 4063·2021-08-12 13:29
閱讀 2610·2019-08-30 15:55
閱讀 2265·2019-08-30 15:53
閱讀 2303·2019-08-29 17:13
閱讀 2764·2019-08-29 16:31
閱讀 2957·2019-08-29 12:24