MongoDB的分佈式部署

  1、分片的概念node

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

  2、分片的原理和思想服務器

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

      對於客戶端來講,無需知道數據被拆分了,也無需知道服務端哪一個分片對應哪些數據。數據在分片以前須要運行一個路由進程,進程名爲mongos。這個路由器知道全部數據的存放位置,知道數據和片的對應關係。對客戶端來講,它僅知道鏈接了一個普通的mongod,在請求數據的過程當中,經過路由器上的數據和片的對應關係,路由到目標數據所在的片上,若是請求有了迴應,路由器將其收集起來回送給客戶端spa

   

  2、分片的簡單實現3d

   (1)片鍵的概念blog

       設置分片時,須要從集合裏面選一個鍵,用該鍵的值做爲數據拆分的依據。這個鍵稱爲片鍵(shard key)。進程

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

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

    (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插入一條數據,查看數據被分配到哪一個片

相關文章
相關標籤/搜索