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

[经验分享] mongodb分布式集群架构

[复制链接]
YunVN网友  发表于 2015-7-9 09:16:21 |阅读模式
  一、关于mongodb
  
  MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当***能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  

二、mongodb分布式应用原理  
  MongoDB集群包括一定数量的mongod(分片存储数据)、mongos(路由处理)、config server(配置节点)、clients(客户端)、arbiter(仲裁节点:为了选举某个分片存储数据节点那台为主节点)。
  
DSC0000.png
  

  • 1、shards:一个shard为一组mongod,通常一组为两台,主从或互为主从,这一组mongod中的数据时相同的,具体可见《mongodb分布式之数据复制》。数据分割按有序分割方式,每个分片上的数据为某一范围的数据块,故可支持指定分片的范围查询,这同google的BigTable 类似。数据块有指定的最大容量,一旦某个数据块的容量增长到最大容量时,这个数据块会切分成为两块;当分片的数据过多时,数据块将被迁移到系统的其他分片中。另外,新的分片加入时,数据块也会迁移。
  •   
  • 2、mongos:可以有多个,相当于一个控制中心,负责路由和协调操作,使得集群像一个整体的系统。mongos可以运行在任何一台服务器上,有些选择放在shards服务器上,也有放在client 服务器上的。mongos启动时需要从config servers上获取基本信息,然后接受client端的请求,路由到shards服务器上,然后整理返回的结果发回给client服务器。
  •   
  • 3、config server:存储集群的信息,包括分片和块数据信息。主要存储块数据信息,每个config server上都有一份所有块数据信息的拷贝,以保证每台config server上的数据的一致性。
  •   
  • 4、shard key:为了分割数据集,需要制定分片key的格式,类似于用于索引的key格式,通常由一个或多个字段组成以分发数据,比如:
  •   
  • { name : 1 }
  • { _id : 1 }
  • { lastname : 1, firstname : 1 }
  • { tag : 1, timestamp : -1 }
  •   
  • mongoDB的分片为有序存储(1为升序,-1为降序),shard key相邻的数据通常会存在同一台服务
  • (数据块)上。
   三、mongodb分布式部署方式
  服务器部署可以有多种方式。首先,每台config server、mongos、mongod都可以是单独的服务器,但这样会导致某些服务器的浪费,比如config server。下图为物理机共享的集群部署,不需要额外加机器。
  
DSC0001.png
  
    当然也有其他的方案,比如把mongos部署在所有的mongod(server1-6)上,又或者在每个运用服务器(server7)上部署mongos。这样部署有个好处在于,appserver和mongos之间的通信建立在localhost interface上,减少了通信成本。当然,此乃官方说法,但本人有想法,尽管减少了appserver和mongos之间的通信成本,但mongos与mongod之间的通信成本却增加了,而且把mongos部署在appserver上并不是很利于sa管理,mongoDB应该是一个相对独立的系统,与应用的耦合度应该尽量降到最低,万一应用想要换数据库,也能多少减少些工作量。
  
  四、mongodb分布式的安装
  1、下载

  • wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.4.tgz
  2、安装

  • tar zxvf mongodb-linux-2.0.4.tgz
  • cp -fr mongodb-linux-*2.0.4/* /data/mongodb/
  • mkdir -p /data/mongodb/data/                                     #创建数据存储目录
  • mkdir -p /data/mongodb/log/                                      #创建日志存储目录
  • mkdir -p /data/mongodb/config/                                   #创建配置存储目录
  • mkdir -p /data/mongodb/arbiter/                                  #创建仲裁节点存储目录
  3、单机模式以及个参数说明

  • mongod --fork --bind_ip 127.0.0.1 --port 11811 --dbpath /data0/mongodb/data --directoryperdb --logpath /data0/mongodb/log/db1.log --logappend  --nohttpinterface
  • netstat -ntlp|grep mongod
  

  • 简单的参数说明:
  • –logpath 日志文件路径
  • –master 指定为主机器
  • –slave 指定为从机器
  • –source 指定主机器的IP地址
  • –pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
  • –logappend 日志文件末尾添加
  • –port 启用端口号
  • –fork 在后台运行
  • –only 指定只复制哪一个数据库
  • –slavedelay 指从复制检测的时间间隔
  • –auth 是否需要验证权限登录(用户名和密码)
  • –noauth 不需要验证权限登录(用户名和密码)
  五、集群模式mongos,mongod,configsvr

  • 1.Shard分片--
  • 第一组分片  
  • 192.168.200.226:     
  • /data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
  • #启动rep1分片的一个数据节点
  • /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log  #启动路由节点,读取201.226上的配置节点的配置文件,(在配置节点启动后启动)
  • /data/mongodb/bin/mongod --replSet rep1 --fork --port 11814 --dbpath /data/mongodb/arbiter --directoryperdb --logpath /data/mongodb/log/arbiter.log --logappend --nohttpinterface
  • #启动分片的仲裁节点
  •   
  • 192.168.201.226:     
  • /data/mongodb/bin/mongod --replSet rep1 --fork --port 11813 --maxConns 65535 --dbpath /data/mongodb/data --directoryperdb --logpath /data/mongodb/log/db.log --logappend --nohttpinterface
  • #启动rep1分片的第二个数据节点
  • /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
  • #启动第二个路由节点 (在配置节点启动后启动)
  •   
  • 2.ConfigServer---
  •     #启动config server  
  •     192.168.201.226:     
  •         /data/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/config --port 11812 --fork --logpath /data/mongodb/log/mc.log
  •    #启动配置节点,注意配置节点应该优先启动,不然路由节点读取不到配置节点信息则会启动失败。
  • 3.Mongos路由---
  •     #启动mongos,指定config server, chunkSize 256M
  •     192.168.201.226:
  •         /data/mongodb/bin/mongos --configdb 192.168.201.226:11812 --port 11811 --fork --chunkSize 256 --logpath /data/mongodb/log/ms.log
  • #启动路由节点
  由于机器有限,只配置了一个shard分片,该分片里有2个节点,新增加分片只需对应改replSet 名称即可。

  • 4.配置replSet: 连接任一mongod members

  • mongo 192.168.201.226:11813
  • config = {_id: 'rep1', members: [
  • {_id: 0, host: '192.168.200.226:11813', priority: 2},                     #priority 为定义优先级,默认为1,高优先级会被认为是主节点优先启用。
  • {_id: 1, host: '192.168.201.226:11813'},
  • {_id: 2, host: '192.168.200.226:11814', arbiterOnly: true}]
  • }
  •     rs.initiate(config);
  •     rs.status()
  

  • 5.连接mongos增加shard 80G

  •     mongo 192.168.201.226:11811/admin
  •     show dbs
  •     use admin
  •     db.runCommand({addshard:'rep1/192.168.201.226:11813,192.168.200.226:11813',maxsize:81920})
  •     db.runCommand({listshards:1})
  

  • 6.连接mongos增加创建test库和c1集合,并测试

  •     mongo 192.168.201.226:11811/admin
  •     db.runCommand({enablesharding:'test'})
  •     printShardingStatus()
  •     db.runCommand({shardcollection:'test.auto_increment_id', key:{_id:1}, unique : true})
  •     db.runCommand({shardcollection:'test.c1', key:{_id:1}, unique : true})
  •     for (var i = 1; i

运维网声明 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-84633-1-1.html 上篇帖子: 远程连接mongodb出现 no route to host 和 Connection refused 下篇帖子: ubuntu+mongodb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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