使用了2臺服務器
副本集:rs0
62:
27100 主
69:
27100 從
27200 仲裁
-----------------------------------------------------------------------
分片:
62:
28000
30000 路由
69:
28000
30000 confServer
----------------------------------------------------------------------
前面的安裝mongodb就不多說了,直接說一下我的文件存放位置
我在mongo目錄下新建了四個文件夾,分別是bin conf data log
==============bin================
其中在bin中存放的是mongodb安裝以後bin目錄下的所有命令,
cp * /home/data/mongodb/bin
環境變量設置:
export PATH=/home/data/mongodb/bin:$PATH
==============conf================
存放的是配置文件,命名爲mongod_端口的形式命名
如下圖
==============data================
數據存放位置
==============log================
日誌存放位置
============================以上是說明=========================================
好,介紹完了以後開始進入正題:
首先配置副本集
----------------副本集開始-------------------------------
#創建文檔路徑
cd /home/data/mongodb/log
#62
mkdir 27100
#69
mkdir 27100 27200
mongod_27100的配置信息
dbpath=/home/data/mongodb/data/27100
logpath=/home/data/mongodb/log/27100/mongodb.log
port=27100
logappend=1
nojournal=true
profile = 1 # 開啓Profiling和設置 日誌級別
slowms = 500 #多久以上纔會記錄
replSet = rs0 #副本集名稱
shardsvr=true
fork=1
#連接27100
mongod -f mongod_27100.conf
mongo --port=27100
#設置副本,初始化
rsconf = {
_id: "rs0",
members: [
{
_id: 0,
host: "192.168.1.62:27100"
}
]
}
rs.initiate(rsconf)
-------------------------------分割線----------
mongod_27100.conf配置信息
dbpath=/home/data/mongodb/data/27100
logpath=/home/data/mongodb/log/27100/mongodb.log
port=27100
logappend=1
nojournal=true
profile = 1 # 開啓Profiling和設置 日誌級別
slowms = 500 #多久以上纔會記錄
replSet = rs0
fork=1
shardsvr=true
mongod_27200.conf配置信息_仲裁者
dbpath=/home/data/mongodb/data/27200
logpath=/home/data/mongodb/log/27200/mongodb.log
port=27200
logappend=1
nojournal=true
profile = 1 # 開啓Profiling和設置 日誌級別
slowms = 500 #多久以上纔會記錄
replSet = rs0
fork=1
shardsvr=true
ps:shardsvr=true #這裏是分片的時候使用,不設置的情況下雖然能添加到分片上,但是存儲數據的時候不會往這個副本集上存.
#啓動69上的27100,27200
mongod -f mongod_27100.conf
mongod -f mongod_27200.conf
#在62上進行操作,添加副本集和仲裁者
rs.add("192.168.1.69:27100") #副本集
rs.addArb("192.168.1.69:27100") #仲裁者
#副本集中打開查詢_69上操作
db.getMongo().setSlaveOk(); #db.setSlaveOk(true)
#查看狀態
rs.status()
#判斷是否主服務器
rs.isMaster()
========================副本集設置結束===================
========================分片設置開始===================
#創建shard分片用到的文件夾
mkdir /home/data/mongodb/shard/s1
mkdir /home/data/mongodb/shard/logs
mkdir /home/data/mongodb/shard/config
mongod_28000.conf 配置
dbpath=/home/data/mongodb/shard/s1
logpath=/home/data/mongodb/shard/logs/s1.log
port=28000
logappend=1
nojournal=true
profile = 1 # 開啓Profiling和設置 日誌級別
slowms = 500 #多久以上纔會記錄
fork=1
shardsvr=true
#62,69啓動28000
mongod -f mongod_28000.conf
69上mongod_30000.conf(confServer的配置)
dbpath=/home/data/mongodb/shard/config
logpath=/home/data/mongodb/shard/logs/config.log
port=30000
logappend=1
profile=1 # 開啓Profiling和設置 日誌級別
slowms=500 #多久以上纔會記錄
fork=1
replSet=rs_shard
configsvr=true
#啓動Config_69
mongod -f mongod_30000.conf
#登錄config服務器,設置副本集_ 3.4版本中configSever需要副本集(沒有測試過不使用副本集是否可以,看其他人的文章中有說明)
mongo -port=30000
use admin
cfg = {
_id:'rs_shard',
configsvr:true,
members:[
{_id:0,host:'192.168.1.69:30000'}
]
};
rs.initiate(cfg)
62上的mongod_30000.conf配置信息
logpath=/home/data/mongodb/shard/logs/route.log
port=30000
logappend=1
fork=1
configdb=rs_shard/192.168.1.69:30000
#啓動路由服務_62
mongos -f mongod_30000.conf #分片的路由服務啓動使用的是mongos,其他的confServer,以及shard都是mongod
mongo -port=30000
use admin
#添加分片
sh.addShard("192.168.1.62:28000")
sh.addShard("192.168.1.69:28000")
sh.status()
#設置分片db
sh.enableSharding("demo")
#設置分片集
sh.shardCollection("demo.account",{"name":1})
#這裏需要注意的是,在3.4版本中分片服務器必須設置shardsvr=true,
同樣的在confServer中也需要設置configsvr=true,否則報錯
#填充數據測試
for(i=1;i<1991000;i++){ db.account.insert({"id":i,"name":"mongodb","age":6,"date":new Date()}); }
#查看
sh.status()
此時可以看到分片0/1上都有數據存在
mongos> sh.setBalancerState(true) #關閉自動均衡器,手動均衡,打開:sh.setBalancerState(true)
mongos> db.settings.find() #查看均衡器狀態
#設置一個均衡時間窗口:activeWindow
mongos> db.settings.update({"_id":"balancer"},{"$set":{"activeWindow":{"start":"00:00","stop":"05:00"}}},true)
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : "balancer" })
mongos> db.settings.find({"_id":"balancer"})
{ "_id" : "balancer", "activeWindow" : { "start" : "00:00", "stop" : "05:00" } }
------------------------------------------------------------分片結束------------------------------------
-------------------------------------------分片+副本集--------------------------------
#添加副本集分片_副本集要啓動了纔可以,第二個參數是設置副本集的分片名稱
sh.addShard("rs0/192.168.1.62:27100,192.168.1.69:27100","rs")
#刪除副本分片
use admin #需要到admin下面刪除
switched to db admin
db.runCommand({"removeshard":"rs0"})
ps:如果執行完以後,發現一直處於draining狀態 ,可以再執行一次刪除操作,
這裏是db.runCommand({"removeshard":"rs0"})
-------------------------------------------分片+副本集結束--------------------------------
備註:
啓動關閉
mongodb的啓動順序是,先啓動配置服務器,在啓動分片,最後啓動mongos.
關閉時,直接killall殺掉所有進程
killall mongod
killall mongos