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

[经验分享] mongodb集群与分片的配置说明

[复制链接]

尚未签到

发表于 2018-10-27 07:44:52 | 显示全部楼层 |阅读模式
mongodb集群与分片的配置说明
  Shardingcluster介绍
  这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。
  系统分为需要三种角色:
  Shard Server:mongod 实例,用于存储实际的数据块,实际生产环境中一个 shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
  Config Server:mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
  Route Server:mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
  架构图:

  注:mongoDB集群最好是奇数数个服务器,本例介绍的是三台服务器
  

  •   分别在3台机器上运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组成replica set1 ,作为cluster的shard1

  •   分别在3台机器上运行另一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组成replica set2 ,作为cluster的shard2

  •   分别在3台机器运行一个mongod实例,作为3个config server

  •   分别在每台机器运行一个mongos进程,用于客户连接

  主机
  IP
  端口信息
  Server1
  192.168.10.207
  mongod shard11:27017
  mongod shard12:27018
  mongod shard1:20000
  mongos1:30000
  Server2
  192.168.10.208
  mongod shard11:27017
  mongod shard12:27018
  mongod shard1:20000
  mongos1:30000
  Server3
  192.168.10.209
  mongod shard11:27017
  mongod shard12:27018
  mongod shard1:20000
  mongos1:30000
  软件准备
  部署前请先关闭防火墙,因为防火墙有时候会屏蔽
  1 安装mongoDB软件
  下载mongodb
  解压tar zxvf mongodb-linux-***.tar
  2 创建数据目录
  Server1:
mkdir -p /data/shard11 mkdir -p /data/shard21   Server2:
mkdir -p /data/shard12 mkdir -p /data/shard22   Server3:
mkdir -p /data/shard13 mkdir -p /data/shard23   配置replice sets(副本集):

  •   配置shard1所用到的replicasets:

  Server1:
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath/data/shard11/ -oplogSize 100 -logpath /data/shard11.log -logappend --fork   Server2:
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath/data/shard12/ -oplogSize 100 -logpath /data/shard12.log -logappend --fork   Server3:
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath/data/shard13/ -oplogSize 100 -logpath /data/shard13.log -logappend –-fork   初始化replica set
  用mongo连接其中一个mongod(例如:./mongo 192.168.10.207:27017)执行:
> config = {_id:"shard1",members:[{_id:0,host:'192.168.10.207:27017'},{_id:1,host:'192.168.10.208:27017'},{_id:2,host:'192.168.10.209:27017'}]}                                                   > rs.initiate(config);   2、同样的方法,配置shard2用到的replica sets:
  Server1:
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath/data/shard21/ -oplogSize 100 -logpath /data/shard21.log -logappend --fork   Server2:
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath/data/shard22/ -oplogSize 100 -logpath /data/shard22.log -logappend --fork   Server3:
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath/data/shard23/ -oplogSize 100 -logpath /data/shard23.log -logappend –-fork   初始化replica set
  用mongo连接其中一个mongod(例如:./mongo 192.168.10.207:27017)执行:
> config ={_id:"shard2",members:[{_id:0,host:'192.168.10.207:27018'},{_id:1,host:'192.168.10.208:27018'},{_id:2,host:'192.168.10.209:27018'}]}                                               > rs.initiate(config);   配置三台config server:
  Server1:
./mongod -configsvr -dbpath /data/config -port 20000 -logpath/data/config.log -logappend --fork   Server2:
./mongod -configsvr -dbpath /data/config -port 20000 -logpath/data/config.log -logappend --fork   Server3:
./mongod -configsvr -dbpath /data/config -port 20000 -logpath/data/config.log -logappend --fork   配置mongos:
  Server1
./mongos -configdb192.168.10.207:20000,192.168.10.208:20000,192.168.10.209:20000 -port 30000-chunkSize 5 -logpath /data/mongos.log -logappend --fork   server2
./mongos -configdb192.168.10.207:20000,192.168.10.208:20000,192.168.10.209:20000 -port 30000-chunkSize 5 -logpath /data/mongos.log -logappend --fork   server3
./mongos -configdb192.168.10.207:20000,192.168.10.208:20000,192.168.10.209:20000 -port 30000-chunkSize 5 -logpath /data/mongos.log -logappend --fork   注释:mongos不需要dbpath
  配置分片:

  •   连接mongos,并切换到admin ./mongo 192.168.10.207:30000/admin

