共計(jì) 1913 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
這篇文章主要介紹“MongoDB 高可用分為哪些方式”,在日常操作中,相信很多人在 MongoDB 高可用分為哪些方式問(wèn)題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MongoDB 高可用分為哪些方式”的疑惑有所幫助!接下來(lái),請(qǐng)跟著丸趣 TV 小編一起來(lái)學(xué)習(xí)吧!
1:MongDB 的架構(gòu)設(shè)計(jì)之中,MongoDB 支持多個(gè)機(jī)器之間通過(guò)異步復(fù)制達(dá)到故障轉(zhuǎn)移和實(shí)現(xiàn)冗余,多臺(tái)的機(jī)器之中只有一臺(tái)是用于寫(xiě)操作,正是由于這個(gè)原因,在 MongoDB 之中只有一臺(tái)充當(dāng)了 Primary 角色的機(jī)器能把讀操作分發(fā)給 Slave。
MongoDB 高可用可以分為兩種的方式:
1:master——Slave 主從復(fù)制,目前已經(jīng)不怎么實(shí)用了
2:Replica Sets 復(fù)制集
MongoDB 在 1.6 版之后加入了新的一個(gè)功能點(diǎn)叫做復(fù)制及:replica Set,增加了故障的自動(dòng)切換和自動(dòng)修復(fù)成員節(jié)點(diǎn)。各個(gè) DB 之間的數(shù)據(jù)完全一致。大大降低了維護(hù)成功,
如圖:
數(shù)學(xué)上來(lái)將,就是一個(gè)同構(gòu)型的集合:也就是一個(gè)集群。MongoDB 的 Relica Set 架構(gòu)是通過(guò)一個(gè)日志來(lái)存儲(chǔ)寫(xiě)操作的。這個(gè)操作就叫做”oplog“,oplog.rs 是一個(gè)固定長(zhǎng)度的 CappedCollection。這個(gè) Collection 的位置存在于“Local 數(shù)據(jù)庫(kù)之中”,用于記錄 Replica Set 操作的日志,它在默認(rèn)的情況之下,對(duì)于 64 位的 MongoDB,opLog 是比較大的。可以達(dá)到 5% 的磁盤(pán)空間,oplog 的大小是可以通過(guò) Mongod 的參數(shù) ”—oplogSize“來(lái)改變。
除了固定的復(fù)制集意外,還保持了較好的伸縮性,一旦需求得不到滿(mǎn)足,那么就需要添加新的機(jī)器。那么句需要增加一些節(jié)點(diǎn)將壓力平均分配一下。
增加節(jié)點(diǎn)的方式,一般可以通過(guò) oplog 直接進(jìn)行增加節(jié)點(diǎn),操作簡(jiǎn)單并且無(wú)需人工干預(yù),可是 oplog 是
capped collection,采用的循環(huán)方式進(jìn)行日志處理,所以采用的是 oplog 的方式來(lái)添加,可能會(huì)有不一致的問(wèn)題。
因?yàn)槿罩局虚g存儲(chǔ)的信息由可能已經(jīng)刷新過(guò)了。不過(guò)沒(méi)關(guān)系。通常而言,你可以通過(guò)數(shù)據(jù)庫(kù)的快照 –fastsync 和 oplog 結(jié)合的
方式來(lái)增加節(jié)點(diǎn)。這種方式的操作流程是,先取某一個(gè)復(fù)制集成員的物理文件來(lái)作為一個(gè)初始化的數(shù)據(jù),然后剩余的部分用
oplog 的方式去添加。
而 Sharding,這是一種將海量的數(shù)據(jù)水平擴(kuò)展的數(shù)據(jù)庫(kù)集群系統(tǒng),數(shù)據(jù)庫(kù)分表存儲(chǔ)在 sharding 的各個(gè)節(jié)點(diǎn)之上。MongoDB 的數(shù)據(jù)分塊成為 chunk,每一個(gè) Chunk 都是 Collection 中一段連續(xù)的數(shù)據(jù)記錄,通常的最大的尺寸是 200MB。超出那么就會(huì)生成一個(gè)最新的數(shù)據(jù)塊。這個(gè)和 Hbase Region 的分裂是一樣的。
整個(gè)分拆的過(guò)程大致如下:
對(duì)于 MongoDB
首先在 CL:Client 這一層面來(lái)說(shuō),底層是否需要分片?是否需要這樣的一個(gè)復(fù)制集對(duì)與使用者來(lái)說(shuō)完全不必要知道。Mongos:好比就是一個(gè)大管家,要怎么去分拆 Collections?,你 Client 完全不必要知道,只需要你告訴我一個(gè)東西:分區(qū)的 Key 是什么?在很多的組件之中,包括在 hadoop,Storm,等個(gè)各種數(shù)據(jù)庫(kù)之中都會(huì)有這樣的一個(gè) Partition Key 的概念。對(duì)應(yīng)于我們的網(wǎng)絡(luò)之上就會(huì)充當(dāng)了這樣一個(gè)路由的功能。并且將自己所把控的一些集群的信息存放在 Config 服務(wù)器之中。
在其他的數(shù)據(jù)庫(kù)中間也就是如此,對(duì)于 Hbase。依然需要對(duì)于表再進(jìn)行分拆。對(duì)應(yīng)于 Hbase 之中的 Region。和 MongoDB 的分片其實(shí)用一個(gè)比較常用的英文名字就叫做 Segment。
如果你對(duì)于 Hbase 之流不夠了解沒(méi)關(guān)系。你只是需要知道,Region 是表分裂的一個(gè)片段,region 按大小分割的,每個(gè)表一開(kāi)始就只是一個(gè) Region,Region 隨著數(shù)據(jù)的寫(xiě)入會(huì)不斷的擴(kuò)大,以至于達(dá)到了設(shè)計(jì)閾值以后,Region 就開(kāi)始分裂了,由 1 分二。當(dāng) table 中的行越來(lái)越多的時(shí)候,Region 的數(shù)量就越來(lái)越多。
HRegion 是 Hbase 之中分布式存儲(chǔ)和負(fù)載的最小的單位,在這里給出一個(gè)比照的圖:如下:
而在 kafka 之中之中的 Replication,其實(shí)更加相當(dāng)于 Hadoop 體系之中的【副本機(jī)制】,和分片所需要解決的矛盾不同。
簡(jiǎn)單的額來(lái)說(shuō),分布式系統(tǒng)有自己獨(dú)特的屬性與性質(zhì),對(duì)于其存存儲(chǔ)體系有著固定的訴求。
到此,關(guān)于“MongoDB 高可用分為哪些方式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!