MongoDB分片集羣配置實例

環境:mongodb

windows操做系統shell

mongodb 3.4社區版數據庫

目標:windows

配置包含兩個分片一個配置服務器的分片集羣。其中每個分片和一個配置服務器都被配置爲一個單獨的副本集。以下圖所示:服務器

注:每個分片都應該被配置在一個單獨的服務器設備上。方便起見,本文在同一臺機器經過不一樣端口模擬不一樣服務器上的組件,實現分片集羣的配置。(生產環境的配置與此相同,只需使用本身的主機名、端口、路徑等便可)。架構

下圖爲本文配置的分片集羣架構,其中的任意節點(副本集節點和分片節點)都是可擴展的。spa

一、分別爲config server、shard-一、shard-2建立數據目錄操作系統

每個分片成員配置爲一個副本集,所以每一個組件下都包含本身的複製集數據目錄。.net

config server、shard-一、shard-2的複製集分別爲rs1 、rs二、 rs3 。3d

每一個複製集各包含三個節點 rsx-0(主節點)、rsx-一、rsx-2 。

其中config server 複製集數據目錄以下:shard-一、shard-2分片的複製集目錄與此相似、以此類推。

 

每一個成員的端口分配及啓動配置以下:

 

二、建立config server 複製集

mongod --configsvr --replSet <setname> --dbpath <path>
--configsvr 聲明該實例是分片集羣的配置服務數據庫
--replSet 指定複製集名稱
--dbpath 指定數據存放目錄

分別使用如下命令,啓動並初始化config server副本集的三個成員:

mongod --configsvr --port 27020 --dbpath E:\devInstall\MongoDB\shard\consrv\rs1-0 --replSet rs1 --smallfiles --oplogSize 128

mongod --configsvr --port 27021 --dbpath E:\devInstall\MongoDB\shard\consrv\rs1-1 --replSet rs1 --smallfiles --oplogSize 128

mongod --configsvr --port 27022 --dbpath E:\devInstall\MongoDB\shard\consrv\rs1-2 --replSet rs1 --smallfiles --oplogSize 128

初始化成功以後,使用mongo shell 鏈接到3個配置服務器之一:

mongo --host <hostname> --port <port>

鏈接成功以後,設置複製集及其節點:

rs.initiate(
  {
    _id: "<replSetName>",
    configsvr: true,
    members: [
      { _id : 0, host : "127.0.0.1:27020" },
      { _id : 1, host : "127.0.0.1:27021" },
      { _id : 2, host : "127.0.0.1:27022" }
    ]
  }
)

複製集設置成功以後,使用rs.conf()便可查看相關狀態:

 

二、建立shard 複製集(以shard-1爲例)

mongod --shardsvr --replSet <replSetname>
--shardsvr 聲明此實例爲集羣的分片數據庫實例
--replSet 指定複製集名稱

分別使用如下命令,啓動並初始化shard-1複製集的三個成員:

shard-1:

mongod --shardsvr --port 27023 --dbpath E:\devInstall\MongoDB\shard\shard-1\rs2-0 --replSet rs2 --smallfiles --oplogSize 128

mongod --shardsvr --port 27024 --dbpath E:\devInstall\MongoDB\shard\shard-1\rs2-1 --replSet rs2 --smallfiles --oplogSize 128

mongod --shardsvr --port 27025 --dbpath E:\devInstall\MongoDB\shard\shard-1\rs2-2 --replSet rs2 --smallfiles --oplogSize 128

初始化成功以後,,使用mongo shell 鏈接到3個分片服務器之一:

mongo --host <hostname> --port <port>

鏈接成功以後,設置複製集及其節點:

rs.initiate(
  {
    _id : <replicaSetName>,
    members: [
      { _id : 0, host : "127.0.0.1:27023" },
      { _id : 1, host : "127.0.0.1:27024"},
      { _id : 2, host : "127.0.0.1:27025" }
    ]
  }
)

設置成功後,使用rs.status()查看複製集及各個節點狀態:

shard-2複製集配置同上。


三、mongos配置
啓動鏈接到當前分片集羣的mongos(路由)。須要使用 --configdb 選項來指定config server複製集。
格式:<configReplSetName>/cfg1.example.net:27017,cfg2.example.net:27017,...
在此,咱們使用config server 複製集的第一個節點在27030端口上啓動mongos路由服務:
mongos --configdb "rs1/127.0.0.1:27020" --port 27030

使用mongo shell鏈接到mongos實例:
使用db.isMster()判斷是否到mongos實例,若是存在 "msg":"isdbgrid",代表成功鏈接。


四、將分片添加到集羣中
依然在鏈接到mongos的mongo shell窗口。
使用sh.addShard("<replSetName>/s1-mongo1.example.net:27017")方法添加shard-1和shard-2兩個分片到集羣中。

          


五、使用哈希分片對collection進行分區
   開啓數據庫分片功能:
        sh.enableSharding("<database>")

指定數據庫表中的字段key爲分片鍵,並對其使用哈希分片策略。
         sh.shardCollection("<database>.<collection>", { <key> : "hashed" } )  

到此即結束了分片集羣的設置。

例:開啓shard數據的分片功能。指定student表的stuNum爲哈希索引分片鍵。向student表插入7條數據記錄。以下:

              

    經過mongo 進入1分片shard-1,發現student表中包含5條數據。

             

    經過mongo 進入2分片shard-2,發現student表中包含2條數據。

             

此分片集羣中的student表中有7條數據。有5條在shard-1服務器上,2條在shard-2服務器上。(mongodb 經過計算stuNum字段的哈希值決定將其存儲在哪個分片上)使用mongos的用戶不關心數據存儲在哪裏,用戶只知道這個集羣的數據庫中有7條student數據記錄。
相關文章
相關標籤/搜索