Mongodb分片搭建
可以參考:
http://blog.csdn.net/chris_111x/article/details/52440003

拓撲圖:
注意:下面的伺服器啟動要有順序,不然啟動不了
一、安裝config伺服器
tar zxf mongodb-linux-x86_64-rhel70-3.2.8.tgz
mv mongodb-linux-x86_64-rhel70-3.2.8/ mongodb-rh7
mv mongodb-rh7/ /usr/local/
建立目錄
mkdir -p log
mkdir data
Cd data
mkdir configdb
添加環境變量到/etc/profile目錄下
export MONGODB_HOME=/usr/local/mongodb-rh7
export PATH=$MONGODB_HOME/bin:$PATH
建立mongod.conf檔案
chmod +x mongod.conf
systemLog:
destination: file
path: /usr/local/mongodb-rh7/log/mongodb.log
logAppend: true
storage:
dbPath: /usr/local/mongodb-rh7/data/configdb
processManagement:
fork: true
net:
# bindIP: 127.0.0.1
port: 27019
#security:
# authorization: enabled
sharding:
clusterRole: configsvr
建立啟動檔案:
vi /usr/lib/systemd/system/mongodb.service
[Unit]
Description=Mongodb service daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb-rh7/bin/mongod -f /usr/local/mongodb-rh7/bin/mongod.conf
ExecStop=/usr/local/mongodb-rh7/bin/mongod --shutdown -f /usr/local/mongodb-rh7/bin/mongod.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
啟動檢視
二、安裝mongos伺服器
安裝步驟和上面的都一樣
但是不一樣的是
systemLog:
destination: file
path: /usr/local/mongodb-rh7/log/mongos.log
logAppend: true
#storage:
# dbPath: /usr/local/mongodb-rh7/data/
processManagement:
fork: true
net:
# bindIP: 127.0.0.1
port: 2080
#security:
# authorization: enabled
sharding:
configDB: 172.16.2.117:27019
配置啟動檔案
[Unit]
Description=Mongodb service daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb-rh7/bin/mongos -f /usr/local/mongodb-rh7/bin/mongos.conf
ExecStop=/usr/local/mongodb-rh7/bin/mongos --shutdown -f /usr/local/mongodb-rh7/bin/mongos.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
啟動檢視
三、配置shared伺服器
安裝配置也都一樣但是在配置檔案的地方需要修改
systemLog:
destination: file
path: /usr/local/mongodb-rh7/log/mongodb.log
logAppend: true
storage:
dbPath: /usr/local/mongodb-rh7/data
processManagement:
fork: true
#net:
# bindIP: 127.0.0.1
# port: 27017
#security:
# authorization: enabled
配合啟動檔案
[Unit]
Description=Mongodb service daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb-rh7/bin/mongod -f /usr/local/mongodb-rh7/bin/mongod.conf
ExecStop=/usr/local/mongodb-rh7/bin/mongod --shutdown -f /usr/local/mongodb-rh7/bin/mongod.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
啟動檢視一下
注意:另外一台的shared也這一台配置方法一樣
四、mongos中添加分片伺服器
./mongo 172.16.2.134:2080/admin #連接配接mongos伺服器,并且預設選擇admin資料庫
#添加分片伺服器
db.runCommand({addshard:"172.16.0.208:27017"})
db.runCommand({addshard:"172.16.2.177:27017"})
函數結構:db.runCommand({addshard:mongodb伺服器位址:端口号 })
如果添加的是副本分片,函數結構:
db.runCommand({addshard:"副本集名稱/伺服器位址:端口号"})
五、在mongos中添加分片資料庫
開啟資料庫分片功能,指令很簡單 enablesharding(),這裡我就開啟copp資料庫
#db.runCommand({enablesharding:"copp"}) #開啟copp資料庫分片
六、設定片鍵
db.runCommand({shardcollection:"copp.userInfo",key:{"userName":1}})
指定集合中分片的片鍵,這裡我就指定為UserInfo.userName,即userInfo集合中的userName字段。
函數結構:
db.runCommand({shardcollection:"資料庫名稱.集合名稱 ",key:{"字段名稱":1}})
塊(chunk)
在一個shard server内部,MongoDB還是會把資料分為chunks,每個chunk代表這個shard server内部一部分資料,每個chunk的大小預設是64MB。
chunk的産生,會有以下兩個用途:
Splitting(切分)
當一個chunk的大小超過配置中的chunk size時,MongDB的背景程序會把這個chunk切分成更小的chunk,進而避免chunk過大的情況
Balancing(均衡)
在MongoDB中,balancer是一個背景程序,負責chunk的遷移,進而均衡各個shard server的負載
七、通過mongos向mongodb插入資料
八、注意這裡要切換資料庫到coop庫當中
配置完分片後,我們将通過mongos向mongodb插入10萬條記錄
#for(vari=0;i<100000;i++){db.userInfo.insert({"userName":"user"+i,"depart":"towngas","userNo":"no."+i})}
插入資料成功後,會傳回提示資訊:WriteResult({“nInserted”:1})
九、分别在mongodb資料庫的userinfo資料
十、列印資料庫分片資訊
在mongos資料伺服器(172.16.2.134)下,必須進入到admin資料庫下,
輸入db.runCommand({“listShards”:1})檢視所有分片伺服器。
#./mongo 172.16.2.134:2080
#use admin
# db.runCommand({"listShards":1})
有點問題已經開啟了切片功能,但是資料沒有chunks成功
十一、移除切片伺服器:
db.runCommand({"listShards":1})
移除
db.runCommand({"removeshard":"172.16.0.208:27017"})
db.runCommand({"removeshard":"分片伺服器位址和端口"})
轉載于:https://blog.51cto.com/xiaorenwutest/2136497