MongoDB复制集数据库拆分和版本升级实战

MongoDB复制集数据库拆分和版本升级实战

问题描述

复制集rs_1上承载了所有的数据库业务,而加内存已经无法满足应用程序压力。

解决方案

考虑拆分复制集rs_1的部分数据库到rs_2,并同时升级数据库版本到2.6。

架构图


准备

评估升级可能性

1. 连接2.6 mongo shell到2.4 复制集辅助成员,在admin库执行db.upgradeCheckAllDBs()。  
2. 评估升级到2.6的应用程序兼容性问题,参考:http://docs.mongodb.org/manual/release-notes/2.6-compatibility/

数据库划分

1. 划分拆分后复制集中数据库成员。  
2. 理清对应的应用,准备好需要更新的链接字符串。

驱动升级

1. C#/.NET 驱动版本需要提前升级到1.9以上。

操作步骤

向复制集rs_1中加入一个2.6版本的Secondary成员

1. 在ReplSet 1中加入2.6版本的Secondary成员(或将现有2.4版本Secondary升级到2.6版本),具体升

级方法,请参见《升级MongoDB到2.6》

2. 根据实际情况,看是否需要加入Arbiter,保证ReplSet 1有基数个成员。  
   rs.addArb("aaaaaa:30000")

将复制集rs_1中的部分数据库拆分到rs_2

1. 将2.6版本的Secondary成员配置新的副本集名称  
   修改配置文件/etc/mongod.conf配置参数replSet=rs_2    
2. 停止该Secondary成员的服务    
   service mongod stop    
3. 删除掉该Secondary成员的oplog    
   cd /data/var/lib/mongodb/local    
   rm -rf local.*    
4. 启动服务    
   service mongod start    
5. 初始化新复制集rs_2    
   rs.initiate()    
   rs.conf()    
   rs.status()    
6. 升级授权架构    
   db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });    
7. 移除复制集rs_1中的该成员    
   rs.conf()    
   rs.remove(‘xxxxxx:27017‘)    
8. 保留复制集rs_2中的数据库成员,删除其他库。    
   use [数据库名]    
   db.dropDatabase();

应用程序修改

1. 修改复制集rs_2中的成员对应的应用程序的链接字符串。

向复制集rs_2添加两个2.6版本的成员

1. 停掉rs_1中的两个Secondary成员的mongod服务  
   service mongod stop    
2. 数据库版本升级到2.6    
3. 删除数据库目录下的数据文件    
4. 修改/etc/mongod.conf配置参数replSet=rs_2    
5. 启动mongod服务    
   service mongod start    
6. 连接新复制集rs_2的Primary的mongo shell添加两个新成员    
   rs.add(‘yyyyyy:27017‘)    
   rs.add(‘zzzzzz:27017‘)    
7. 移除复制集rs_1的yyyyyy和zzzzzz成员    
   rs.conf()    
   rs.remove(‘yyyyyy:27017‘)    
   rs.remove(‘zzzzzz:27017‘)    
8. 检查新复制集rs_2的数据同步状态    
   rs.status()    
9. 为了避免,当数据同步过程中,应用端大量的查询连接请求,导致同步无法完成,可隐藏该

Secondary成员。(可选)  
   cfg = rs.conf()    
   cfg.members[1].priority = 0    
   cfg.members[1].hidden = true    
   rs.reconfig(cfg)    
   注意:members数组索引从0开始。    
10.待数据同步完成后,再取消隐藏。(可选)    
   cfg = rs.conf()    
   cfg.members[1].hidden = false    
   cfg.members[1].priority = 1    
   rs.reconfig(cfg)    
11.若rs_2的Primary硬件配置更好,可修改Primary的优先级。(可选)    
   cfg = rs.conf()    
   cfg.members[0].priority = 23    
   rs.reconfig(cfg)    
12.在忽略9到12步的情况下,若某个Secondary成员的硬件配置更好,希望同步数据完成后,自动选举为

Primary,可在同步数据过程中,修改该成员的优先级。待数据同步完后,会自动切换。(可选)  
   cfg = rs.conf()    
   cfg.members[2].priority = 23    
   rs.reconfig(cfg)

源复制集rs_1升级到2.6版本

1. 移除选举成员。  
   rs.remove(‘aaaaaa:30000‘)    
2. 删除源复制集rs_1中的拆分到rs_2的数据库成员。    
3. 升级复制集rs_1,步骤可参见《升级MongoDB到2.6》《MongoDB升级用户授权数据到2.6格式》

