Linux中mongodb複製集+sharding

(一)首先搭建一個最基礎的mongodb數據庫過程如下

  1. 解壓壓縮包
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”)
  1. 啓動分片然後開始分片
    首先切換到admin數據庫下,
use admin

然後運行

db.runCommand({shardcollection:”zyymongodb.zyytable”,key:{_id:1}})
  1. 然後驗證分片是否成功
use zmongodb db.ztable.stats()

如下圖分片已經成功

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章