摘要:Mongo Sharding + ReplSet 筆記
最近在做Sharding +ReplSet,而找到了
http://www.slideshare.net/rogerxia/mongo-db-8743986
這個簡報,滿不錯的。
順便記一下筆記
1.創建數據文件儲存路徑
mkdir -p /data/data/r0
2.創建日誌文件路徑
mkdir -p /data/log
3.創建主叢key文件,用於標識集群的私鑰的完整路徑,如果各個實例的key file內容不一致,程序將不能正常用。
mkdir -p /data/key
echo "this is rs1 super secret key" > /data/key/r0
chmod 600 /data/key/r*
4.啟動三個實例
mongod --replSet rs1 --keyFile /data/key/r0 --fork --port 28010 --dbpath /data/data/r0 --logpath=/data/log/r0.log --logappend
5.配置及初始化Replica Sets
mongo -port 28010
config_rs1={_id:'rs1',members:[
{_id:0,host:'localhost:28010',priority:1},
{_id:1,host:'localhost:28011'},
{_id:2,host:'localhost:28012'}]
}
priority=1指PRIMARY
初始化配置
rs.initiate(config_rs1)
查看複制集狀態
rs.status()
rs.isMaster();
db.oplog.rs.find();
db.printReplicationInfo();
db.printSlaveReplicationInfo();
db.system.replset.find();
db.getMongo().setSlaveOk();
增加節點
rs.add("localhost:28013")
rs.status();
減少節點
rs.remove("localhost:28014")
啟動Shard Server
mkdir -p /data/shard/s0
mongod --shardsvr --port 20000 -dbpath /data/shard/s0 --fork --logpath /data/shard/log/s0.log --directoryperdb
啟動Config Server
mkdir -p /data/shard/config
mongod --configsvr --port 30000 --dbpath /data/shard/config --fork --logpath /data/shard/log/config.log --directoryperdb
啟動Route Process
mongos --port 40000 --configdb localhost:30000 --fork --logpath /data/shard/log/route.log --chunkSize 1
配置Sharding
db.runCommand({addshard:"localhost:20000"})
db.runCommand({enablesharding:"test"})
db.runCommand({shardcollection:"test.users",key:{_id:1}})
驗證sharding正常工作
db.users.status();
查看Sharding 信息
printShardingStatus()
判斷是否是Sharding
db.runCommand({isdbgrid:1})
對現有的表進行Sharding
db.users_2.stats()
sharded:false
use admin;
db.runCommand({shardcollection:"test.users_2',key:{_id:1}})
新增Shard Server
db.runCommand({addshard:"localhost:20002"})
移除Shard Server
db.runcommand({"removeshard":"localhost:20002"});
Replica Sets + Sharding
Shard :
使用Replica Sets , 確保每個數據節點都具備份,自動容錯轉移,自動恢復能力。
Config:
使用3個配置服務器,確保元數據完整性
Route:
使用3個路由進程,實現負載平衡,提高客戶端接入性能
驗證Sharding 正常工作
use test
for(var i=1;i<200000;i++)db.users.insert({id:i,addr_1:"Beijing",addr_2:"Shanghai"});
db.users.status()