Mong部署

MongoDB WT 存储引擎部署方案

集群规划

假设集群包含以下服务器

  • 192.168.0.17 Mongo01,以下简称 17

  • 192.168.0.18 Mongo02,以下简称 18

  • 192.168.0.19 Mongo03,以下简称 19

  • 192.168.0.16 Mongo04,以下简称 16

  • 192.168.0.14 Mongo05,以下简称 14

  • 192.168.0.15 Mongo06,以下简称 15

集群模型

组件服务器端口
Mongos17、18、1910000
Cofig Server17、18、1911000
Shard117(master)、16(slave)、14(arbitrate)11001
Shard218(master)、14(slave)、15(arbitrate)11002
Shard319(master)、15(slave)、16(arbitrate)11003

MongoDB 3.4 高可用集群搭建(三)shard 分片

MongoDB分片(Sharding)技术

MongoDB-分片片键

Mongodb3.2.8全面开战之实战篇

部署

  1. 创建目录

17~19

cd /data/mongo && mkdir -p config/{data,log} mongos/log

14~19

cd /data/mongo && mkdir -p shard{1,2,3}/{data,log}
  1. 创建配置文件(检查 mongos.conf 中的 port 和 configDB 以及 shard1.conf、shard2.conf、shard3.conf 中的 port

14~19

mkdir -p /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/conf

17~19 创建 /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/conf/{config.conf,mongos.conf,shard1.conf,shard2.conf,shard3.conf}

config.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongo/config/log/config.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongo/config/data/
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##WT最大使用cache(根据服务器实际情况调节)
   cacheSizeGB: 8
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
##端口配置
net:
 port: 11000
##分片配置
sharding:
##分片角色
 clusterRole: configsvr

mongos.conf

##日志配置
systemLog:
 destination: file
##日志位置
 path: /data/mongo/mongos/log/mongos.log
 logAppend: true
##网路配置
net:
##端口配置
 port: 10000
##分片配置
sharding:
##指定config server
 configDB: 192.168.0.17:11000,192.168.0.18:11000,192.168.0.19:11000

shard1.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongo/shard1/log/shard1.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongo/shard1/data/
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##WT最大使用cache(根据服务器实际情况调节)
   cacheSizeGB: 8
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
##端口配置
net:
 port: 11001
replication:
##oplog大小
 oplogSizeMB: 40960
##复制集名称
 replSetName: shard1
##分片配置
sharding:
##分片角色
 clusterRole: shardsvr

shard2.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongo/shard2/log/shard2.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongo/shard2/data/
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##WT最大使用cache
   cacheSizeGB: 8
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
##端口配置
net:
 port: 11002
replication:
##oplog大小
 oplogSizeMB: 40960
##复制集名称
 replSetName: shard2
##分片配置
sharding:
##分片角色
 clusterRole: shardsvr

shard3.conf

systemLog:
 destination: file
###日志存储位置
 path: /data/mongo/shard3/log/shard3.log
 logAppend: true
storage:
##journal配置
 journal:
  enabled: true
##数据文件存储位置
 dbPath: /data/mongo/shard3/data/
##是否一个库一个文件夹
 directoryPerDB: true
##数据引擎
 engine: wiredTiger
##WT引擎配置
 wiredTiger:
  engineConfig:
##WT最大使用cache(根据服务器实际情况调节)
   cacheSizeGB: 8
##是否将索引也按数据库名单独存储
   directoryForIndexes: true
##表压缩配置
  collectionConfig:
   blockCompressor: zlib
##索引配置
  indexConfig:
   prefixCompression: true
##端口配置
net:
 port: 11003
replication:
##oplog大小
 oplogSizeMB: 40960
##复制集名称
 replSetName: shard3
##分片配置
sharding:
##分片角色
 clusterRole: shardsvr

14~16 创建 /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/conf/{shard1.conf,shard2.conf,shard3.conf}

  1. 启动服务

17

cd /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7 && \
bin/mongod -f conf/config.conf --fork && \
bin/mongos -f conf/mongos.conf --fork && \
bin/mongod -f conf/shard1.conf --fork

18

cd /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7 && \
bin/mongod -f conf/config.conf --fork && \
bin/mongos -f conf/mongos.conf --fork && \
bin/mongod -f conf/shard2.conf --fork

19

cd /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7 && \
bin/mongod -f conf/config.conf --fork && \
bin/mongos -f conf/mongos.conf --fork && \
bin/mongod -f conf/shard3.conf --fork

14

cd /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7 && \
bin/mongod -f conf/shard1.conf --fork && \
bin/mongod -f conf/shard2.conf --fork

15

cd /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7 && \
bin/mongod -f conf/shard2.conf --fork && \
bin/mongod -f conf/shard3.conf --fork

16

cd /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7 && \
bin/mongod -f conf/shard1.conf --fork && \
bin/mongod -f conf/shard3.conf --fork
  1. 配置分片
# shard1
$ /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongo -port 11001 admin
mongos> rs.initiate({_id:"shard1",members:[{_id:0,host:"192.168.0.17:11001"},{_id:1,host:"192.168.0.16:11001"},{_id:2,host:"192.168.0.14:11001",arbiterOnly:true}]});

# shard2
$ /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/bin/mogno -port 11002 admin
mongos> rs.initiate({_id:"shard2",members:[{_id:0,host:"192.168.0.18:11002"},{_id:1,host:"192.168.0.14:11002"},{_id:2,host:"192.168.0.15:11002",arbiterOnly:true}]});

# shard3
$ /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongo -port 11003 admin
mongos> rs.initiate({_id:"shard3",members:[{_id:0,host:"192.168.0.19:11003"},{_id:1,host:"192.168.0.15:11003"},{_id:2,host:"192.168.0.16:11003",arbiterOnly:true}]});

# mongos
$ /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongo -port 10000 admin
mongos> db.runCommand({addshard:"shard1/192.168.0.17:11001,192.168.0.16:11001,192.168.0.14:11001"});
mongos> db.runCommand({addshard:"shard2/192.168.0.18:11002,192.168.0.14:11002,192.168.0.15:11002"});
mongos> db.runCommand({addshard:"shard3/192.168.0.19:11003,192.168.0.15:11003,192.168.0.16:11003"});

通过rs.status()查看分片配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4m2wmCBP-1586339777184)(\images\rs_status.jpg)]

  1. 使分片在 bill 库生效,并对集合 bill 的 msg_id 字段创建哈希片键
