用凡科做网站需要花钱吗,wordpress后台设置中文,成都 网页设计,dedecms 建两个网站的问题MongoDB分片集群的介绍#xff1a; 是MongoDB提供的一种可水平扩展的数据存储解决方案。 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时#xff0c;可以使用分片集群来分散数据量和查询负载。分片集群的结构组成#xff1a; 1.分片#xff08;shards#xff09;…MongoDB分片集群的介绍 是MongoDB提供的一种可水平扩展的数据存储解决方案。 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时可以使用分片集群来分散数据量和查询负载。分片集群的结构组成 1.分片shards 真正存储数据的服务器以chunk为单位存数据。每个分片是单个的一个MongDB实例也可以是一个复制集用于提供数据冗余和高可用性 2.查询路由mongs 数据路由和客户端打交道的模块。 查询路由器通常使用mongos进程实现是分片集群的入口它负责将应用程序的请求路由到正确的分片 3.配置服务器config Server 所有存、取数据的方式所有shard节点的信息分片功能一些配置信息。可以理解为真实数据的元数据。实验准备环境 10个mongodb实例端口为38017-38026 1.shard节点 对应的实例 shard节点138021-23一主两从其中一个节点为arbiter shard节点238024-26一主两从其中一个节点为arbiter 2.config server 3台构成复制集一主两从 对应实例端口38018-38020 3.查询路由mongos 路由节点一台服务器38017实验步骤 1.配置shard分片集 创建多实例目录 mkdir -p /mongodb/38021/conf /mongodb/38021/log /mongodb/38021/data mkdir -p /mongodb/38022/conf /mongodb/38022/log /mongodb/38022/data mkdir -p /mongodb/38023/conf /mongodb/38023/log /mongodb/38023/data mkdir -p /mongodb/38024/conf /mongodb/38024/log /mongodb/38024/data mkdir -p /mongodb/38025/conf /mongodb/38025/log /mongodb/38025/data mkdir -p /mongodb/38026/conf /mongodb/38026/log /mongodb/38026/data 修改配置文件 shard分片集1 cat /mongodb/38021/conf/mongodb.confEOF systemLog: destination: file path: /mongodb/38021/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /mongodb/38021/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 192.168.8.5,127.0.0.1 port: 38021 replication: oplogSizeMB: 2048 replSetName: sh1 sharding: clusterRole: shardsvr processManagement: fork: true EOF cp /mongodb/38021/conf/mongodb.conf /mongodb/38022/conf/ cp /mongodb/38021/conf/mongodb.conf /mongodb/38023/conf/ sed s#38021#38022#g /mongodb/38022/conf/mongodb.conf -i sed s#38021#38023#g /mongodb/38023/conf/mongodb.conf -i shard 分片集2 cat /mongodb/38024/conf/mongodb.confEOF systemLog: destination: file path: /mongodb/38024/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /mongodb/38024/data directoryPerDB: true wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 192.168.8.5,127.0.0.1 port: 38024 replication: oplogSizeMB: 2048 replSetName: sh2 sharding: clusterRole: shardsvr processManagement: fork: true EOF cp /mongodb/38024/conf/mongodb.conf /mongodb/38025/conf/ cp /mongodb/38024/conf/mongodb.conf /mongodb/38026/conf/ sed s#38024#38025#g /mongodb/38025/conf/mongodb.conf -i sed s#38024#38026#g /mongodb/38026/conf/mongodb.conf -i 启动所有节点搭建复制集 mongod -f /mongodb/38021/conf/mongodb.conf mongod -f /mongodb/38022/conf/mongodb.conf mongod -f /mongodb/38023/conf/mongodb.conf mongod -f /mongodb/38024/conf/mongodb.conf mongod -f /mongodb/38025/conf/mongodb.conf mongod -f /mongodb/38026/conf/mongodb.conf 登录shard节点1的主服务器搭建复制集 mongo --port 38021 admin config {_id: sh1, members: [ {_id: 0, host: 192.168.8.5:38021}, {_id: 1, host: 192.168.8.5:38022}, {_id: 2, host: 192.168.8.5:38023,arbiterOnly:true}] } rs.initiate(config) 登录shard节点2的主服务器搭建复制集 mongo --port 38024 admin config {_id: sh2, members: [ {_id: 0, host: 192.168.8.5:38024}, {_id: 1, host: 192.168.8.5:38025}, {_id: 2, host: 192.168.8.5:38026,arbiterOnly:true}] } rs.initiate(config) 至此整个集群中用于存储用户数据的分片集群已经搭建好了接下来我们来搭建config server层它主要用于存储元数据数据信息 config节点配置 mkdir -p /mongodb/38018/conf /mongodb/38018/log /mongodb/38018/data mkdir -p /mongodb/38019/conf /mongodb/38019/log /mongodb/38019/data mkdir -p /mongodb/38020/conf /mongodb/38020/log /mongodb/38020/data 修改配置文件 cat /mongodb/38018/conf/mongodb.conf EOF systemLog: destination: file path: /mongodb/38018/log/mongodb.conf logAppend: true storage: journal: enabled: true dbPath: /mongodb/38018/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 192.168.8.5,127.0.0.1 port: 38018 replication: oplogSizeMB: 2048 replSetName: configReplSet sharding: clusterRole: configsvr processManagement: fork: true EOF cp /mongodb/38018/conf/mongodb.conf /mongodb/38019/conf/ cp /mongodb/38018/conf/mongodb.conf /mongodb/38020/conf/ sed s#38018#38019#g /mongodb/38019/conf/mongodb.conf -i sed s#38018#38020#g /mongodb/38020/conf/mongodb.conf -i 启动节点并配置复制集 mongod -f /mongodb/38018/conf/mongodb.conf mongod -f /mongodb/38019/conf/mongodb.conf mongod -f /mongodb/38020/conf/mongodb.conf 登录主节点 mongo --port 38018 admin config {_id: configReplSet, members: [ {_id: 0, host: 192.168.8.5:38018}, {_id: 1, host: 192.168.8.5:38019}, {_id: 2, host: 192.168.8.5:38020}] } rs.initiate(config) 至此config server节点已经配置完毕接下来我们配置mongos节点查询路由它负责与客户端建立连接确定数据应该分布在那个分片让整个集群看起来像一个简单的服务器。 mongos节点配置 创建实例目录 mkdir -p /mongodb/38017/conf /mongodb/38017/log 修改配置文件 cat /mongodb/38017/conf/mongos.conf EOF systemLog: destination: file path: /mongodb/38017/log/mongos.log logAppend: true net: bindIp: 192.168.8.5,127.0.0.1 port: 38017 sharding: configDB: configReplSet/192.168.8.5:38018,192.168.8.5:38019,192.168.8.5:38020 processManagement: fork: true EOF 启动mongos mongos -f /mongodb/38017/conf/mongos.conf 至此我们整个分片集群搭建完毕接下来对分片集群进行操作。 分片集群操作 连接mongos节点 mongo 192.168.8.10:38017/admin 添加分片 db.runCommand( { addshard : sh1/192.168.8.5:38021,192.168.8.5:38022,192.168.8.5:38023,name:shard1} ) db.runCommand( { addshard : sh2/192.168.8.5:38024,192.168.8.5:38025,192.168.8.5:38026,name:shard2} ) 列出分片 db.runCommand( { listshards : 1 } 分片方法 Hash分片 对hehe库下的大表进行hash 1.对hehe开启分片功能 mongo --port 38017 admin use admin admin db.runCommand( { enablesharding : hehe } ) 2.对hehe库下的t10w表建立hash索引 use hehe db.t10w.ensureIndex( { id: hashed } ) 3.开启分片 use admin sh.shardCollection( hehe.t10w, { id: hashed } ) 4.录入10w行数据测试 use hehe for(i1;i100001;i){ db.t10w.insert({id:i,name:lisi,age:30,date:new Date()}); } 5.验证在打开两个终端分别登录俩个不同的shard分片复制集中对t10w表进行行数查看 su - mongod mongo --port 38021 use hehe db.t10w.count(); 发现数据分别在两个shard节点的复制集中存入而不是仅仅存入到了一个shard节点中这就是hash分片算法起到的作用 su - mongod mongo --port 38024 use hehe db.t10w.count(); 分片集群当中常用到的操作命令 判断是否shard集群 mongo --port 38017 admin admin db.runCommand({ isdbgrid : 1}) 6、列出所有分片信息 admin db.runCommand({ listshards : 1}) 7、列出开启分片的数据库 admin use config config db.databases.find( { partitioned: true } ) 或者 config db.databases.find() //列出所有数据库分片情况 8、查看分片的片键 config db.collections.find().pretty() { _id : test.t100w, lastmodEpoch : ObjectId(58a599f19c898bbfb818b63c), lastmod : ISODate(1970-02-19T17:02:47.296Z), dropped : false, key : { id : hashed }, unique : false } 9、查看分片的详细信息 admin db.printShardingStatus() 或 admin sh.status() ***** 10、删除分片节点谨慎 1确认blance是否在工作 sh.getBalancerState() 2删除shard2节点(谨慎) mongos use admin mongos db.runCommand( { removeShard: shard2 } ) 注意删除操作一定会立即触发blancer。