关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

一次线上事故,我顿悟了MongoDB的精髓

4月28日 话藏心投稿
  大家好,我是哪吒,最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,还要搭个MongoDB集群,麻不麻烦?
  让我们一起,一探究竟,继续学习MongoDB分片的理论与实践,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。
  三分钟你将学会:一次MongoDB线上事故的快速解决什么是MongoDB分片?MongoDB如何分片?何时分片?搭建MongoDB分片服务器MongoDB如何追踪分片集群数据?MongoDB拒绝连接?显然是MongoDB服务又挂了。
  连接MongoDB服务器,一探究竟。
  通过psaefgrepmongo查看mongo服务是否还在?不出所料,都不在了。
  大概率是因为磁盘满了。
  dfTH查看磁盘空间。
  磁盘100如何解决?
  cd到log目录下,通过rmrf删除所有日志,再重启MongoDB。mongodb启动异常:abouttoforkchildprocess,waitinguntilserverisreadyforconnection
  由于MongoDB是集群部署的,启动时,会进行数据同步,可能会比较耗时,性子急的我,怎么能忍,直接CtrlC,强制停止,然后再重新启动。
  通过psaefgrepmongo查看一下进程,两个一样的进程赫然在列。
  通过psaefgrepmongogrepvgrepawk{print2}xargskill9强制停止所有mongo进程。
  将data目录下的mongod。lock和diagnostic。data文件删掉,再重启MongoDB,启动脚本mongosstart。sh(mongodconfigdatamongodb。conf),完美解决。
  MongoDB服务器的部署目录中都是什么含义呢?它们之间又有什么关系呢?下面简单介绍一下MongoDB的分片。
  一、什么是MongoDB分片?
  分片是指跨机器拆分数据的过程,也可以叫做分区。
  MongoDB支持手动分区,使用这种方法,应用程序会维护到多个不同数据库服务器端的连接,每个服务器端都是完全独立的。应用程序不仅管理不同服务器上不同数据的存储,还管理在适当的服务器上查询数据。但当从集群中添加或删除节点,或者面对数据分布或负载模式的变化时,难以维护。
  MongoDB支持自动分片,这种方式试图将数据库架构从应用程序中抽离出来,并简化系统管理。MongoDB自动均衡分片上的数据,使节点的添加和删除变得更容易。
  MongoDB的分片机制允许你创建一个由许多分片组成的集群,并将集合中的数据分散在集群中,在每个分片上放置数据的一个子集。这允许应用程序超出单机服务器或副本集的资源限制。
  分片组成的集群对应用程序来说就像一台单机服务器,分片前运行一个或多个称为mongos的路由进程,mongos维护着一个目录,指明了每个分片包含哪些数据。应用程序可以正常连接到此路由服务器并发出请求。路由服务器知道哪些数据在哪个分片上,可以将请求转发到适当的分片。如果有对请求的响应,理由服务器会收集它们,并将它们合并,然后再返回给应用程序,对应用程序而言,它只知道自己连接到了一个单独的mongod。
  二、MongoDB如何分片?
  在单台机器上快速建立一个集群。首先,使用nodb和norc选项启动mongoshell:mongonodbnorc。
  使用ShardingTest类创建集群。运行如下代码:stShardingTest({name:oneminshards,chunkSize:1,shards:2,rs:{nodes:3,oplogSize:10},other:{enableBalancer:true}});name:分片集群的标签;shards:制定了集群由两个分片组成;rs:将每个分片定义为一组3个节点的副本集;enableBalancer:在集群启动后启用均衡器;
  ShardingTest是为了支持服务器端测试套件设计的,它在保持尽可能低的资源占用以及建立体系结构相对复杂的分片集群方面,提供了很多便利。当运行ShardingTest后,它会创建一个包含两个分片的集群,每个分片都是一个副本集。同时会对副本集进行配置,并使用必要的选项启动每个节点以建立复制协议。它会启动一个mongos来管理跨分片的请求,这样客户端就可以像与一个独立的mongod通信一样与集群进行交互。最后,它会为用于维护理由表信心的配置服务器启动一个额外的副本集,以确保查询被定向到正确的分片。
  分片的主要使用场景是拆分数据集以解决硬件和成本的限制,或为应用程序提供更好的性能。
  当ShardingTest完成集群设置后,将启动并运行10个进程,你可以连接到这些进程:两个副本集(各有3个节点)、一个配置服务器副本集(3个节点),以及一个mongos。默认情况下,这些进程会从20000端口开始。mongos会运行在20009端口上。三、何时分片?
  通常情况下,分片用于:增加可用RAM;增加可用磁盘空间;减少服务器的负载;处理单个MongoDB无法承受的吞吐量;
  四、搭建MongoDB分片服务器1、配置服务器config进程
  配置服务器是集群的大脑,保存着关于每个服务器包含哪些数据的所有元数据,因此必须首先创建配置服务器。配置服务器非常重要,运行时必须启动日志功能,并确保它的数据存储在非临时性驱动器上。
  配置服务器必须在任何一个mongos进程之前通过mongodfconfig。conf启动,因为mongos需要从配置服务器中提取配置信息。
  当对配置服务器进行写入时,MongoDB会使用majority的writeConcern级别;当对配置服务器进行读取时,MongoDB会使用majority的readConcern级别;
  这确保了分片集群元数据在不发生回滚的情况下才会被提交到配置服务器副本集。它还确保了只有那些不受配置服务器故障影响的元数据才能被读取。这可以确保所有mongos路由节点对分片集群中的数据组织方式具有一致性。
  在服务器资源方面,配置服务器应该具有充分的网络和CPU资源,配置服务器只保存了集群中数据的目录,因此只需要很少的硬盘存储资源。
  由于配置服务器的重要性,在进行任何集群维护前,都应该先对配置服务器的数据进行备份。2、mongos进程
  mongos是路由服务器,供应用程序连接使用。通过mongodfconfig。conf启动路由服务器,mongos进程需要知道配置服务器的地址,因此需要在config。conf中配置configdbconfigReplSet配置服务器的三个地址,通过配置logpath,保存MongoDB的日志。
  应该启动一定数量的mongos进程,并尽可能将其放在靠近所有分片的位置,这样可以提高查询性能。3、将副本集转换为分片
  在依次启动配置服务器、路由服务器后,可以添加分片了,如果之前已经存在副本集,那么这个副本集就会成为第一个分片。
  从MongoDB3。4开始,对于分片集群,分片的mongod实例必须配置shardsvr选项,也就是在config。conf中添加shardsvrtrue,将副本集转换为分片的过程中,需要对副本集的每个成员都重复以上动作。
  将副本集作为分片添加到集群后,就可以将应用程序的连接从副本集改为mongos路由服务器了,并通过设置防火墙,切断应用程序与分片的直接连接。4、数据分片
  (1)如何数据分片
  假如有一个test数据库,并在name键上对worker集合进行分片。先对数据库进行分片,sh。enableSharding(test);再对集合进行分片,sh。shardCollection(test。worker,{name:1});
  如果worker集合已经存在,则必须在name字段上有索引,否则,shardCollection会返回错误。如果分片的集合不存在,mongos会自动在name片键上创建索引。
  shardCollection命令会将集合拆分成多个数据块,MongoDB会在集群中的分片间均匀的分散集合中的数据。
  五、MongoDB如何追踪集群数据?1、数据块
  因为MongoDB的数据量巨大,MongoDB一般会将文档以数据块的形式进行分组,这些数据块是片键指定范围内的文档,MongoDB一般会用一个较小的表来维护数据块与分片之间的映射关系。
  需要注意:块与块之间不能重叠;一个块中的文档数量过大时,会自动拆分成两个文档;一个文档总是属于且仅属于一个块;2、块范围新分片的集合中只有一个块,块的边界是负无穷到正无穷;随着块的增长,MongoDB会自动将其拆分成两块,范围从负无穷到value,value到正无穷。范围较小的块包含比value小的值,范围较大的块包含value和比value大的值;
  因此,mongos可以很容易的找到文档在哪个块。3、拆分块
  各个分片的主节点mongod进程会跟踪它们当前的块,一旦达到某个阈值,就会检查该块是否需要拆分,如果需要拆分,mongod就会从配置服务器请求全局块大小配置值,然后执行块拆分并更新配置服务器上的元数据。配置服务器会创建新的块文档,并修改旧块的范围。
  当客户端写入一个块时,mongod会检查该块的拆分阈值。
  如果已经达到了拆分阈值,mongod就会向均衡器发送一个请求,将最顶部的块进行迁移,否则该块会留在此分片上。
  因为具有相同片键的两个文档一定会处于相同的块中,所以只能在片键值不同的文档之间进行拆分。
  下面文档如果以readTime分片,是可以的。
  但是,如果我读书读的比较快,所有书籍在一个月的时间里都读完了,readTime就会是一样的了,那就无法分片了。
  因此拥有不同的片键值在分片时,显得尤其重要。{name:哪吒编程,book:Java核心技术,readTime:October}{name:哪吒编程,book:Java编程思想,readTime:October}{name:哪吒编程,book:深入理解Java虚拟机,readTime:October}{name:哪吒编程,book:effectivejava,readTime:November}{name:哪吒编程,book:重构改善既有代码的设计,readTime:November}{name:哪吒编程,book:高性能MySQL,readTime:December}{name:哪吒编程,book:Spring技术内幕,readTime:December}{name:哪吒编程,book:重学Java设计模式,readTime:December}{name:哪吒编程,book:深入理解高并发编程,readTime:January}{name:哪吒编程,book:Redis设计与实现,readTime:January}
  分片的前提条件是所有的配置服务器必须启动并可以访问。如果mongod不断接到对一个块的写请求,则它会持续尝试拆分该块并失败,而这些拆分尝试会拖慢mongod。mongod反复尝试分片却无法成功分片的过程被称为拆分风暴。
  六、均衡器
  均衡器负责数据的迁移。均衡器会定期检查分片之间是否存在不均衡,如果存在,就会对块进行迁移。在MongoDB3。4以上的版本上,均衡器位于配置服务器副本集的主节点成员上。
  均衡器是配置服务器副本集主节点上的后台进程,它会监视每个分片上的块数量。只有当一个分片上的块数量达到特定迁移阈值时,均衡器才会被激活。
