mongodb sharding集群搭建


創建虛擬機,如果是使用copy的方式安裝系統,記得修改機器名,否則所有的機器名稱都一樣,會造成安裝失敗

同時關閉掉防火牆,將所有的機器的時間調成一致,master和slave的heartbeat間隔不能超過三秒,否則造成啟動mongos失敗,這個可以查看mongos日志

使用MongoDB 3.02或者后續版本的安裝包在D:\mongodb下安裝. 如果你是自己通過源代碼編譯獲得的MongoDB的相關程序, 你需要建立D:\mongodb\bin,並把mongod.exe, mongo.exe, mongos.exe拷貝到它下面(PS:為了支持NG全文索引搜索,需要使用編譯的v3.0.6版本二進制文件替換mongod.exe,mongo.exe,mongos.exe).

集群監控工具https://cloud.mongodb.com  試用期有30天(個人覺得這個監控工具還是比較好用的)

安裝步驟看起來很多,其實很簡單,就是步驟多了點,多點耐心就好

 1.1.1        准備工作

 

我們將分別在上述三台機器上分別創建相應目錄

將mongodb.zip解壓到D:\mongodb下

創建D:\mongodb\cluster\shard1 目錄,在其下創建data, log子目錄;

創建完成后的目錄清單:

D:\mongodb\cluster\shard1\data

D:\mongodb\cluster\shard1\log

D:\mongodb\bin

 

 

      在192.168.33.92, 192.168.33.93 和192.168.33.94上, 在D:\mongodb\cluster\shard1下創建config.conf文本文件,在文件中放入以下內容,注意縮進只能用空格而不能用tab:

systemLog:

   destination: file

   path: d:\mongodb\cluster\shard1\log\shard1.log

   logAppend: true

   logRotate: rename

storage:

   dbPath: d:\mongodb\cluster\shard1\data

   journal:

      enabled: true

   directoryPerDB: true

   engine: mmapv1

replication:

   oplogSizeMB: 10000

   replSetName: shard1

sharding:

   clusterRole: shardsvr

net:

   port: 22001

 

到此,准備工作完成.

 

1.1.2        配置replica

        在三台機器上通過command line分別啟動三個成員實例.

在解壓后的D:\mongodb文件夾按住shift然后右鍵 然后點open command window here 打開dos窗口

d:\mongodb\bin\mongod --config d:\mongodb\cluster\shard1\config.conf

 

1.1.3       初始化replica set並添加replica set成員, :

使用mongo shell(mongo.exe)或者其他工具登錄到192.168.33.92:22001.

D:\Dev\software\mongo-master\bin>mongo 192.168.33.92:22001   //此命令必須在非arbiter 機器上執行

2015-04-29T11:37:58.375-

MongoDB shell version: 3.1.2-pre-

connecting to: 192.168.33.92:22001/test

 

> use admin

 

> cfg = { _id:"shard1", members:[

                     {_id:0,host:"192.168.33.92:22001",priority:1000},

                     {_id:1,host:"192.168.33.93:22001",priority:999},

                      {_id:2,host:"192.168.33.94:22001",priority : 800, arbiterOnly: true} 

                ]

         }

 > rs.initiate(cfg);   //此命令必須在非arbiter 機器上執行

 

2        配置config server:

        Config  Server是一個特殊的mongod實例, 也是一個數據庫, 用來保存cluster的分片信息元數據.  Config Server與 cluster中其他的作為數據庫服務器的mongod實例沒有直接聯系, 它里面存儲的都是chunk存儲和遷移的信息.

 

 我們將分別在上述三台機器上分別創建相應目錄

在192.168.33.92, 192.168.33.93, 192.168.33.94進行如下操作

創建D:\mongodb\cluster\configsvr\ 目錄,在其下創建data, log子目錄;

創建完成后的目錄清單:

D:\mongodb\cluster\configsvr\data

D:\mongodb\cluster\configsvr\log

確認mongod.exe在D:\mongodb\bin目錄下, 如果你是采用的安裝包安裝到D:\mongodb目錄, mongod.exe應該已經在D:\mongodb\bin了

2.1        編輯配置文件:

 

在192.168.33.92, 192.168.33.93 , 192.168.33.94上, 在D:\mongodb\cluster\ configsvr下創建config.conf文本文件,在文件中放入以下內容,注意縮進只能用空格而不能用tab:

 

3.0版本:

systemLog:

   destination: file

   path: d:\mongodb\cluster\configsvr\log\configsvr.log

   logAppend: true

   logRotate: rename

storage:

   dbPath: d:\mongodb\cluster\configsvr\data

   journal:

      enabled: true

   directoryPerDB: true

   engine: mmapv1

sharding:

   clusterRole: configsvr

