mongodb分片配置
#本次配置時間為 2014-11-06 軟件版本為:mongodb-linux-x86_64-2.4.3.tgz ??
linux :centos 5.9 64bit
##############################################################
本次部署分片的方式,只為測試環境: ? ? ? ? ? ? ? ? ? ? ? ? ?#
? ? ? ? ? ? ? 10.8.10.234 ? ?10.8.10.235 ? ?10.8.10.236 ? ? #
shard1 分片 ? ? ? master ? ? ? ?slaver ? ? ? arbiterOnly ? ?#
shard2 分片 ? ? ? master ? ? ? ?slaver ? ? ? arbiterOnly ? ?#
shard3 分片 ? ? ? master ? ? ? ?slaver ? ? ? arbiterOnly ? ?#
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
###############################################################
#每個服務器配置:
mkdir ?-p /data/mongodb/config/data
mkdir ?-p /data/mongodb/config/log
mkdir ?-p /data/mongodb/mongos/log
mkdir ?-p /data/mongodb/shard1/data
mkdir ?-p /data/mongodb/shard1/log
mkdir ?-p /data/mongodb/shard2/data
mkdir ?-p /data/mongodb/shard2/log
mkdir ?-p /data/mongodb/shard3/data
mkdir ?-p /data/mongodb/shard3/log
tar -xvzf mongodb-linux-x86_64-2.4.3.tgz
mv mongodb-linux-x86_64-2.4.3 ?/data/mongodb/mongodb
#每個服務器配置服務:
?/data/mongodb/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config/data --port 21000 --logpath /data/mongodb/config/log/config.log --fork
#每臺服務器 啟動分片服務:
/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --fork --nojournal --oplogSize 10
/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --fork --nojournal --oplogSize 10
/data/mongodb/mongodb/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --fork --nojournal --oplogSize 10
# 1臺或者多臺服務器啟動mongos路由,應用程序連接該路由端口。
#mongos 需要等到3臺服務器的配置文件都啟動之后 才能啟動,否則報錯。
/data/mongodb/mongodb/bin/mongos --configdb 10.8.10.234:21000,10.8.10.235:21000,10.8.10.236:21000 --port 20000 --logpath /data/mongodb/mongos/log/mongos.log --fork
#################################
#登入任意服務器執行:
mongo 127.0.0.1:22001?
use admin
設置分片1?
>config = { _id:"shard1", members:[
{_id:0,host:"10.8.10.234:22001",priority:1},
{_id:1,host:"10.8.10.235:22001",priority:1},
{_id:2,host:"10.8.10.236:22001",arbiterOnly:true}
]
}
>rs.initiate(config);
# ,priority:N 是設置master 優先級 可以不配置,建議把分片的master放置在不同的服務器,實現讀寫壓力分流
# arbiterOnly:true 需要配置。省略后,變成1 master + 2個slaver 與方案不符
############################
mongo 127.0.0.1:22002?
use admin
設置分片2?
>config = { _id:"shard2", members:[
{_id:0,host:"10.8.10.234:22002",priority:1},
{_id:1,host:"10.8.10.235:22002",priority:1},
{_id:2,host:"10.8.10.236:22002",arbiterOnly:true}
]
}
>rs.initiate(config);
# ,priority:N 是設置master 優先級 可以不配置。建議把分片的master放置在不同的服務器,實現讀寫壓力分流
# arbiterOnly:true 需要配置 。省略后,變成1master + 2個slaver 與方案不符
#############################
mongo 127.0.0.1:22003?
use admin
設置分片3
?
>config = { _id:"shard3", members:[
{_id:0,host:"10.8.10.234:22003",priority:1},
{_id:1,host:"10.8.10.235:22003",priority:1},
{_id:2,host:"10.8.10.236:22003",arbiterOnly:true}
]
}
>rs.initiate(config);
# ,priority:N 是設置master 優先級 可以不配置。建議把分片的master放置在不同的服務器,實現讀寫壓力分流
# arbiterOnly:true 需要配置。省略后,變成1master + 2個slaver 與方案不符
#########################
連接mongs: ?bin/mongo 127.0.0.1:20000
#使用admin數據庫 user admin
串聯路由服務器與分配副本集1
db.runCommand( { addshard : "shard1/10.8.10.234:22001,10.8.10.235:22001,10.8.10.236:22001"});
串聯路由服務器與分配副本集2
db.runCommand( { addshard : "shard2/10.8.10.234:22002,10.8.10.235:22002,10.8.10.236:22002"});
串聯路由服務器與分配副本集3
db.runCommand( { addshard : "shard3/10.8.10.234:22003,10.8.10.235:22003,10.8.10.236:22003"});
#查看分片服務器的配置
?db.runCommand( { listshards : 1 } );
?備注:每個分片副本集的仲裁節點結果不列出來
##############################
###手動選定master備注:
在配置分片的時候 添加優先級可以手動選擇master
分片配置后之后,使用如下命令,在分片的主節點登錄,可以將members[1] 提升為Master。
rs.status();
rs.conf();
cfg=rs.conf();
cfg.members[0].priority=1
cfg.members[1].priority=2
#cfg.members[2] 仲裁機不用設置
rs.reconfig(cfg);
創建數據測試:
#指定testdb分片生效
db.runCommand( { enablesharding :"testdb"});
#指定數據庫里需要分片的集合和片鍵
db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
我們設置testdb的 table1 表需要分片,根據 id 自動分片到 shard1 ,shard2,shard3 上面去。要這樣設置是因為不是所有mongodb 的數據庫和表 都需要分片!
bin/mongo 127.0.0.1:20000
#使用testdb use testdb;
? ? #插入測試數據
for (var i = 1; i <= 100000; i++) db.table1.save({id:i,"test1":"testval1"});
#查看分片情況如下,部分無關信息省掉了
db.table1.stats();
?看到數據分到3個分片,各自分片數量為: shard1 “count” : 42183,shard2 “count”: 38937,shard3 “count” : 18880。已經成功了!不過分的好像不是很均勻,所以這個分片還是很有講究的,后續再深入討論。
為了充分利用3臺服務器資源,緩解磁盤Io ,以上方案可以如下變通:
##############################################################
在生產環境中,可以如下部署: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#
? ? ? ? ? ? ? 10.8.10.234 ? ?10.8.10.235 ? ?10.8.10.236 ? ? #
shard1 分片 ? ? ? master ? ? ? ?slaver ? ? ? arbiterOnly ? ?#
shard2 分片 ? ? ?arbiterOnly ? ?master ? ? ? ?slaver ? ? ? ?#
shard3 分片 ? ? ? slaver ? ? ?arbiterOnly ? ? master ? ? ? ?#
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
###############################################################
轉載于:https://blog.51cto.com/2574526/1573855
總結
以上是生活随笔為你收集整理的mongodb分片配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于STM32 MDK中USE_STDP
- 下一篇: easyui datagrid 绑定js