創建虛擬機,如果是使用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.
就是機器的防火牆沒有關閉。