$ /data/mongo/mongodb-linux-x86_64-rhel62-3.2.7/bin/mongo -port 10000 admin
mongos> db.runCommand({enablesharding:"bill"})
mongos> db.runCommand({shardcollection:"bill.bill",key:{"msg_id":"hashed"}})

哈希分片的片键只能使用单个字段,不能是复合的。

哈希分片的特点是均匀。好处是使数据均匀分布到各个节点,把“写”的压力分散给集群里更多的服务器,充分扩展“写”的能力。缺点是“读”的节点比较多,查询效率相对较低。

创建分片后 MongoDB 会自动生成该片键的索引,通过sh.status()查看分片信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TvzfBT1-1586339777185)(\images\sh_status.jpg)]

  • 查看分片信息

    mongos> db.shards.find()
    
  • 查看数据库是否启用分片

    db.databases.find()
    

    partitioned 是否启用分片

  1. 关于索引
  • 创建

    替换 COllECTION_NAME

    mongos> db.COllECTION_NAME.createIndex({})
    

    目前生产上 bill 集合使用的索引有:

    mongos> db.COllECTION_NAME.createIndex({"msg_id":"hashed"},{"unique":false,"sparse":true})
    mongos> db.COllECTION_NAME.createIndex({"msg_id":1, "mobile":1, "msgseq":1},{"unique":false,"sparse":true})
    mongos> db.COllECTION_NAME.createIndex({"ec_id":1, "mobile":1, "ap_submit_time":-1},{"unique":false,"sparse":true})
    mongos> db.COllECTION_NAME.createIndex({"status":1},{"unique":false,"sparse":true})
    mongos> db.COllECTION_NAME.createIndex({"ec_id":1, "ap_submit_time":-1},{"unique":false,"sparse":true})
    mongos> db.COllECTION_NAME.createIndex({"international":1},{"unique":false,"sparse":true})
    mongos> db.COllECTION_NAME.createIndex({"ec_id":1,"ap_id":1,"src_type":1,"sms_type":1,"sign_id":1,"src_id":1,"local":1,"status":1,"report":1},{"unique":false,"sparse":true})
    
  • 查询

    mongos> db.COllECTION_NAME.getIndexes()
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kUS6Ka43-1586339777186)(\images\getIndexes.jpg)]

  • 删除

    替换 INDEX_NAME

    INDEX_NAME 由以上查询命令 getIndexes() 获得

    mongos> db.COllECTION_NAME.dropIndex("INDEX_NAME")
    

参考文档

MongoDB 备份与还原 mongodump、mongorestore

Mongo Shell Methods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值