设为首页 收藏本站
查看: 1195|回复: 0

[经验分享] Mongodb sharding模式篇

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-5 08:57:00 | 显示全部楼层 |阅读模式
QQ截图20151105085628.png
8台机器,4个分片及其各自之间的角色分配:
QQ截图20151105085644.png
注意:上表中颜色相同的代表在同一台服务器上,其实也可以每个成员单放一台机器,但是比如像arbiter(仲裁节点),configserver(配置服务器),mongos(路由)本身消耗资源不是很大,可以复用,但是一台服务器最好只运行一个mongod。所以我们采用的一台服务器只运行了一个mongod12个其他组成员,注意,一台服务器上不要运行同一组的多个成员,这样就起不到冗余的作用了。

//shard1

10.10.6.48 10.10.6.46
sudo mkdir -p /var/soft/data/shard1
sudo mkdir -p /var/soft/log

sudo /var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard1 --bind_ip0.0.0.0 --port 27040 --dbpath /var/soft/data/shard1/ -logpath/var/soft/log/shard1.log --logappend --nojournal --oplogSize=4096 --fork--noprealloc

10.10.6.90
sudo mkdir -p /var/soft/data/arbiter1/
sudo mkdir -p /var/soft/log
/var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard1--bind_ip 0.0.0.0 --port 27000 --dbpath /var/soft/data/arbiter1/ -logpath /var/soft/log/arbiter1.log--logappend --nojournal --oplogSize=4096 --fork

10.10.6.46上执行
config = {_id: 'shard1', members: [{_id: 0, host:'mongodb46:27040'}, {_id: 1, host: 'mongodb48:27040'},{_id: 2, host:'mongodb90:27000', arbiterOnly: true}]}
rs.initiate(config);

//shard2
10.10.6.90 10.10.6.91
sudo mkdir -p /var/soft/data/shard2
sudo mkdir -p /var/soft/log

sudo /var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard2 --bind_ip0.0.0.0 --port 27050 --dbpath /var/soft/data/shard2/ -logpath /var/soft/log/shard2.log--logappend --nojournal --oplogSize=4096 --fork --noprealloc

10.10.6.92
sudo mkdir -p /var/soft/data/arbiter2/
sudo mkdir -p /var/soft/log
/var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard2--bind_ip 0.0.0.0 --port 27000 --dbpath /var/soft/data/arbiter2/ -logpath/var/soft/log/arbiter2.log --logappend --nojournal --oplogSize=4096 --fork

10.10.6.91 上执行
config = {_id: 'shard2', members: [{_id: 0, host:'mongodb90:27050'}, {_id: 1, host: 'mongodb91:27050'},{_id: 2, host:'mongodb92:27000', arbiterOnly: true}]}
rs.initiate(config);

//shard3
10.10.6.92 10.10.6.93
sudo mkdir -p /var/soft/data/shard3
sudo mkdir -p /var/soft/log

sudo /var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard3 --bind_ip0.0.0.0 --port 27060 --dbpath /var/soft/data/shard3/ -logpath/var/soft/log/shard3.log --logappend --nojournal --oplogSize=4096 --fork--noprealloc

10.10.6.94
sudo mkdir -p /var/soft/data/arbiter3/
sudo mkdir -p /var/soft/log
/var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard3--bind_ip 0.0.0.0 --port 27000 --dbpath /var/soft/data/arbiter3/ -logpath/var/soft/log/arbiter3.log --logappend --nojournal --oplogSize=4096 --fork

10.10.6.93 上执行
config = {_id: 'shard3', members: [{_id: 0, host:'mongodb92:27060'}, {_id: 1, host: 'mongodb93:27060'},{_id: 2, host:'mongodb94:27000', arbiterOnly: true}]}
rs.initiate(config);

//shard4
10.10.6.94 10.10.6.95
sudo mkdir -p /var/soft/data/shard4
sudo mkdir -p /var/soft/log

sudo /var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard4 --bind_ip0.0.0.0 --port 27070 --dbpath /var/soft/data/shard4/ -logpath/var/soft/log/shard4.log --logappend --nojournal --oplogSize=4096 --fork--noprealloc

10.10.6.46
sudo mkdir -p /var/soft/data/arbiter4/
sudo mkdir -p /var/soft/log
/var/soft/mongodb2.2/bin/mongod --shardsvr --replSet shard4--bind_ip 0.0.0.0 --port 27000 --dbpath /var/soft/data/arbiter4/ -logpath/var/soft/log/arbiter4.log --logappend --nojournal --oplogSize=4096 --fork

