




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
mongodb3.6.2集群搭建:分片+副本集mongodb是最常用的nosql数据库在数据库排名中已经上升到了前六这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群。在搭建集群之前,需要首先了解几个概念:路由,分片、副本集、配置服务器等。四个组件:mongos、configserver、shard、replicaset。mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。configserver,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从configserver加载配置信息,以后如果配置服务器信息变化会通知到所有的mongos更新自己的状态,这样mongos就能继续准确路由。在生产环境通常有多个configserver配置服务器,因为它存储了分片路由的元数据,防止数据丢失!shard,分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。replicaset,中文翻译副本集,其实就是shard的备份,防止shard挂掉之后数据丢失。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性。仲裁者(Arbiter),是复制集中的一个MongoDB实例,它并不保存数据。仲裁节点使用最小的资源并且不要求硬件设备,不能将Arbiter部
署在同一个数据集节点中,可以部署在其他应用服务器或者监视服务器中,也可部署在单独的虚拟机中。为了确保复制集中有奇数的投票成员(包括primary),需要添加仲裁节点做为投票,否则primary不能运行时不会自动切换primaryo简单了解之后,我们可以这样总结一下,应用请求mongos来操作mongodb的增删改查,配置服务器存储数据库元信息,并且和mongos做同步,数据最终存入在shard(分片)上,为了防止数据丢失同步在副本集中存储了一份,仲裁在数据存储到分片的时候决定存储到哪个节点。环境准备系统系统Redhat6.4四台服务器:30/231/232/233安装包:mongodb-linux-x86_64-rhel62-3.6.2.tgz服务器规划(注:本次搭建这个环境主要用来初步测试,所以没有使用仲裁。)服务器230服务器230服务器231服务器232服务器233mongosconfigservermongosconfigservermongosconfigservermongosconfigservermongosconfigservermongosconfigservershardserver副节点shardserve副节点shardserveiTlfp点shardserve主节点shardserve副节点shardserve副节点shardserver副节点shardserve副节点shardserveiTlfp点shardserve主节点shardserve副节点shardserve副节点shardserve主节点shardserve副节点shardserve主节点shardserveSI节点shardserver副节点shardserve副节点shardserveS节点shardserve主节点shardserveS节点shardserveS节点端口分配:mongosconfigshardlshard2shard32000021000270012700227003集群搭建1、安装mongodb在官网下载mongodb-linux-x86_64-rhel62-3.6.2.tgz,放在/soft下面#解压tar-xzvfmongodb-linux-x86_64-rhel62-3.6.2.tgz生成目录mongodb-linux-x86_64-rhel62-3.6.2分别在每台机器建立conf、mongos、config、shard1、shard2、shard3、shard4七个目录,因为mongos不存储数据,只需要建立日志文件目录即可。在/soft/mongodb-linux-x86_64-rhel62-3.6.2/下面建以上目录:mkdirconfmkdir-pmongos/logmkdir-pconfig/datamkdir-pconfig/logmkdir-pshardl/datamkdir-pshardl/logmkdir-pshard2/datamkdir-pshard2/logmkdir-pshard3/datamkdir-pshard3/logmkdir-pshard4/datamkdir-pshard4/log配置环境变量vim/etc/profile#内容exportMDB_HOME=/soft/mongodb-linux-x86_64-rhel62-3.6.2exportPATH=$MONGODB_HOME/bin:$PATH#使立即生效source/etc/profile2、configserver配置服务器mongodb3.4以后要求配置服务器也创建副本集,不然集群搭建不成功。添加配置文件vimconf/config.conf##配置文件内容pidfilepath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/config/log/configsrv.piddbpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/config/datalogpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/config/log/congigsrv.loglogappend=truebind_ip=port=21000fork=true#declarethisisaconfigdbofacluster;configsvr=true#副本集名称replSet二configs#设置最大连接数maxConns=20000启动四台服务器的configservermongod-f/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/config.conf登录任意一台配置服务器,初始化配置副本集#连接mongo--port21000#config变量config=(..._id:"configs”,...members:[... (_id:0,host:"30:21000"},... (_id:1,host:"31:21000"},(_id:2,host:〃32:21000〃},(_id:3,host:〃33:21000〃}... ]...}#初始化副本集rs.initiate(config)其中,"—id":"configs"应与配置文件中配置的replicaction.replSetName一致,"members”中的"host"为四个节点的ip和port3、配置分片副本集(四台机器)设置第一个分片副本集配置文件vi/soft/mongodbTinux-x86_64-rhel62-3.6.2/conf/shard1.conf#配置文件内容# pidfilepath=/soft/mongodbTinux-x86_64-rhel62-3.6.2/shard1/log/shard1.piddbpath=/soft/mongodbTinux-x86_64-rhel62-3.6.2/shard1/datalogpath=/soft/mongodbTinux-x86_64-rhel62-3.6.2/shard1/log/shard1.loglogappend=truebind_ip=port=27001fork=true#副本集名称replSet二shard1#declarethisisasharddbofacluster;shardsvr=true#设置最大连接数
maxConns=20000启动四台服务器的shardlserver登陆任意一台服务器登陆任意一台服务器,初始化副本集mongod-f/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/shard1.conf登陆任意一台服务器登陆任意一台服务器,初始化副本集(_id:(_id:(_id(_id:(_id:(_id:(_id:0,1,2,3,hosthosthosthost"30:27001〃},"31:27001〃},"32:27001〃},:"33:27001"}mongo--port27001#使用admin数据库useadminconfig=(id:"shard1",members:[#初始化副本集配置rs.initiate(config);设置第二个分片副本集配置文件vi/soft/mongodbTinux—x86_64—rhel62—3.6.2/conf/shard2.conf#配置文件内容# pidfilepath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/shard2/log/shard2.piddbpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/shard2/datalogpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/shard2/log/shard2.loglogappend=truebind_ip=port=27002
fork=true#副本集名称replSet二shard2#declarethisisasharddbofacluster;shardsvr=true#设置最大连接数maxConns=20000启动四台服务器的shard2servermongod-f/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/shard2.conf登陆任意一台服务器,初始化副本集mongo--port27002#使用admin数据库useadmin#定义副本集配置config=(..._id:"shard2",...members:[(_id(_id(_id(_id:0,(_id(_id(_id(_id:0,1,2,3,hosthosthosthost"30:27002〃},"31:27002〃},"32:27002〃},:"33:27002"}#初始化副本集配置rs.initiate(config);设置第三个分片副本集配置文件vi/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/shard3.conf#配置文件内容# pidfilepath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/shard3/log/shard3.piddbpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/shard3/datalogpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/shard3/log/shard3.loglogappend=truebind_ip=port=27003fork=true#副本集名称replSet二shard3#declarethisisasharddbofacluster;shardsvr=true#设置最大连接数maxConns=20000启动四台服务器的shard3servermongod-f/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/shard3.conf登陆任意一台服务器,初始化副本集mongo--port27003#使用admin数据库useadmin#定义副本集配置config=(..._id:"shard3",...members:[... (_id:0,host:〃30:27003〃},... (_id:1,host:〃31:27003〃},(_id:2,host:〃32:27003〃},(_id:3,host:〃33:27003〃}... ]...}#初始化副本集配置rs.initiate(config);设置第四个分片副本集配置文件vi/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/shard4.conf#配置文件内容# pidfilepath=/soft/mongodbTinux-x86_64-rhel62-3.6.2/shard4/log/shard4.piddbpath=/soft/mongodbTinux-x86_64-rhel62-3.6.2/shard4/datalogpath=/soft/mongodbTinux-x86_64-rhel62-3.6.2/shard4/log/shard4.loglogappend=truebind_ip=port=27004fork=true#副本集名称replSet二shard4#declarethisisasharddbofacluster;shardsvr=true#设置最大连接数maxConns=20000启动四台服务器的shard4server
mongod-f/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/shard4.conf登陆任意一台服务器,初始化副本集mongo--port27004#使用admin数据库useadmin#定义副本集配置config=(..._id:"shard4",...members:[(_id(_id(_id(_id:0,(_id(_id(_id(_id:0,1,2,3,hosthosthosthost"30:27004〃},"31:27004〃},"32:27004〃},:"33:27004"}... ]...}#初始化副本集配置rs.initiate(config);4、配置路由服务器mongos先启动配置服务器和分片服务器,后启动路由实例启动路由实例:(四台机器)vi/soft/mongodbTinux—x86_64—rhel62—3.6.2/conf/mongos.confpidfilepath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/mongos/log/mongos.pidlogpath=/soft/mongodb-linux-x86_64-rhel62-3.6.2/mongos/log/mongos.loglogappend=truebind_ip=port=20000fork=true#监听的配置服务器,只能有1个或者3个configs为配置服务器的副本集名字configdb=configs/30:21000,31:21000,32:21000,33:21000#设置最大连接数maxConns=20000启动四台服务器的mongosservermongos-f/soft/mongodb-linux-x86_64-rhel62-3.6.2/conf/mongos.conf5、启用分片目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。登陆任意一台mongosmongo--port20000#使用admin数据库useradmin#串联路由服务器与分配副本集sh.addShard(〃shard1/30:27001,31:27001,32:27001,33:27001〃)sh.addShard(〃shard2/30:27002,31:27002,10.146.67.232:27002,33:27002〃)sh.addShard(〃shard3/30:27003,31:27003,10.146.67.232:27003,33:27003〃)sh.addShard(〃shard4/30:27004,31:27004,32:27004,33:27004〃)#查看集群状态sh.status()6、测试目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。#指定testdb分片生效db.runCommand((enablesharding:〃testdb"});#指定数据库里需要分片的集合和片键db.runCommand((shardcollection:"testdb.table1",key:{id:1}})我们设置testdb的tablel表需要分片,根据id自动分片到shardl,shard2shard3,shard4上面去要这样设置是因为不是所有mongodb的数据库和表都需要分片!测试分片配置结果mongo--port20000#使用testdb ,/为了保证数据量大一usetestdb; i 点,这里可以随便写#插入测试数据 \测试数据for(vari=1;i<=300000;i++) __一一--“"db.table1.save({id:i,"test1":"testval1daggrjsi9ohjh"});#查看分片情)兄如下,部分无关信息省掉了sh.status();databases:{"_id":"config","primary":"config","partitionedtrue}config.system.sessionsshardkey:{"_id":1}unique:falsebalancing:truechunks:shard11{"_id":{"$minKey":1}}-->>{"_id{"$maxKey":1}}on:shard1Timestamp(1,0){"_id":"skye","primary":"shard2","partitioned"false}r〃上」〃_〃.一一〃• 〃_〃一i 〃 j 〃{_id:testdb,primary:shard4,partitioned:true}testdb.tablelshardkey:{"id”:1}unique:falsebalancing:truechunks:shard11shard21shard41{"id":{〃$minKey〃:1}}-->>{"id":2}on:shardlTimestamp(2,0)("id":2}-->>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 华东师范大学《风景园林设计实验古典园林景观设计》2023-2024学年第二学期期末试卷
- 武汉工程大学邮电与信息工程学院《立体设计》2023-2024学年第二学期期末试卷
- 南京师范大学泰州学院《大学美育》2023-2024学年第二学期期末试卷
- 南昌航空大学《电路(下)》2023-2024学年第二学期期末试卷
- 河南检察职业学院《造型基础(工设)》2023-2024学年第二学期期末试卷
- 河源广东河源紫金县专门学校驻校教官招聘7人笔试历年参考题库附带答案详解
- 山东农业大学《组成原理与接口技术》2023-2024学年第二学期期末试卷
- 山西体育职业学院《联合创作预案》2023-2024学年第二学期期末试卷
- 中国矿业大学(北京)《基础造型》2023-2024学年第二学期期末试卷
- 河南2025年河南省工业学校招聘20人笔试历年参考题库附带答案详解-1
- 北师大版小学数学五年级下册同步课时练习试题含答案(全册)
- 战马魂(2023年重庆A中考语文试卷记叙文阅读题及答案)
- 2024年全国职业院校技能大赛中职组(法律实务赛项)考试题库-下(多选、判断题)
- 区块链应用操作员技能大赛考试题库大全-下(多选、判断题)
- 二 《“友邦惊诧”论》(同步练习)解析版
- 施工技术交底(电气安装)
- 污水处理厂TOT项目招标文件模板
- 劳工及道德体系法律法规清单
- 仓储物流中心物业管理服务费报价单
- 2024年哈尔滨科学技术职业学院单招职业适应性测试题库及答案解析
- 2024年北京市大兴区清源街道招聘笔试冲刺题(带答案解析)
评论
0/150
提交评论