东莞网站制作企业网站,公司主页怎么填写,域名转出过程网站能打开吗,锐旗 天梯网站建设----前言 mongodb分片 一般用得比较少#xff0c;需要较多的服务器#xff0c;还有三种的角色 一般把mongodb的副本集应用得好就足够用了#xff0c;可搭建多套mongodb复本集 mongodb分片技术 mongodb副本集可以解决数据备份、读性能的问题#xff0c;但由于mongodb副本集是…----前言 mongodb分片 一般用得比较少需要较多的服务器还有三种的角色 一般把mongodb的副本集应用得好就足够用了可搭建多套mongodb复本集 mongodb分片技术 mongodb副本集可以解决数据备份、读性能的问题但由于mongodb副本集是每份数据都一模一样的无法解决数据量过大问题 mongodb分片技术能够把数据分成两份存储假如shijiange.myuser里面有1亿条数据分片能够实现5千万左右存储在data15千万左右存储在data2 data1、data2需要使用副本集的形式预防数据丢失 mongodb分片集群三种角色介绍 router角色 #mongodb的路由提供入口使得分片集群对外透明。router不存储数据 configsvr角色 #mongodb的配置角色存储元数据信息。分片集群后端有多份存储读取数据该去哪个存储上读取依赖于配置角色。配置角色建议使用副本集 shardsvr角色 #mongodb的存储角色存储真正的数据建议使用副本集 依赖关系 当用户通过router角色插入数据时需要从configsvr知道这份数据插入到哪个节点然后执行插入动作插入数据到sharedsvr 当用户通过router角色获取数据时需要从configsvr知道这份数据是存储在哪个节点然后再去sharedsvr获取数据 mongodb分片集群的搭建说明 使用同一份mongodb二进制文件 修改对应的配置就能实现分片集群的搭建 --第一步分片集群搭建-configsvr mongodb分片集群实战环境搭建说明 configsvr #使用280172801828019三个端口来搭建 router #使用270172701827019三个端口来搭建 shardsvr #使用29017290182901929020四个端口来搭建两个端口一个集群生产环境肯定是要三个端口 资源有限就三台服务器我的分配情况是 mongodb配置角色的搭建配置文件路径/data/mongodb-fenpiancluster/28017另外两节点改下路径、端口、IP systemLog: destination: file logAppend: true path: /data/mongodb-fenpiancluster/28017/mongodb.log storage: dbPath: /data/mongodb-fenpiancluster/28017 journal: enabled: true processManagement: fork: true net: port: 28017 bindIp: 127.0.0.1,192.167.100.181 replication: replSetName: zmhconf sharding: clusterRole: configsvr mongodb配置服务集群的启动跟单例的启动方式一致都是使用mongod 分片集群的配置角色副本集搭建 config { _id:zmhconf, configsvr: true, members:[ {_id:0,host:192.167.100.181:28017}, {_id:1,host:192.167.100.182:28018}, {_id:2,host:192.167.100.183:28019} ] } rs.initiate(config) 验证是否搭建成功 /usr/local/mongodb/bin/mongo 192.167.100.181:28017 rs.status() --第二步分片集群搭建-router router说明 mongodb中的router角色只负责提供一个入口不存储任何的数据 router角色的搭建配置文件/data/mongodb-fenpiancluster/27017/mongodb.conf systemLog: destination: file logAppend: true path: /data/mongodb-fenpiancluster/27017/mongodb.log processManagement: fork: true net: port: 27017 bindIp: 192.167.100.181 sharding: configDB: zmhconf/192.167.100.181:28017,192.167.100.182:28018,192.167.100.183:28019 router最重要的配置 指定configsvr的地址使用副本集idip端口的方式指定 配置多个router任何一个都能正常的获取数据 router的启动 /usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27017/mongodb.conf /usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27018/mongodb.conf /usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27019/mongodb.conf router的验证 需要等到数据角色搭建完才能够进行验证 --第三步分片集群搭建-sharedsvr 数据角色 分片集群的数据角色里面存储着真正的数据所以数据角色一定得使用副本集 多个数据角色 mongodb的数据角色搭建配置文件/data/mongodb-fenpiancluster/29017/mongodb.conf另外三台也这么写由于资源不足把zmhdata2的副本集都放在了192.167.100.183上。 systemLog: destination: file logAppend: true path: /data/mongodb-fenpiancluster/29017/mongodb.log storage: dbPath: /data/mongodb-fenpiancluster/29017 journal: enabled: true processManagement: fork: true net: port: 29017 bindIp: 192.167.100.181 replication: replSetName: zmhdata1 sharding: clusterRole: shardsvr systemLog: destination: file logAppend: true path: /data/mongodb-fenpiancluster/29019/mongodb.log storage: dbPath: /data/mongodb-fenpiancluster/29019 journal: enabled: true processManagement: fork: true net: port: 29019 bindIp: 192.167.100.183 replication: replSetName: zmhdata2 sharding: clusterRole: shardsvr 数据服务两个集群说明 29017、29018数据角色zmhdata1 29019、29020数据角色zmhdata2 在各自节点分别启动四个数据实例 /usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29017/mongodb.log /usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29018/mongodb.log /usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29019/mongodb.log /usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29020/mongodb.log 在各自副本集的节点上写入节点信息(任意找一个副本集内的节点操作) 数据角色zmhdata1 config { _id:zmhdata1, members:[ {_id:0,host:192.167.100.181:29017}, {_id:1,host:192.167.100.182:29018} ] } rs.initiate(config) 数据角色zmhdata2 config { _id:zmhdata2, members:[ {_id:0,host:192.167.100.183:29019}, {_id:1,host:192.167.100.183:29020} ] } rs.initiate(config) --第四步分片集群添加数据节点 分片集群添加数据角色连接到路由角色里面配置数据角色为副本集的方式 /usr/local/mongodb/bin/mongo 192.167.100.181:27017 sh.addShard(zmhdata1/192.167.100.181:29017,192.167.100.182:29018) sh.addShard(zmhdata2/192.167.100.183:29019,192.167.100.183:29020) sh.status() 默认添加数据没有分片存储操作都是在路由角色里面 use shijiange for(i1; i500;i){ db.myuser.insert( {name:mytesti, age:i} ) } db.dropDatabase() #验证完后删除 经验证发现新建的数据会随机分配到一个分片中而不会均分到所有分片。 针对某个数据库的某个表使用hash分片存储分片存储就会同一个colloection分配两个数据角色MongoDB的分片是基于集合的就算有分片集群不等于数据会自动分片需要实现分片表首先需要启用数据库分片 use admin db.runCommand( { enablesharding :shijiange}); db.runCommand( { shardcollection : shijiange.myuser,key : {_id: hashed} } ) 或者也可以这样的语句来启用分片 mongos sh.enableSharding(shijiange) mongos sh.shardCollection(shijiange.myuser,{_id: hashed}); 插入数据校验分布在两个数据角色上 use shijiange for(i1; i500;i){ db.myuser.insert( {name:mytesti, age:i} ) } 配置角色如果挂掉一台会不会有影响 验证mongos多个入口是否能够正常使用