>db admi   2.加入shards
  如果shard是单台服务器,用:
>db.runCommand({ addshard :“[:]”})   如果shard是replica sets,用:
>db.runCommand({ addshard : “replicaSetName/[:],[:]..”})   如本机执行:
>db.runCommand({ addshard :“shard1/192.168.10.207:27017,192.168.10.208:27017,192.168.10.209:27017″,name:”s1″,maxsize:20480});   >db.runCommand({ addshard :“shard2/192.168.10.207:27018,192.168.10.208:27018, 192.168.10.209:27018″,name:”s2″,maxsize:20480})   注释:
  name为用于置顶shard的名字,不指定的话系统自动分配
  maxsize为指定各个shard可用的最大磁盘空间
  3.查看shard是否添加成功
>db.runCommand({listshards:1})   如果列出了以上两个你家的shards,表示添加成功
  4.激活数据库分片
>db.runCommand({enablesharding:””})   通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的 collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还 需单独对collection作些操作
  如:
>db.runCommand({enablesharding:"test"})   查看数否生效:
>db.printShardingStatus()    sharding version: { "_id" : 1, "version" : 3 }     shards:        {  "_id" : "s1",  "host" :        "shard1/192.168.10.207:27017,192.168.10.208:27017,192.168.10.209:27017" }        {  "_id" : "s2",  "host" : "shard2/192.168.10.207:27018,192.168.10.208:27018,192.168.10.209:27018" }          databases:        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }        {  "_id" : "test",  "partitioned" : true,  "primary" : "s1" }   注释:
  一旦enable了个数据库,mongos将会把数据库里的不同数据集放在不同的分片上。除非数据集被分片(下面会设置),否则一个数据集的所有数据将放在一个分片上。
  Collecton分片:
  要使单个collection也分片存储,需要给collections指定一个分片key,如下:
> db.runCommand( {shardcollection : “”,key :  })   a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)
  b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
  分片collection例子:
> db.runCommand({shardcollection:"test.c1",key:{id:1}}) > use test   测试一下:
> for(var i =0; i db.c1.stats()              {         “sharded” : true,         “ns” : “test.c1″,         “count” : 200003,         “size” : 25600384,         “avgObjSize” : 128,         “storageSize” : 44509696,         “nindexes” : 2,         “nchunks” : 15,         “shards” : {                “s1″ : {                        “ns” : “test.c1″,                        “count” : 141941,                        “size” : 18168448,                        “avgObjSize” : 128,                        “storageSize” : 33327616,                        “numExtents” : 8,                        “nindexes” : 2,                        “lastExtentSize” : 12079360,                        “paddingFactor” : 1,                        “flags” : 1,                        “totalIndexSize” : 11157504,                        “indexSizes” : {                                “_id_” : 5898240,                                “id_1″ : 5259264                        },                        “ok” : 1                },                “s2″ : {                        “ns” : “test.c1″,                        “count” : 58062,                        “size” : 7431936,                        “avgObjSize” : 128,                        “storageSize” : 11182080,                        “numExtents” : 6,                        “nindexes” : 2,                        “lastExtentSize” : 8388608,                        “paddingFactor” : 1,                        “flags” : 1,                        “totalIndexSize” : 4579328,                        “indexSizes” : {                                “_id_” : 2416640,                                “id_1″ : 2162688                        },                        “ok” : 1                }         },         “ok” : 1 }   如果出现以上相同信息,为系统部署正确
  附录:
  mongod手册:http://cn.docs.mongodb.org/manual/reference/mongod/
  服务器状态查询手册:http://cn.docs.mongodb.org/manual/reference/server-status/
  数据库统计参考手册:http://cn.docs.mongodb.org/manual/reference/database-statistics/
  此文章并非转载,我是看到很多地方总结出来写的,但是里面也有别人的经验,只为提供参考
2年前 / 0℃ / 标签:mongodb集群 mongodb    上一篇下一篇


运维网声明 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-626927-1-1.html 上篇帖子: 实战3 Cacti监控nginx、mysql、mongodb、memcached和php-fpm 下篇帖子: MongoDB MapReduce 性能提升20倍的优化宝典
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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