10.10.6.95上执行
config = {_id: 'shard4', members: [{_id: 0, host:'mongodb94:27070'}, {_id: 1, host: 'mongodb95:27070'},{_id: 2, host:'mongodb46:27000', arbiterOnly: true}]}
rs.initiate(config);

//配置configserver:

在10.10.6.4810.10.6.93 10.10.6.95
sudo mkdir -p /var/soft/data/config
sudo mkdir -p /var/soft/log/config

/var/soft/mongodb2.2/bin/mongod --bind_ip 0.0.0.0 --fork --configsvr--port 20000 --dbpath /var/soft/data/config --logpath/var/soft/log/config/config.log --logappend

// 添加mongos
sudo mkdir -p /var/soft/log/mongos
10.10.6.90:
/var/soft/mongodb2.2/bin/mongos --port 30000 --configdb mongodb48:20000,mongodb93:20000,mongodb95:20000--logpath /var/soft/log/mongos/mongos.log --logappend --fork

10.10.6.48:
/var/soft/mongodb2.2/bin/mongos --port 30000 --configdb mongodb48:20000,mongodb93:20000,mongodb95:20000--logpath /var/soft/log/mongos/mongos.log --logappend --fork

10.10.6.92:
/var/soft/mongodb2.2/bin/mongos --port 30000 --configdb mongodb48:20000,mongodb93:20000,mongodb95:20000--logpath /var/soft/log/mongos/mongos.log --logappend --fork

10.10.6.90
/var/soft/mongodb2.2/bin/mongo --port 30000

db.runCommand({addshard :"shard1/mongodb46:27040,mongodb48:27040",name:"shard1",maxsize:504800});
db.runCommand({addshard :"shard2/mongodb90:27050,mongodb91:27050",name:"shard2",maxsize:504800});
db.runCommand({addshard :"shard3/mongodb92:27060,mongodb93:27060",name:"shard3",maxsize:504800});
db.runCommand({addshard :"shard4/mongodb94:27070,mongodb95:27070",name:"shard4",maxsize:504800});

>db.runCommand( { listshards : 1 } )
如果列出了以上二个你加的shards,表示shards已经配置成功
db.printShardingStatus();

按研发人员要求建立shard
/var/soft/mongodb2.2/bin/mongos --port 30000 --configdbmongodb48:20000,mongodb93:20000,mongodb95:20000 --logpath/var/soft/log/mongos/mongos.log --logappend --fork

db.runCommand( { movePrimary: "recsys0", to:"shard1" })
db.runCommand( { movePrimary: "recsys1", to:"shard2" })
db.runCommand( { movePrimary: "recsys2", to: "shard3"})
db.runCommand( { movePrimary: "recsys3", to:"shard4" })

分片设置:
由于我们使用的手动分片,不是auto-sharding,所以也不需要执行类似db.runCommand({enablesharding:库名})这样的命令。我们只是在4个不同的shard上建立4个库。至于读写操作会对应哪个库,由程序来判断。
那么建库的时候要登陆mongos来建,建好一个库,mongos来自动给你分配是建立在哪个shard上,但是如果你对自动分配的shard不满意可以运行命令来把它移动到别的shard上。
例如:我在mongos上建立了一个库叫recsys0库。运行db.printShardingStatus()命令我们可以看到这个recsys0是建到了哪个shard,如果建到了shard4,你觉得不满意,你想改到shard1,那么可以运行命令,db.runCommand({ movePrimary: "recsys0", to: "shard1" }),这个库就会从shard4挪到shard1上。可通过db.printShardingStatus()再次检查。

维护方面:
每个分片是一个replica set复制集,所以问题的处理与之前的replica set篇相同。

出现过的问题:
Recsys1库明明配置的是在shard2上,但是shard1上也写入了少量数据,比较奇怪,于是在shard1用mongosniff --source NET eth0 --port 27040来抓取query,看看写入Recsys1库的query来自于哪里,于是发现是来自于一个mongos,其他的mongos均正常,这台mongos直接use Recsys1就进入的是shard1,但是执行db.printShardingStatus()没发现异常,怀疑是bug,结果关闭了这台mongos服务,解决问题。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-135201-1-1.html 上篇帖子: mongodb 性能监控 下篇帖子: Mongodb replica set模式篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表