【MongoDB】MSC集群部署(4)
一、什么是MSC
MongoDB Sharding Cluster简称MSC,是MongoDB的分片集群,相比MySQL的mycat和Redis的cluster更为完善,支持自分片能力,能将数据平均分配到数据节点的。很多产品的分布式设计理念也是参考的它。
MSC集群的组成
· 一个或多个mongos节点组成Router(至少1节点),Router负责对客户端请求进行调度与数据分片
· 一个高可用复制集(3节点)构成Config Servers,存储了后端数据节点的信息,类似注册中心
· 两个或多个复制集(至少6节点)构成后端数据节点(Shard)。
MSC集群工作流程
客户端请求先经过Router,然后Router从Config Servers中获取后端数据节点
二、MSC集群部署
1、部署Shard复制集
· 在6个节点上部署出2个Shard复制集,推荐一主一从一arbiter,配置文件参考:
cat > /mongodb/conf/mongodb.conf <<EOF systemLog: destination: file path: /mongodb/log/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /mongodb/data directoryPerDB: true wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 10.0.0.41,127.0.0.1 #修改每个节点的ip port: 38018 replication: oplogSizeMB: 2048 replSetName: sh1 #定义复制集的名字 sharding: clusterRole: shardsvr #定义复制集在集群中的角色,固定写法 processManagement: fork: true EOF
· 初始化集群
mongod -f /mongodb/conf/mongodb.conf mongo --port 38018 use admin config = {_id: 'sh1', members: [ {_id: 0, host: '10.0.0.41:38018'}, {_id: 1, host: '10.0.0.42:38018'}, {_id: 2, host: '10.0.0.43:38018',"arbiterOnly":true}] } rs.initiate(config)
2、部署Config Servers复制集,一主两从,不支持arbiter
· 在3个节点上部署复制集
cat > /mongodb/conf/mongodb.conf <<EOF systemLog: destination: file path: /mongodb/log/mongodb.conf logAppend: true storage: journal: enabled: true dbPath: /mongodb/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 10.0.0.51,127.0.0.1 port: 38018 replication: oplogSizeMB: 2048 replSetName: configReplSet sharding: clusterRole: configsvr #注意角色 processManagement: fork: true EOF
· 初始化集群
mongod -f /mongodb/conf/mongodb.conf mongo --port 38018 use admin config = {_id: 'configReplSet', members: [ {_id: 0, host: '10.0.0.51:38018'}, {_id: 1, host: '10.0.0.52:38018'}, {_id: 2, host: '10.0.0.53:38018'}] } rs.initiate(config)
3、mongos节点配置
cat > /mongodb/conf/mongos.conf <<EOF systemLog: destination: file path: /mongodb/log/mongos.log logAppend: true net: bindIp: 10.0.0.61,127.0.0.1 port: 38018 sharding: configDB: configReplSet/10.0.0.51:38018,10.0.0.52:38018,10.0.0.53:38018 #这里写config servers的信息 processManagement: fork: true EOF
启动mongos
mongos -f /mongodb/conf/mongos.conf #用mongos启动
将2个Shard加入到集群(后面要扩节点的话也是这样操作,先新建复制集,然后addshard)
mongo 10.0.0.51:38018/admin db.runCommand( { addshard : "sh1/10.0.0.41:38018,10.0.0.42:38018,10.0.0.43:38018",name:"shard1"} ) #将之前定义的sh1复制集里的节点加入到cluster中并命名为shard1 db.runCommand( { listshards :1 } ) #查看shard admin > sh.status() #查看分片详细信息
三、使用range和hash进行手动分片
1、MSC集群分为了RANGE分片和HASH分片,要手动设置分片方式的话需要先激活数据库分片功能
mongo 10.0.0.51:38018/dmin admin> db.runCommand( { enablesharding : "linuxe" } ) #激活linuxe这个库的分片
2、使用range方法分片,比如对linuxe库下的table1使用id列分片
use linuxe > db.table1.ensureIndex( { id: 1 } ) #id:1是指按照id从小到大的顺序建立索引 use admin > db.runCommand( { shardcollection : "linuxe.table1",key : {id: 1} } ) #开启分片 # db.runCommand( { shardcollection : "linuxe.table1",key : {id: "hashed"} } ) #使用hash索引
3、在表中录入大量数据后进行查看
use linuxe db.table1.count() #在不同的节点执行命令查看
四、MSC的balancer
这是mongos的一个重要功能,它会自动巡查所有shard节点上的分片情况,自动对数据进行平衡迁移。balancer通常会在系统不繁忙的时候自动运行。但是当发生节点删除的时候,也会触发立即迁移。另外也可以让它只在预设定的时间窗口内运行。
1、关闭和开启blancer的方法(比如备份或者删除节点的时候)
mongos> sh.stopBalancer() mongos> sh.startBalancer()
2、调整时间窗口
#调整时间窗口 use config sh.setBalancerState( true ) db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "1:00", stop : "5:00" } } }, true ) #查询时间窗口 sh.getBalancerWindow() sh.status()
评论