1. 程式人生 > >MongoDB的分布式部署

MongoDB的分布式部署

數據庫分片 大數 技術分享 cti 不同的 bpa rtm mon .com

  一、分片的概念

    分片(sharding)是指根據片鍵,將數據進行拆分,使其落在不同的機器上的過程。如此一來,不需要功能,配置等強大的機器,也能儲存大數據量,處理更高的負載。

  二、分片的原理和思想

   MongoDB分片的基本思想就是將集合切分成小塊。這些塊分散到若幹片裏面,每個片只負責總數據的一部分。

    對於客戶端來說,無需知道數據被拆分了,也無需知道服務端哪個分片對應哪些數據。數據在分片之前需要運行一個路由進程,進程名為mongos。這個路由器知道所有數據的存放位置,知道數據和片的對應關系。對客戶端來說,它僅知道連接了一個普通的mongod,在請求數據的過程中,通過路由器上的數據和片的對應關系,路由到目標數據所在的片上,如果請求有了回應,路由器將其收集起來回送給客戶端

   技術分享

  二、分片的簡單實現

   (1)片鍵的概念

       設置分片時,需要從集合裏面選一個鍵,用該鍵的值作為數據拆分的依據。這個鍵稱為片鍵(shard key)。

      {department:"IT",name:"zhangsan"},{department:"HR",name:"lisi"},{department:"SUPPORT",name:"zhaowu"}

      以該數據為例,表示的是職員名字以及所在的部門,假若我們設置部門(department)為片鍵,那麽第一片可能存放名稱以字母A-F開頭的部門,第二片存放名稱以G~P開頭的部門,第三片存Q~Z,如此類推。隨著添加或者刪除片,MongoDB會重新平衡數據,使每片的流量都比較均衡,數據量也在合理範圍內。

    (2)本地模擬實現

       a、首先mongod開啟服務端3個節點,端口分別為8080,8081,8082

       b、開啟config服務器 。mongos要把mongod之間的配置放到config服務器裏面,所以首先開啟它,這裏就使用8083端口。 命令為:

        mongod --dbpath E:\sharding\config_node --port 8083

       c、開啟mongos服務器 。端口8084,同時指定下config服務器。命令為:

        mongos --port 8084 --configdb=127.0.0.1:8083

     d、 路由指定服務端節點。客戶端直接跟mongos打交道,也就說明我們要連接mongos服務器,然後將8080,8081,8082的mongod交給mongos,添加分片也就是addshard()。需要進到路由節點的admin數據庫進行配置。allowLocal表示該服務端節點,可被客戶端直接連接而無需經過路由。

        db.runCommand({"addshard":"127.0.0.1:8080",allowLocal:true})

        db.runCommand({"addshard":"127.0.0.1:8081",allowLocal:true})

        db.runCommand({"addshard":"127.0.0.1:8082",allowLocal:true})

      e、 開啟數據庫分片功能,命令為enablesharding(),並指定數據庫名稱,如下指定每個mongod都有的test數據庫

        db.runCommand({"enablesharding":"test"})

       f、 指定集合中分片的片鍵,這裏就指定為company.department鍵.

        db.runCommand({"shardcollection":"company.department","key":{"depatment":1}})

       g、 通過向mongos節點插入100萬條數據,查看各節點保存的數據。

       h、 通過向mongos插入一條數據,查看數據被分配到哪個片

MongoDB的分布式部署