net:

   port: 21110

 

2.2       啟動三個config server

 

在三台機器上通過command line使用如下命令分別啟動三個成員的mongo config server實例:

d:\mongodb\bin\mongod --config d:\mongodb\cluster\ configsvr\config.conf

 

 

2.3        配置mongos

 

Mongos實例是應用程序訪問cluster的入口.  Mongos也可以配置多個來增加系統容錯. 如果使用多個mongos, 所有mongos的config server配置項必須完全相同.

本文檔中,我們將使用三個mongos實例, 分別置於192.168.33.92:21100, 192.168.33.93:21100 和192.168.33.94:21100

 

2.4       創建目錄

 

我們將分別在上述三台機器上分別創建相應目錄

在192.168.33.92, 192.168.33.93 , 192.168.33.94進行如下操作

創建D:\mongodb\cluster\mongos\ 目錄,在其下創建 log子目錄;

創建完成后的目錄清單:

D:\mongodb\cluster\ mongos \log

確認mongos.exe在D:\mongodb\bin目錄下,如果你是采用的安裝包安裝到D:\mongodb目錄, mongos應該已經在D:\mongodb\bin了

 

2.5       編輯配置文件:

 

在192.168.33.92, 192.168.33.93 , 192.168.33.94 上, 在D:\mongodb\cluster\ mongos下創建config.conf文本文件,在文件中放入以下內容,注意縮進只能用空格而不能用tab:

對於版本3.0:

#YAML format

systemLog:

    destination: file

    path: D:\mongodb\cluster\mongos\log\mongos.log

    logAppend: true

    logRotate: rename

sharding:

    configDB: 192.168.33.92:21110,192.168.33.93:21110,192.168.33.94:21110

net:

port: 21100

 

2.6       啟動三個mongos

 

在三台機器上通過command line使用如下命令分別啟動mongos實例.

在192.168.33.92, 192.168.33.93 , 192.168.33.94:

d:\mongodb\bin\mongos --config d:\mongodb\cluster\ mongos\config.conf

 

3         添加shard節點到cluster中

現在雖然各個應用 (3個shard1 replica set成員,  3 個config server, 3 個mongos) 都在運行,但是cluster還是空的,沒有一個數據庫server加進來. 也就是說, shard1和 還沒有加進 cluster中.

如果使用mongo shell登錄到任何一個mongos, 運行sh.status()命令,你會看到如下結果:

D:\Dev\software\mongo-master\bin>mongo 192.168.33.92:21100

2015-05-01T10:47:30.337-0400

MongoDB shell version: 3.1.2-pre-

connecting to: 192.168.33.92:21100/test

mongos> show dbs

admin   (empty)

config  (empty)

mongos> sh.status()

--- Sharding Status ---

  sharding version: {

        "_id" : 1,

        "minCompatibleVersion" : 5,

        "currentVersion" : 6,

        "clusterId" : ObjectId("5542e946bfcdf8ecc8ae22da")

}

  shards:

  balancer:

        Currently enabled:  yes

        Currently running:  no

        Failed balancer rounds in last 5 attempts:  0

        Migration Results for the last 24 hours:

                No recent migrations

  databases:

        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

 

mongos>

以上結果中shards為空,表示我們沒有任何shard.下面我們把shard1添加到cluster中來.

添加shard1到cluster中

 

可以使用mongo shell登錄任意一個mongos 完成shard添加操作. 這里我們登錄192.168.33.92:21100.

sh.addShard( "shard1/192.168.33.92:22001" ).  Replica set中的任意一個成員都可以在這里作為種子.

Mongos會自動識別, 搜索並添加所有輸入該replica set中的所有成員

至此, cluster 已經建立完成.

3.2        添加新的shard並加入到cluster中

到現在為止我們的cluster中實際上只有一個節點. 一個replica set對於cluster來說算一個節點.因為任意時刻, 只有replica set中的primary可以接受寫操作. 所以為了發揮cluster

的作用,我們需要添加多個replica set,這樣mongos就可以並行讀寫多個replica set了.

 

參照Replica set deployment文檔建立你想要的新的replica set並把它按照本文檔前面的步驟加入到cluster中來. 在本文檔的測試中, 我們加入了shard2,和shard3兩個replica set. 

如果一個collection已經被分片(執行過shardCollection命令), 添加新的shard的操作會觸發數據的遷移.

在3台機器的部署中,我們把shard1的primary放在192.168.33.92:22001, shard2的primary 放在192.168.33.93:22002, shard3的primary放在192.168.33.94:22003.這樣三台機器可以並行寫入.

 

 

如果mongodb中有以下錯誤log  :access control is not enabled and no --bind_ip has been specified.

就是機器的防火牆沒有關閉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM