(一)首先搭建一個最基礎的mongodb數據庫過程如下
- 解壓壓縮包
tar -zxvf mongodb-linux-x86_64-3.2.10.tgz
2.然後講壓縮包移動到/usr/local/目錄下同時改名字爲mongodb
sudo mv mongodb-linux-x86_64-3.2.10 /usr/local/mongodb
3.此時就算是安裝好了
4.然後可以開始搭建複製集+sharding的集羣了。
(二) 開始搭建複製集+sharding集羣
1.首先可以將這個虛擬機克隆出來兩個,作爲另外兩個節點。
2.然後分別關閉三個虛擬機的防火牆
由於mongodb分佈式複製集初始化時需要各個節點之間的通話,所以需要將各個節點上的防火牆進行關閉。
注意: centos6和centos7關閉防火牆是不一樣的
下面是centos6關閉防火牆的方法:
查看防火牆的狀態:service iptable status
方法一:service iptables stop (即時生效,臨時關閉防火牆,重系統後防火牆會自動開啓)
方法二:chkconfig iptables off (重啓後生效,永久關閉防火牆)
下面是centos7關閉防火牆的方法:
查看狀態:firewall-cmd --state
關閉防火牆:systemctl stop firewalld.service
禁止開機自動啓動:systemctl disable firewalld.service
3.然後分別在三個虛擬機的mongodb目錄創建shardA、shardB和shardC三個目錄。
4.接着分別在三個虛擬機的mongodb->shardA(B、C)目錄下創建data目錄,接着再創建config、shard1_1和shard2_1,shardB下的data下目錄爲config、shard1_2和shard2_2,shardC下的data下目錄爲config、shard1_3和shard2_3。如下圖
5.接着配置複製集首先配置shard1所用到的複製集
在ServerA上啓動shard1所用到的服務節點1,代碼如下:
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/mongodb/shardA/data/shard1_1 --logpath /usr/local/mongodb/shardA/data/shard1_1/shard1_1.log --logappend --fork
在ServerB shard1所用到的服務節點2,代碼如下:
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/mongodb/shardB/data/shard1_2 --logpath /usr/local/mongodb/shardB/data/shard1_2/shard1_2.log --logappend --fork
在ServerC shard1所用到的服務節點3,代碼如下:
./mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/mongodb/shardC/data/shard1_3 --logpath /usr/local/mongodb/shardC/data/shard1_3/shard1_3.log --logappend --fork
6.用mongo連接其中一臺機器的27017端口的mongod,初始化複製集shard1,代碼如下:
./mongo --port 27017
config={_id:'shard1',members:[{_id:0,host:'192.168.235.100:27017'},{_id:1,host:'192.168.235.101:27017'},{_id:2,host:'192.168.235.102:27017'}]}
rs.initiate(config)
在mongodb shell中通過rs.initiate命令初始化複製集shard1,結果顯示已經成功的初始化複製集shard1.
7.配置shard2所用到的複製集
在 ServerA shard2所用到的服務節點1,代碼如下:
./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /usr/local/mongodb/shardA/data/shard2_1 --logpath /usr/local/mongodb/shardA/data/shard2_1/shard2_1.log --logappend --fork
在ServerB shard2所用到的服務節點2,代碼如下:
./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /usr/local/mongodb/shardB/data/shard2_2 --logpath /usr/local/mongodb/shardB/data/shard2_2/shard2_2.log --logappend --fork
在ServerC shard2所用到的服務節點3,代碼如下:
./mongod --shardsvr --replSet shard2 --port 27018 --dbpath /usr/local/mongodb/shardC/data/shard2_3 --logpath /usr/local/mongodb/shardC/data/shard2_3/shard2_3.log --logappend --fork
8.用mongo連接其中一臺機器的27018端口的mongod,初始化複製集shard2,代碼如下:
./mongo --port 27018
config={_id:'shard2',members:[{_id:0,host:'192.168.235.100:27018'},{_id:1,host:'192.168.235.101:27018'},{_id:2,host:'192.168.235.102:27018'}]}
rs.initiate(config)
在mongodb shell中通過rs.initiate命令初始化複製集shard2,結果顯示已經成功的初始化複製集shard2.
9.配置多臺Config Server
在ServerA上啓動configServer服務,代碼如下:
./mongod --configsvr --dbpath /usr/local/mongodb/shardA/data/config --port 20000 --logpath /usr/local/mongodb/shardA/data/config/config.log --logappend --fork
在 ServerB Config Server服務,代碼如下:
./mongod --configsvr --dbpath /usr/local/mongodb/shardB/data/config --port 20000 --logpath /usr/local/mongodb/shardB/data/config/config.log --logappend --fork
在 ServerC Config Server服務,代碼如下
./mongod --configsvr --dbpath /usr/local/mongodb/shardC/data/config --port 20000 --logpath /usr/local/mongodb/shardC/data/config/config.log --logappend --fork
10.配置多臺mongos
在serverA 上啓動mongos 服務代碼如下:
./mongos --configdb 192.168.235.100:20000,192.168.235.101:20000,192.168.235.102:20000 --port 30000 --chunkSize 1 --logpath /usr/local/mongodb/shardA/data/config/mongos.log --logappend --fork
在serverB 上啓動mongos 服務代碼如下:
./mongos --configdb 192.168.235.100:20000,192.168.235.101:20000,192.168.235.102:20000 --port 30000 --chunkSize 1 --logpath /usr/local/mongodb/shardB/data/config/mongos.log --logappend --fork
在serverC 上啓動mongos 服務代碼如下:
./mongos --configdb 192.168.235.100:20000,192.168.235.101:20000,192.168.235.102:20000 --port 30000 --chunkSize 1 --logpath /usr/local/mongodb/shardC/data/config/mongos.log --logappend --fork
11.配置Shard Cluster
連接到其中一臺機器的端口30000的mongos進程,並切換到admin數據進行配置代碼如下:
/mongo --port 30000
use admin
db.runCommand({addshard:"shard1/192.168.235.100:27017,192.168.235.101:27017,192.168.235.102:27017"})
db.runCommand({addshard:"shard2/192.168.235.100:27018,192.168.235.101:27018,192.168.235.102:27018"})
Shard Cluster配置完成後,即可激活數據庫及集合的分片功能,代碼如下:
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.users",key:{_id:1}})
12.驗證Sharding正常工作
連接到其中一個機器的端口爲30000的mongos進程,切換到test數據庫,一邊測試添加數據,代碼如下
./mongo --port 30000
for(var i=1;i<=100000;i++) db.users.insert({id:i,addr_1:"shenzhen",addr_2:"shanghai"});
db.users.stats();
13.導入數據
首先切換數據庫
use zmongodb
可以插入一條數據,保證創建數據庫
db.t1.insert({“name”:“test”});
然後導入數據
./mongoimport --host 127.0.0.1 --port 30000 --db zmongodb --collection ztable --type csv --headerline --ignoreBlanks --file /home/z/raw_user.csv
–db zmongodb:需要將數據導入到哪個數據庫,這是用zmongodb數據庫;
–collection ztable:將數據導入的 collection 名,這裏用ztable,如果這個ztable表之前是不存在的,則會自動創建一個。如果省略–collection networkmanagement這個參數,那麼會自動新建一個以 CSV 文件名爲名的 collection。
–type csv:文件類型,這裏是 csv;
–headerline:這個參數很重要,加上這個參數後創建完成後的內容會以 CSV 第一行的內容爲字段名;
–ignoreBlanks:這個參數可以忽略掉 CSV 文件中的空缺值;
–file /home/z/raw_user.csv:這裏就是 csv 文件的路徑了。
14.啓動數據庫的分片功能
sh.enableSharding(“zyymongodb”)
- 啓動分片然後開始分片
首先切換到admin數據庫下,
use admin
然後運行
db.runCommand({shardcollection:”zyymongodb.zyytable”,key:{_id:1}})
- 然後驗證分片是否成功
use zmongodb db.ztable.stats()
如下圖分片已經成功