时间: 2024-10-11 07:23:44

MongoDB复制集数据库拆分和版本升级实战的相关文章

MongoDB复制集及数据分片详解

前言 MongoDB是一个由C++语言编写的基于分布式文件存储的数据库,是当前NoSQL数据库中比较热门的一种,旨在为Web应用提供可扩展的高性能数据存储解决方案.本文介绍MongoDB复制集及数据分片. MongoDB 简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.支持的数据结构非常松散,因此可以存储比较复杂的数据类型.最大的特点是其支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询

mongodb复制集的实现

复制集(Replica Sets),是一个基于主/从复制机制的复制功能,进行同一数据的异步同步,从而使多台机器拥有同一数据的都多个副本,由于有自动故障转移和恢复特性,当主库宕机时不需要用户干预的情况下自动切换到其他备份服务器上做主库,一个集群最多可以支持7个服务器,并且任意节点都可以是主节点.所有的写操作都被分发到主节点,而读操作可以在任何节点上进行,实现读写分离,提高负载. 资源有限测试一个VM开3个实例: 环境:centos7.0 192.168.1.21:20011 P 192.168.1

MongoDB复制集原理

版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/136 来源:腾云阁 https://www.qcloud.com/community MongoDB的单实例模式下,一个mongod进程为一个实例,一个实例中包含若干db,每个db包含若干张表.MongoDB通过一张特殊的表local.oplog.rs存储oplog,该表的特点是:固定大小,满了会删除最旧记录插入新记录,而且只支持append操作,因

一步一步教你搭建基于docker的MongoDB复制集群环境

一步一步教你搭建基于docker的MongoDB复制集群环境 1.安装docker 2.创建MongoDB的Image 3.搭建MongoDB的集群 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中. 1.ubuntu14.04安装docker 参考文档 http://docs.docker.com/installation/ubuntulinux/ 参考文档 http://docs.docker.com/mac/started/ pc@pc-Th

MongoDB 复制集

关于读写分离 由于写入主之后,同步到从有一个时间,所以读写分离会引发数据一致性问题. MongoDB 通过复制集(Replica Set)来实现读写分离. MongoDB复制集(Replica Set) 通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用. 当遇到复制集轮转升级.Primary宕机.网络分区等场景时,复制集可能会选举出一个新的Primary,而原来的Primary则会降级为Secondary,即发生主备切换.所以,MongoDB复制集里Primary

MongoDB复制集架构

MongoDB复制集架构 由数据结点,投票结点组成,需要配置集群信息,可自动检测集群中的结点健康状态,当有结点出故障时,自动下线和切换主从结点.适用于数据量较大,高可用服务 通常,为了防止单点故障应用程序需要做集群.然而在数据库中除了防止单点故障,还需要做到数据库备份,读写分离,故障转移等.而 MongoDB 的 Replica Set 恰恰都能满足这些要求. Replica Set角色 Replica Set 的成员是一堆有着同样的数据内容 mongod 的实例集合,包含以下三类角色: 主节点

MongoDB复制集管理优化

本文章将介绍MongoDB复制集的基本配置和管理,分别包括配置从节点可以读取数据.查看复制集状态.更改oplog大小.配置带认证的复制集 复制集的选举原理 复制是基于操作日志oplog,相当于Mysql中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步并应用到其他从节点的过程. 选举的原理 节点的类型分为标准(host)节点.被动(passive)节点和仲裁(arbiter)节点. 标准节点可能被选举为活跃(primary)节点,有选举权. 被动节点有完整副本,不可能成为活

MongoDB复制集(实现选举复制、故障切换、升级oplog大小、认证复制)

什么是复制集? 复制集(replica sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断服务进行恢复. 复制集的优势 让数据更安全. 高数据可用性. 灾难恢复. 无停机维护(如备份.索引重建.故障转移) 读缩放(额外的副本读取) 副本集对应用程序是透明的. 复制集概述 MongoDB复制集是额外的数据副本,复制集提供了冗余和增加数据可用性. MongoDB的复制集至少需要两个节点,其中主节点负责处理客户端请求,从节点负责

MongoDB复制集及管理

MongoDB复制集及管理 MongoDB复制集概述 什么是复制集 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优点如下: 1).让数据更安全:2).高数据可用性:3).灾难恢复:4).无停机恢复(如备份.索引重建.故障转移):5).读缩放(额外的副本读取):6).副本集对应用程序是透明的: 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个是主节点(Primary),负责处理客户