投诉 评论 转载

人性的弱点精华句教你正确认识自己该书汇集了卡耐基的思想精华和最激动人心的内容,是作者最成功的励志经典,出版后立即获得了广大读者的欢迎,成为西方世界最持久的人文畅销书。无数读者通过阅读和实践书中介绍的各种方法,……颤巍造句用颤巍造句大全91。她颤颤巍巍地从树墩子上面跌了下来,一屁股坐在地上,瞪着圆圆的眼睛看着树墩子。92。文鲁看准了,一记重拳下去,魏老板颤颤巍巍的躺倒在地上,再也没了知觉。93。颤……探寻宇宙的物质起源宇宙大爆炸之迷宇宙中的生命到底从何而来?想要探寻探寻宇宙的物质起源,宇宙是由空间、时间、物质和能量所构成的统一体。是一切空间和时间的总合。一般理解的宇宙指我们所存在的一个时空连续系统,包括其……创世纪神策略手游融合神殿攻略创世纪神策略卡牌手游融合神殿玩法哈喽,大家好呀,我是爱玩游戏的软软呀,欢迎来到【爱玩游戏的软软】。今天给小伙伴们带来的是一款卡牌类策略手游创世纪神的相关攻略哦。不知道小伙伴们有没有界面中看到过融合神殿,我们今……风雨归舟在过去,旧社会的大财主家都有钱。他那钱来得特别容易。为什么哪?钱赚钱不费难嘛。嗳,您别看来得容易,去得也马虎。有这么一档子事。民国初年,在北京西城有个大财主,此人姓花,名……张飞的胡子好硬啊1。张飞入洞房张飞入洞房,和新娘还没那个,就听到新娘哎哟一声,床单上还有点点血梅。张飞疑惑地问道:娘子,你也太夸张了吧?我还没那个呢新娘娇羞地回答:三将……快速入睡三妙方助宝宝健康成长婴儿时期的小宝宝每天需要大量的睡眠,睡眠对宝宝健康十分重要,只有充足的睡眠才能保证宝宝的健康成长,但是有些宝宝就是不爱睡觉,那么,快速入睡三妙方,助宝宝健康成长,下面跟随本站小……辽宁再发65亿元中小银行专项债,注资鞍山银行等三家城商行记者曾令俊编辑在2022年即将收官之际,辽宁省再次发行中小银行专项债。近日,中国债券信息网披露的文件显示,2022年辽宁省支持中小银行发展专项债券(二期))拟……叩门造句用叩门造句大全【叩门kumn】:1。敲门。1、记住,别轻易地放弃叩门,成功会在你下一次叩门时,微笑着迎接你的。2、用满怀感激的心灵叩门,再沉重的铁门也会开放。3、医生坐在家……淘宝定制品该如何做淘宝定制品与那些随处可以批发的产品是不一样的,付出的精力比其他商品要心酸的多了。《私人订制》这部电影相信大家都看过,是否还记得一句经典台词:成全别人,恶心自己。做定制品每天大约……50亿!西藏这些项目3月1日前全部复工!记者从自治区水利厅了解到2023年全区水利系统力争落实水利投资50亿元完成重点项目投资36。14亿元一季度将完成重点项目投资2。6亿元……一次线上事故,我顿悟了MongoDB的精髓大家好,我是哪吒,最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,还要搭个MongoDB集群,麻不麻烦?让我们一起,一探究竟,继续学习M……
不打孔就实现了78g轻量化设计?雷柏新品VT9电竞鼠标体验清代紫砂壶时代风格的流变下老年人必要克服六大不良心态散文青春万里长城球星出手次数与得分排名哈登出手少得分多,杜兰特效率高世界末日是谣言吗场均仅164,总正负值全联盟倒数,普尔的1。4亿合同真给早了开水烫伤后预防感染用什么医药好2022年9月12日焦点图美网纳达尔逆转进32强将战加斯奎特胡尔卡奇成第三位出局前八种浙报传媒股票早盘权重股压制指数太刻意了
KD欧文还走吗?篮网又补两悍将一人曾单场爆砍53分苍蝇吃屎新生入学的心得体会关于计算机实训课的几点探究为什么农民在县城买房却不住?其实是一种妥协真让人造句用真让人造句大全白夜行读书笔记高考百日誓师学生发言稿大白天造句用大白天造句大全萱草春天怎么养散光沐浴追施氮肥秋色的晨雾北京户口迁入政策3种情况可申请落户,普通人也能获得北京户口

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州