设为首页 收藏本站
查看: 1033|回复: 0

[经验分享] MongoDB迁移方案-冷备份+增量备份恢复

[复制链接]

尚未签到

发表于 2018-10-25 11:43:40 | 显示全部楼层 |阅读模式
  QQ群:465614686

  •   1.  环境构建步骤
  (1)线上环境
  都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop、spark数据同步使用以及数据报表查询等)
  (2)主机以及配置说明

  •   10.21.18.21  primary节点    优先级为100
  •   10.21.18.22  secondary节点  优先级为90
  •   10.21.18.23  secondary节点  优先级为80
  •   10.21.18.24  隐藏节点       优先级为0
  系统配置:128G内存,64Core CPU,2TB SSD硬盘
  (3)MongoDB版本
  percona-server-mongodb-3.0.12-1.8
  (4)数据量
  目前该副本集数据量为1.3TB;
  单个集合最大数据量目前为6.7亿+,超过5亿+的集合有11张,超过2亿+的集合有27个;
  没有做sharding集群,副本集支撑现有业务;
  (5)参数配置
  几台服务器配置完全一样
  vim mguserinfo.conf
  # fordocumentation of all options, see:
  #  http://docs.mongodb.org/manual/reference/configuration-options/
  # where to writelogging data.
  systemLog:
  destination: file
  logAppend: true
  logRotate: reopen
  path: /data/users/mgousr01/mongodb/logs/userinfo01.log
  # Where and howto store data.
  storage:
  dbPath: /data/users/mgousr01/mongodb/dbdata
  journal:
  enabled: true
  directoryPerDB: true
  engine: wiredTiger
  #########storage.wiredTigerOptions
  wiredTiger:
  engineConfig:
  cacheSizeGB: 64
  directoryForIndexes: true
  indexConfig:
  prefixCompression: true
  ##########operationProfilingOptions
  operationProfiling:
  slowOpThresholdMs: 50
  mode: "all"
  ########ProcessManagementOptions
  processManagement:
  fork: true
  pidFilePath:/data/users/mgousr01/mongodb/dbdata/userinfo01.pid
  # networkinterfaces
  net:
  port: 28010
  #bindIp:
  maxIncomingConnections: 27600
  security:
  keyFile:/data/users/mgousr01/mongodb/etc/keyFile/keyFilers0.key
  #operationProfiling:
  ##########replicationOptions
  replication:
  replSetName: userRS
  oplogSizeMB: 95360
  secondaryIndexPrefetch: all
  #sharding:
  #clusterRole: shardsvr    #configsvr or shardsvr
  ##Enterprise-Only Options
  #auditLog:
  #snmp:
  setParameter:
  enableLocalhostAuthBypass: true
  #replWriterThreadCount: 32
  #wiredTigerConcurrentReadTransactions: 1000
  #wiredTigerConcurrentWriteTransactions: 1000
  注意说明
  keyFilers0.key表示认证文件,需要自己生成;权限为 600 否则启动失败,几台key也都是一样。
  先将security和keyFile参数注释,待如下(6)(7)(8)操作完毕后,在将security和keyFile参数注释去掉即可。
  (6)启动
  mongod –f mguserinfo.conf
  (7)配置副本集的方法
  a.  登陆10.21.18.21主机操作
  >config={_id:"userRS",members:[{_id:1,host:"10.21.18.21:28010",priority:100,tags:{'use':'usersinfo-01-312'}}]}
  > rs.initiate(config)
  b.  添加节点
  userRS:PRIMARY> rs.add({_id:2,host:"10.21.18.22:28010", priority:90,tags:{'use':'usersinfo-02-312'}})
  userRS:PRIMARY>rs.add({_id:3, host:"10.21.18.23:28010", priority:80,tags:{'use':'usersinfo-03-312'}})
  userRS:PRIMARY>rs.add({_id:5, host:"10.21.18.24:28010", priority:0,hidden:true,tags:{'use':'usersinfo-03-312-hidden'}})
  (8)创建用户
  use admin
  db.createUser(
  {
  user: "admin",
  pwd: "123456",
  roles:
  [
  {role: "userAdminAnyDatabase",db: "admin"},
  { role: "readAnyDatabase", db:"admin" },
  { role: "dbOwner", db:"admin" },
  { role: "userAdmin", db:"admin" },
  { role: "root", db: "admin"},
  { role: "clusterMonitor", db:"admin" },
  { role: "dbAdmin", db:"admin" },
  ]
  }
  )
  用户名为admin,密码为123456

  •   2.  如何实现增量备份
  (1)上述环境是我们线上的生产环境
  (2)将其中一个secondary节点关闭
  我选择了10.21.18.22:28010主机节点
  a.  登陆主节点操作如下
  rs.remove("10.21.18.22:28010");
  从现有集群中移除该节点
  b.  shutdownmongod进程
  登陆10.21.18.22主机将mongod进程shutdown
  mongod –f mguserinfo.conf --shutdown
  (3)参数调整
  将10.21.18.22:28010该节点参数中的replSetName和keyfile以及security注释,并启动到单节点模式(以减少应用业务访问或者链接没有释放的线程,选择了业务最低峰凌晨3点操作,如果不及时操作的话,将该节点设置为隐藏节点即可,然后在进行后续操作)
  启动:
  mongod –f mguserinfo.conf
  (4)登陆到该节点做如下操作
  a.  mongo10.21.18.22:28010
  > use admin
  >db.system.version.find()
  { "_id" : "authSchema", "currentVersion" :5 }
  b.  当前认证级别为5,将其修改为3
  >db.system.version.update({ "_id" : "authSchema"},{$set: {"currentVersion" : 3} })
  c.  重启
  将10.21.18.22:28010该节点参数中的replSetName和keyfile以及security注释去掉;启动即可
  mongod –f mguserinfo.conf –shutdown
  mongod–f mguserinfo.conf
  这样该节点又加入到该集群中
  (5)切换primary节点
  切换现有primary节点到10.21.18.22secondary主机
  a.  调整优先级
  将10.21.18.21主机mongodb primary节点的优先级修改为85即可
  b.  操作命令
  cfg =rs.conf()
  cfg.members[1].priority= 85
  rs.reconfig(cfg)
  核心提示:我的主机节点members是1,下标从0开始。大家操作时需要仔细观察自己环境的配置,以免带来不必要的麻烦。
  (6)主节点创建备份用户
  根据调整优先级,已将primary节点切换到10.21.18.22主机
  登陆22主机
  use admin
  db.createUser(
  {
  user: "bakinc",
  pwd: "Uk#R$K25A9",
  roles:
  [
  {role:"userAdminAnyDatabase", db: "admin"},
  { role:"readAnyDatabase", db: "admin" },
  { role: "dbOwner",db: "admin" },
  { role:"userAdmin", db: "admin" },
  { role: "root", db:"admin" },
  { role: "dbAdmin",db: "admin" },
  ]
  }
  )

  •   3.  冷备份
  --将隐藏节点主机shutdown
  a.  登陆主节点操作如下
  rs.remove("10.21.18.24:28010");
  从现有集群中移除该节点
  b.  登陆10.21.18.24主机将mongod进程shutdown
  mongod –f mguserinfo.conf --shutdown
  c.  将数据目录dbdata全部copy到上海数据中心使用nohup后台copy
  d.  记录shutdown时的时间点
  e.  数据copy完后,将该节点启动,加入副本集模式中
  mongod –f mguserinfo.conf
  将隐藏节点shutdown的原因是因为隐藏节点不会接受到业务处理的线程数据。

  •   4.  增量备份
  a.  使用mongobackup 在primary节点操作备份oplog即可
  mongo_inc.sh内容如下
  #!/bin/bash
  DATA1=`date+%Y%m%d%H%M%S`  #当前时间
  DATA2=`date +%s`
  DATA3=`echo$((${DATA2}-10860))`  #当前时间减去 3个小时零1分多备份恢复之后的一分钟数据,以免有写数据没有恢复到目标主机
  echo $DATA2
  echo $DATA3
  /data/mongodb/users/mgousr02/mongobackup-h10.21.18.22 --port 28010 -u bakinc -p " Uk#R$K25A9"--authenticationDatabase admin
  --backup -s ${DATA3},0  -t${DATA2},0 -o backup${DATA1}
  该脚本是每天生成一个备份目录,有可以几个小时备份一次,根据自己的业务来。
  b.  增量恢复
  将备份文件scp到目标主机进行
  ./mongobackup -h10.66.168.68 --port 28010 --recovery   -s 1475031191,0  -t 1475032271,0  ./backup20160928110254
  说明:-s是开始时间,-t是结束时间
  c.

  •   5.  问题说明
  不修改system.version集合,进行备份出现如下错误:
  查看日志,发现有一句:Failed to authenticate admin@admin with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document
  在一个国外网站发现原来还是mongodb数据库的版本问题,查询版本
  解决思路:在非权限验证状态下  首先,删除已有用户并;其次,修改version表的currentVersion,功能后在重新创建用户;当然也可以不删除之前的用户。

  •   6.  测试数据
  (1)   for(var i=1;i

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626317-1-1.html 上篇帖子: MongoDB_3.2.7 主从部署 下篇帖子: MongoDB根据时间aggregate示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表