MongoDB 分區的原理、搭建、應用

來源:互聯網
上載者:User

一、概念:

      分區(sharding)是指將資料庫拆分,將其分散在不同的機器上的過程。將資料分散到不同的機器上,不需要功能強大的伺服器就可以儲存更多的資料和處理更大的負載。基本思想就是將集合切成小塊,這些塊分散到若干片裡,每個片只負責總資料的一部分,最後通過一個均衡器來對各個分區進行均衡(資料移轉)。通過一個名為mongos的路由進程進行操作,mongos知道資料和片的對應關係(通過設定管理員)。大部分使用情境都是解決磁碟空間的問題,對於寫入有可能會變差(+++裡面的說明+++),查詢則盡量避免跨分區查詢。使用分區的時機:

1,機器的磁碟不夠用了。使用分區解決磁碟空間的問題。2,單個mongod已經不能滿足寫資料的效能要求。通過分區讓寫壓力分散到各個分區上面,使用分區伺服器自身的資源。3,想把大量資料放到記憶體裡提高效能。和上面一樣,通過分區使用分區伺服器自身的資源。

二、部署安裝: 前提是安裝了mongodb(本文用3.0測試)

在搭建分區之前,先瞭解下分區中各個角色的作用。

① 設定管理員。是一個獨立的mongod進程,儲存叢集和分區的中繼資料,即各分區包含了哪些資料的資訊。最先開始建立,啟用日誌功能。像啟動普通的mongod一樣啟動設定管理員,指定configsvr選項。不需要太多的空間和資源,設定管理員的1KB空間相當於真是資料的200MB。儲存的只是資料的分布表。當服務不可用,則變成唯讀,無法分塊、遷移資料。② 路由伺服器。即mongos,起到一個路由的功能,供程式串連。本身不儲存資料,在啟動時從設定管理員載入叢集資訊,開啟mongos進程需要知道設定管理員的地址,指定configdb選項。③ 分區伺服器。是一個獨立普通的mongod進程,儲存資料資訊。可以是一個複本集也可以是單獨的一台伺服器。

部署環境:3台機子

A:配置(3)、路由1、分區1;

B:分區2,路由2;

C:分區3

      在部署之前先明白片鍵的意義,一個好的片鍵對分區至關重要。片鍵必須是一個索引,資料根據這個片鍵進行拆分分散。通過sh.shardCollection加會自動建立索引。一個自增的片鍵對寫入和資料均勻分布就不是很好,因為自增的片鍵總會在一個分區上寫入,後續達到某個閥值可能會寫到別的分區。但是按照片鍵查詢會非常高效。隨機片鍵對資料的均勻分布效果很好。注意盡量避免在多個分區上進行查詢。在所有分區上查詢,mongos會對結果進行歸併排序。

啟動上面這些服務,因為在後台運行,所以用設定檔啟動,設定檔說明。

1)設定管理員的啟動。(A上開啟3個,Port:20000、21000、22000) 

設定管理員是一個普通的mongod進程,所以只需要新開一個執行個體即可。設定管理員必須開啟1個或則3個,開啟2個則會報錯:

BadValue need either 1 or 3 configdbs

因為要放到後台用用設定檔啟動,需要修改設定檔:

/etc/mongod_20000.conf

#資料目錄dbpath=/usr/local/config/#記錄檔logpath=/var/log/mongodb/mongodb_config.log#日誌追加logappend=true#連接埠port = 20000#最大串連數maxConns = 50pidfilepath = /var/run/mongo_20000.pid#日誌,redo logjournal = true#刷寫提交機制journalCommitInterval = 200#守護進程模式fork = true#刷寫資料到日誌的頻率syncdelay = 60#storageEngine = wiredTiger#動作記錄,單位MoplogSize = 1000#命名空間的檔案大小,預設16M,最大2G。nssize = 16noauth = trueunixSocketPrefix = /tmpconfigsvr = true

/etc/mongod_21000.conf

資料目錄dbpath=/usr/local/config1/#記錄檔logpath=/var/log/mongodb/mongodb_config1.log#日誌追加logappend=true#連接埠port = 21000#最大串連數maxConns = 50pidfilepath = /var/run/mongo_21000.pid#日誌,redo logjournal = true#刷寫提交機制journalCommitInterval = 200#守護進程模式fork = true#刷寫資料到日誌的頻率syncdelay = 60#storageEngine = wiredTiger#動作記錄,單位MoplogSize = 1000#命名空間的檔案大小,預設16M,最大2G。nssize = 16noauth = trueunixSocketPrefix = /tmpconfigsvr = true

開啟設定管理員:

root@mongo1:~# mongod -f /etc/mongod_20000.conf about to fork child process, waiting until server is ready for connections.forked process: 8545child process started successfully, parent exitingroot@mongo1:~# mongod -f /etc/mongod_21000.conf about to fork child process, waiting until server is ready for connections.forked process: 8595child process started successfully, parent exiting

同理再起一個22000連接埠的設定管理員。   View Code

2)路由伺服器的啟動。(A、B上各開啟1個,Port:30000)

路由伺服器不儲存資料,把日誌記錄一下即可。

# mongos#記錄檔logpath=/var/log/mongodb/mongodb_route.log#日誌追加logappend=true#連接埠port = 30000#最大串連數maxConns = 100#綁定地址#bind_ip=192.168.200.*,...,pidfilepath = /var/run/mongo_30000.pidconfigdb=192.168.200.A:20000,192.168.200.A:21000,192.168.200.A:22000  #必須是1個或則3個配置 。
#configdb=127.0.0.1:20000  #報錯
#守護進程模式 fork = true

其中最重要的參數是configdb,不能在其後面帶的設定管理員的地址寫成localhost或則127.0.0.1,需要設定成其他分區也能訪問的地址,即192.168.200.A:20000/21000/22000。否則在addshard的時候會報錯:

{"ok" : 0,"errmsg" : "can't use localhost as a shard since all shards need to communicate. either use all shards and configdbs in localhost or all in actual IPs  host: 172.16.5.104:20000 isLocalHost:0"}

開啟mongos:

root@mongo1:~# mongos -f /etc/mongod_30000.conf 2015-07-10T14:42:58.741+0800 W SHARDING running with 1 config server should be done only for testing purposes and is not recommended for productionabout to fork child process, waiting until server is ready for connections.forked process: 8965child process started successfully, parent exiting
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.