MongoDB之分片

随声附和 提交于 2020-01-17 23:57:16

分片集群

分片概念

  • mongodb使用分片來支持具有非常大的數據集合高存儲量湊在哦的部署
  • 分片是將數據拆分,分散到不同機器的過程,也能叫做分區
  • mongodb支持通過分片進行水平擴展

組件說明

  • 分片(存儲):每個分片包含分片數據的自己,每個分片都可以部署副本集
  • mongos(路由):mongos充當查詢路由器,在客戶端引用程序和分片集群之間提供接口
  • config servers(調度的配置):配置服務器存儲集群的元數據和配置設置在这里插入图片描述

配置shard

  • 創建三個數據節點,不同的是裡面的配置文件port和sharding,
  • 不知道的參考安裝 linux安裝
# 配置文件加這個
  sharding:
     #分片角色
      clusterRole: shardvr

配置副本集

  • 配置副本集的時候,注意config service不需要仲裁節點
  • 不知道的參考副本搭建副本搭建
  • 將三個分片都搭上副本就行

配置路由節點

  • 創建存放日誌的目錄
    #日志存储目录
    mkdir -p /mongodb/sharded_cluster/mymongos_27017/log
  • 修改配置文件
  vi /mongodb/sharded_cluster/mymongos_27017/mongos.conf
  • 寫入配置(在其他的配置文件的基礎上,修改port,並加上以下)
      sharding:
        # 指定配置節點副本集
        configDB: 副本1ip:副本1端口,副本2ip:副本2端口,副本3ip:副本3端口
    
  • 啟動mongos
/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/mymongos_27017/mongod.conf
  • 使用命令添加分片
  sh.addShard("ip":"port")
  • 如果添加失敗,先移除分片,檢查分片信息的正確後,在次添加分片
  #移除分片
  use admin 
  db.runCommand({removeShard:"replSetName"})
  • 開啟分片功能
  sh.enableSharding("庫名")
  或
  sh.shardCollection("庫名.集合名",{"key":1})
  • 集合分片,必須使用sh.shardCollection()方法指定集合和分片鍵
    • namespace:要分片的目標集合的命名空間
    • key:用作分片鍵的索引規範文檔
    • unique:為true的時候,片段字段上回閒置為確保是唯一索引,哈希策略不支持唯一索引,默認false
  sh.shardcollenction(namespace,key.unique)

分片規則

  • 哈希策略:計算一個字段的哈希值,並用這個哈希值來創建數據塊
   sh.shardcollenction("db.collection",{"key":"hashed"})
  • 範圍策略:基於範圍的分片,按照數值來分片
       #用age分片
       sh.shardcollenction("db.collection",{"age":1})
    

沒有分片的原因

  • 系統繁忙,在分片中
  • 數據塊沒有填滿,默認的數據塊尺寸是64M,填滿之後才會想其它片的數據塊填充數據
#改小,改成1
  use config
  db.setting.save(_id:"chunksize",value:1)

springboot配置

  • 在配置文件裡面只需要配置路由節點即可
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!