標籤: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 #
#
###############################################################
本文出自 “笨鳥先飛” 部落格,請務必保留此出處http://2574526.blog.51cto.com/2564526/1573855
mongodb分區配置