mongodb常用配置及维护

  1. 配置:
    常用配置如下:
    配置示例
    net:
      port: 27017 ##监听端口
    systemLog:
        destination: file
        path:  "mongod.log" ##日志文件存放位置
        logAppend:  true ##追加模式写日志
    storage:
        engine: wiredTiger ##数据引擎类型,强烈推荐wiredTiger
        dbPath: /data/soft/mongodb-3.2.1/data ##数据存放位置
        journal:
           enabled:  true ##生产环境强烈推荐打开
        wiredTiger:
           engineConfig:
              cacheSizeGB: 2 ##引擎缓存大小,3.4版本开始,默认值为:(内存的一半-1G)或256M,取最大的那个
              statisticsLogDelaySecs: 3600 ##日志刷新间隔
              journalCompressor: snappy ##日记压缩方式,允许的值:none,snappy,zlib
              directoryForIndexes:  false ##子目录存储索引和数据
           collectionConfig:
              blockCompressor: snappy ##数据文件压缩方式,允许的值:none,snappy,zlib
    processManagement:
        fork:  true ##后台方式运行数据库进程
    replication:
       oplogSizeMB: 2048 ##副本集操作日志大小,值越大,允许的宕机时间就越多,否则一旦某台机器宕机时间过大,会导致超过操作日志大小的那部分数据无法同步
       replSetName: candao_release ##副本集名称
    sharding:
       clusterRole: shardsvr ##分片群集中的身份
    security:
        keyFile: /data/soft/mongodb-3.2.1/mongo-key ##集群间用于通信的安全密钥文件
        clusterAuthMode:  "keyFile" ##集群认证模式
        authorization:  "enabled" ##是否开启用户认证
  2. 客户端的读写策略:
    用户端访问分片的 mongos 跟访问单个 mongod 类似,所有 mongos 是对等关系,用户访问分片集群可通过任意一个或多个mongos。
    mongos 本身是无状态的,可任意扩展,集群的服务能力为『Shard服务能力之和』与『mongos服务能力之和』的最小值。
    访问分片集群时,最好将应用负载均匀的分散到多个 mongos 上。
    所有官方的driver都支持以 Connection String 的方式来连接 MongoDB 副本集或分片集群。
    Connection String的格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
    • mongodb:// 前缀,代表这是一个Connection String
    • username:password@ 如果启用了鉴权,需要指定用户密码
    • hostX:portX 多个 mongos 的地址列表
    • /database 鉴权时,用户帐号所属的数据库
    • ?options 指定额外的连接选项,在options里添加readPreference=secondaryPreferred即可实现读请求优先到Secondary节点,从而实现读写分离的功能。更多读选项
    • readPreference值说明:

      读模式
      说明
      primary默认值,所有请求都从primary读取
      primaryPreferred所有请求都从primary读取,当primary不可用时, 从secondary读取
      secondary所有请求都从secondary读取
      secondaryPreferred所有请求都从secondary读取,当secondary不可用时, 从primary读取
      nearest所有请求都从最近(通信延迟最低)的成员读取,而不管其类型为primary或secondary


    写策略:
        写策略有如下参数字段: { w: <value>, j: <boolean>, wtimeout: <number> }

    参数值
    说明
    w

    指定本次操作需要写入到集群的多少台机器后才算写入成功,默认值:1

    当w>1时,本次写入需要给定值数量的机器都返回成功后本次写入才算成功 w=majority时,写到大多数机器才算成功(性能会有所影响),这个值根据副本集内有投票权的机器数量决定(数量足够完成一次选举),适合对可靠性要求非常高的场景
    j

    标识是否需要将本次写入同步到日记文件后才算成功

    wtimeout

    本次写入的超时时间

    在JAVA客户端驱动内,可以这样指定写策略: MongoClient.setWriteConcern(WriteConcern.xxxx);

  3. 备份
    方式
    说明
    文件快照文件快照是最简单的备份方法,不过需要文件系统本身支持快照技术,以及配置中打开了日记功能(journal) 参见:如何创建文件快照
    复制data目录在没有文件快照支持的情况下,可以使用这种试,注意复制时,需要禁止数据库的写入 可以使用如下命令:db.fsyncLock()/db.fsyncUnlock()对数据库进行锁定和解锁 恢复时,只需要把原目录删除或移走,然后将备份的文件放到数据目录既可。
    mongodump官方提供的一种备份工具,速度较慢,但可以单独备份指定的库或集合。

    目前我们的备份脚本如下:

    #!/bin/sh
    DATE=` date +%Y%m%d`
    DEL_DATE=$( date -d  '-3 days' "+%Y%m%d" )
    HOST=127.0.0.1
    PORT=27017
    USER=root
    PASSWORD=密码
    DATA_DIR= "/data/soft/mongodb-3.2.1/data"
    BACKUP_PATH= "/data/mongodbbackup/$DATE"
    LOG_FILE= "/data/mongodbbackup/mongoback.log"
    DEL_PATH= "/data/mongodbbackup/${DEL_DATE}/"
    date +%Y%m%d%H%M >>$LOG_FILE
    echo "创建备份目录$BACKUP_PATH ..."
    mkdir -p $BACKUP_PATH
    #第一步锁表
    lock()
    {
    echo "db.fsyncLock()" |  . /mongo --host $HOST --port $PORT -u $USER -p $PASSWORD  admin
    }
    execute()
    {
       lock
       if [ $? - eq 0 ]
       then
         echo "mongodb lock successfully!" >>$LOG_FILE
       else
         echo "mongodb lock fail!" >>$LOG_FILE
       fi
    }
    execute
    #第二步备份
    back()
    {
    rsync -av $DATA_DIR $BACKUP_PATH/
    }
    execute()
    {
       back
       if [ $? - eq 0 ]
       then
         echo "mongodb back successfully!" >>$LOG_FILE
       else
         echo "mongodb back fail!" >>$LOG_FILE
       fi
    }
    execute
    #第三部解锁
    unlock()
    {
    echo "db.fsyncUnlock()" |  . /mongo --host $HOST --port $PORT -u $USER -p $PASSWORD  admin
    }
    execute()
    {
       unlock
       if [ $? - eq 0 ]
       then
         echo "mongodb unlock successfully!" >>$LOG_FILE
       else
         echo "mongodb unlock fail!" >>$LOG_FILE
       fi
    }
    execute
    #删除历史数据
    rm -rf $DEL_PATH
     
    #将以上脚本保存为backup.sh,在命令行输入:
    $> crontab -e
    #在打开的文件中输入:
    0 3 * * * sh  /data/soft/mongodb-3 .2.1 /bin/backup .sh   #每天凌晨3点执行备份
    #保存并退出
  4. 性能监控
    a.打开数据库profiling:db.setProfilingLevel(level, slowms)

    参数
    类型
    值说明
    参数
    类型
    值说明
    levelinteger0关闭profiling,1仅输出慢操作,2输出所有操作(影响性能)
    slowmsinteger大于等于此值,则会被判定为慢操作

    b.耗时操作的处理:
       查看当前操作:db.currentOp(),可以传ture或者一个查询对象做为参数
          当传ture时:只统计未关闭连接的操作和系统操作 
          当传对象时:和普通查询一样,返回匹配的操作结果
          返回值:
              重点关注以下几个参数:

    名称
    说明
    opid
    操作ID
    secs_running
    已运行时间
    op
    操作类型,可能的值有:

    "none"
    "update"
    "insert"
    "query"
    "getmore"
    "remove"
    "killcursors"

    ns
    对应的集合命名空间,如:datacenter_release.order
    query
    操作所使用的查询条件
    planSummary
    查询的执行计划(此处可以看到是否有用到索引和所用的索引名称)

       找到慢操作后,可以使用:db.killOp(opid)关闭慢操作

转载于:https://www.cnblogs.com/xjf721/p/6479203.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值