mongodb分片

mongodb分片共有四個組件:mongos、config server、shard、replica set

mongos,數據庫集羣請求的入口,所有的請求都通過mongos進行協調,不需要在應用程序添加一個路由選擇器,mongos自己就是一個請求分發中心,它負責把對應的數據請求請求轉發到對應的shard服務器上。在生產環境通常有多mongos作爲請求的入口,防止其中一個掛掉所有的mongodb請求都沒有辦法操作。

 

config server,顧名思義爲配置服務器,存儲所有數據庫元信息(路由、分片)的配置。mongos本身沒有物理存儲分片服務器和數據路由信息,只是緩存在內存裏,配置服務器則實際存儲這些數據。mongos第一次啓動或者關掉重啓就會從 config server 加載配置信息,以後如果配置服務器信息變化會通知到所有的 mongos 更新自己的狀態,這樣 mongos 就能繼續準確路由。在生產環境通常有多個 config server 配置服務器,因爲它存儲了分片路由的元數據,這個可不能丟失!就算掛掉其中一臺,只要還有存貨, mongodb集羣就不會掛掉。

 

shard,這就是傳說中的片了,用來將數據讀寫壓力分散到不同的機器上,片越多,數據則越分散,數據吞吐量也會越高,需要的機器資源也會更多。通常情況下,需要將每個片做成副本集,以防止其中某個片出問題後則這個片上的數據不可用。

replica set(副本集),如果沒有 replica set 是個不完整架構,假設其中的一個分片掛掉那四分之一的數據就丟失了,所以在高可用性的分片架構還需要對於每一個分片構建 replica set 副本集保證分片的可靠性。官方推薦的是一個replica set由3個副本組成,如果機器不夠用,可以 2個副本 + 1個仲裁。


首先下載安裝程序 官方下載地址

  1. 搭建configserver 
    由於configserver的重要性,強烈推薦由至少3臺機器組成configserver副本集

    1. 解壓並創建配置文件,並複製到3臺機器上

    2. 配置文件中增加

      配置文件

      sharding:
      clusterRole: configsvr

    3. 啓動所有實例,並登錄其中一臺機器,運行mongo程序(如果需要打開登錄認證功能,參見:爲MongoDB添加身份驗證

    4. 執行初始化副本集腳本

      示例

      rs.initiate({
      _id: "candao_qc_config",
      configsvr: true,
      members: [
      { _id : 0, host : "10.200.102.36:27117" ,"priority":100 },
      { _id : 1, host : "10.200.102.41:27117","priority":1 },
      { _id : 2, host : "10.200.102.45:27117","priority":1 }
      ]
      })

    5. 等待初始化完成,此時configserver副本集就搭建完成了

  2. 搭建shard server
    每個shard負責存儲集羣的一部分數據,如果數據損壞,則會導致這部分數據丟失,重要性不言而喻,同樣強烈推薦由至少3臺機器組成副本集
    搭建副本集不在贅述,參見:副本集的搭建,與副本集不同的是,需要在每臺機器的配置文件中添加如下配置:

    配置示例

    sharding:
    clusterRole: shardsvr

    想要分多少個片,就按述方法配置多少個副本集

  3. 配置mongos程序

    1. 創建mongos.conf

      配置示例

      net:
      port: 27017
      ##日誌文件
      systemLog:
      destination: file
      path: "mongod.log"
      logAppend: true
      processManagement:
      ##以後臺進程運行
      fork: true
      sharding:
      configDB: candao_qc_config/10.200.102.36:27117,10.200.102.45:27117,10.200.102.41:27117

    2. 啓動mongos進程./mongos -f mongos.conf (通常可以啓動多個,可以將mongos進程部署在部署項目的機器上)

  4. 在mongos上將配置好的分片副本集加入分片集羣 (直接在bin下:./mongo)

    配置示例

    sh.addShard( "candao_qc_shard1/10.200.102.31:27027");
    sh.addShard( "candao_qc_shard2/10.200.102.31:27028");
    sh.addShard( "candao_qc_shard3/10.200.102.31:27029");

  5. 將要分片的數據庫開啓分片 sh.enableSharding("datacenter_qc")

  6. 將表進行分片 sh.shardCollection("datacenter_qc.order", { "createTime":1, "brandId":1 } )

    至此,分片搭建完成,如果剛纔分片的集合中有數據,此時需要等待後臺進程將數據按照片鍵均勻地遷移到其他機器上

 

  1.  在工具或者程序中,需要用可讀可寫賬號進行訪問mongo的數據,這個時候,需要在configserver中進行創建原來的集羣中的可讀、可寫的賬號。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章