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":"分片服務器地址和端口"})