`
xiaoshan5634
  • 浏览: 73981 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

MongoDB Replica Sets

阅读更多

用途

1、数据冗余
2、自动故障转移
3、分发读取负载
4、简化维护(比“正常”的主从)
5、从用户错误的灾难恢复

配置

MongoDB的Replica Set是一个异步的主从复制集,增加了自动故障转移和节点自动恢复功能,它是主/从结构的超级,包含了主/从结构的所有功能。

Replica Set需要最少两个Server,配置最简单的Replica Set可以是两台服务器加一台仲裁服务器或者是三台服务器,仲裁服务器不保存任何数据,只作打破选举用,普通的服务器即可,甚至可以部署在应用服务器上。

以下以三台服务器为例,书写Replica Set的详细配置过程,配置成功之后若PRIMARY宕机或者出现异常,Replica Set会马上切换其中的一台SECORDARY为PRIMARY,这个过程大概在30秒之内,由Replica Set自动完成。

启动三个实例

./
mongod --
replSet foo --
rest --
host 192.168.61.110 --
port 27017
 --
dbpath /
data/
r0
./
mongod --
replSet foo --
rest --
host 192.168.61.111 --
port 27017
 --
dbpath /
data/
r0
./
mongod --
replSet foo --
rest --
host 192.168.61.112 --
port 27017
 --
dbpath /
data/
r0


访问http://192.168.61.110:28017/_replSet ,可以查看replica set情况

注:其他两个地址同样可以访问,以查看Replica Set的状态。

初始化replica set

在192.168.61.110上使用mongo工具连接到MongoDB。

# ./
mongo
>
 rs.initiate
(
)
;

 

增加节点到replica set

>
 rs.add
(
“192.168.61.111:
27017)

{
 “ok” :
 1
 }

>
 rs.addArb
(
“192.168.61.112:
27017)

{
 “ok” :
 1
 }


这样一个基本的Replica Set就算是搭建好了,通过http://192.168.61.110:28017/_replSet ,查看到现在110是PRIMARY(主),111和112都是SECORDARY(从)

测试

在192.168.61.110上使用mongo工具连接到MongoDB

--
连接到MongoDB,使用Shell
# ./
mongo 
>
 db.message
.save
(
{
name:
"Replica Set"
}
)


由于同一时刻只有PRIMARY是可以通过./mongo命令连接,然后进行读写,SECORDARY不允许进行读写的

mongo工具查看Replica Set配置情况的命令

rs.status()//查看ReplSet的状态
rs.conf() //查看ReplSet的配置

读写负载

一般情况下所有的读写都是在primary node上进行的,但是现在大多数的驱动都提供了slaveOk方法,由此可以使用secondary node进行读的负载,从而降低primary node的负载。

List
 addrs =
 new
 ArrayList
(
)
;

addrs.add
(
new
 ServerAddress(
"127.0.0.1"
, 27017)
)
;

addrs.add
(
new
 ServerAddress(
"127.0.0.1"
, 27018)
)
;

addrs.add
(
new
 ServerAddress(
"127.0.0.1"
, 27019)
)
;

Mongo mongo =
 new
 Mongo(
addrs)
;
 
DB db =
 mongo.getDB
(
"test"
)
;

 
collection.slaveOk
(
)
;
  //开启slaveOk,

DBCursor cursor =
 collection.findOne
(
)
;

增加新节点

不能直接将一个新节点使用rs.add()命令增加进去,首先必须拷贝一份数据文件到新节点,使他们之间的时间差不至于太大,因为Replica Set的Oplog是Capped Collection,日志大小有限。
然后再将节点使用rs.add()加入到Replica Set中。

由Master/Slave升级到Replica Set

确定主服务器

>
 db.isMaster
(
)

{

        "ismaster"
 :
 0
,
        "remote"
 :
 "localhost:27018"
,
        "info"
 :
 "direct negotiation"
,
        "maxBsonObjectSize"
 :
 16777216
,
        "ok"
 :
 1

}

 

 

关闭主从的服务

m$ killall mongod
s$ killall mongod

 

备份数据库文件

m$ cp /
data/
db/* /to_somewhere_backup/
s$ cp /data/db/* /to_slave_backup/

 

以Replica Set模式启动主服务器

m$ mongod --
rest --
replSet mysetname
m$ mongo
m>
 rs.initiate
(
)

 

增加节点

方式一:同步Slaves
一、删除数据文件

s$ rm -
r /
data/
db/* # if you're using a non-default dbpath, this may be somewhere else
s$ # /data/db is now empty


二、启动Slave

s$ mongod --
rest --
replSet mysetname


三、增加节点

m>
 // still in the mongo shell on the master

m> rs.add ( "s" ) // "s" is your slave host name

m> rs.status ( ) ; // see also http://localhost:28017/_replSet


方式二、使用现有文件
一、启动Slave

s$ mongod --
rest --
replSet mysetname --
fastsync


二、增加节点

m>
 // still in the mongo shell on the master

m> rs.add ( "s" ) // "s" is your slave host name

m> rs.status ( ) ; // see also http://localhost:28017/_replSet

 

增加arbiter(仲裁)

一、启动节点

arb$ mkdir /
data/
arb
arb$ mongod --
rest --
replSet mysetname --
dbpath /
data/
arb --
port 30000


二、增加仲裁

m>
 rs.addArb
(
"arb:30000"
)
;
 // replace 'arb' with your arb host name

m>
 rs.status
(
)

 

更换相应的驱动

Replica Set开启slaveOk

则查询可能发生在不同的服务器上,为了保证写完之后读能有数据(因为从PRIMARY同步到SECORDARY需要一定的时间),

使用以下代码即可

DB db...;

db.requestStart
(
)
;

code....
db
.requestDone
(
)
;

 

写确定(WriteConcern)

DBCollection coll...;

coll.insert
(
..., WriteConcern.SAFE
)
;

// is equivalent to

DB db...;

DBCollection coll...;

db.requestStart
(
)
;

coll.insert
(
...)
;

DBObject err =
 db.getLastError
(
)
;

db.requestDone
(
)
;
分享到:
评论

相关推荐

    mongodb Replica Sets +Sharding高可用集群搭建

    在大型分布式系统中,为了实现高可用性和水平扩展,MongoDB提供了两种关键特性:副本集(Replica Sets)和分片(Sharding)。这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的...

    Mongodb的ReplicaSets+Sharding架构(window篇)

    MongoDB的Replica Sets+Sharding架构是大数据时代下应对高可用性和可扩展性需求的重要解决方案。本篇文章将深入探讨这两个关键特性在Windows环境下的应用。 **副本集(Replica Sets)** MongoDB的副本集是一种高可用...

    mongodb+replica+sets+intro

    ### MongoDB副本集(Replica Sets)入门:配置与管理 #### MongoDB副本集概念与优势 MongoDB副本集是一种数据冗余和高可用性方案,它通过在多个服务器上复制数据库来提供故障转移、负载均衡以及数据恢复能力。副本...

    Mongodb_集群分片部署

    在实际使用中,为获取高可用、高性能的集群方案,我们会将 Shard Server 部署成 Replica Sets。每个 Shard 就是一个分片,分片最好部署到不同的机器上,这样才能有效解决单台服务器压力过大,或者宕机导致整个应用...

    mongoDB集群部署文档借鉴.pdf

    3. 配置 Replica Sets:配置每个 Shard 的 Replica Sets,例如 Shard1 的 Replica Sets 由 Server1、Server2 和 Server3 组成。 4. 初始化 Replica Set:使用 mongo 连接到其中一个 Mongod 实例,执行 `rs.initiate`...

    MongoDB安装包

    此外,MongoDB还支持复制集(Replica Sets)以实现数据冗余和高可用性,分片(Sharding)以实现水平扩展,以及丰富的聚合框架和地理空间索引,使其在大数据和实时分析场景下表现出色。 在实际应用中,还需要考虑...

    五、MongoDB 学习PPT

    MongoDB的高可用性体现在其复制集(replica sets)功能上,它可以在多个节点间复制数据,确保即使在单个节点故障时也能提供服务。此外,MongoDB的分片(sharding)特性允许将数据分布到多个服务器,以实现水平扩展,...

    MongoDB4.2.21 Linux版本安装包

    4. **Replica sets**:MongoDB支持复制集,这是一种高可用性配置,通过在多个节点间复制数据以确保数据冗余和故障转移。 5. **Sharding**:MongoDB支持水平扩展,通过将数据分片到多个服务器来提高性能和存储能力。...

    MongoDB参考手册.zip_MongoDB_T6U_mongodb中文手册

    此外,还有复制集(Replica Sets),它提供数据冗余和自动故障切换,保证服务的持续可用。 MongoDB还提供了丰富的API和驱动程序,包括MongoDB Shell、命令行工具,以及各种编程语言(如Python、Java、Node.js等)的...

    Mongodb数据库

    1. 配置 shard1 所用的 replica sets: ``` Server1: cd /usr/local/server/mongodb/bin ./bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /usr/local/server/mongodb/data/shard11 --oplogSize ...

    MongoDB Days 2015 深圳 PPT 共享

    4. **复制集**: 复制集(Replica Sets)提供了数据冗余和故障转移,确保在主节点出现故障时,系统仍能正常运行,增强了服务的可用性和数据安全性。 5. **聚合框架**: MongoDB的聚合框架允许开发者执行复杂的分析...

    mongodb.zip

    8. **高可用性**: 副本集(Replica Sets)是MongoDB的一种高可用性机制,它能自动在多个节点之间复制数据,确保数据的冗余和容错。当主节点出现故障时,副本集中的其他节点可以自动接管服务。 9. **安全特性**: ...

    MongoDB添加仲裁节点报错:replica set IDs do not match的解决方法

    在高可用性设置中,MongoDB 使用副本集(Replica Sets)来实现数据冗余和故障转移。副本集中,每个成员都有一个唯一的ID,且所有成员的副本集ID应该相同,以确保它们属于同一个集合。在本文中,我们将探讨如何解决在...

    MongoDB权威指南中文版.pdf

    副本集(replica sets)确保数据高可用和故障转移,分片(sharding)技术则可以水平扩展数据存储。 4. 索引支持:为了提高查询性能,MongoDB允许在文档的任何字段上创建索引,包括复合索引,以支持高效的数据检索。...

    基于Java和Shell脚本的LG-MongoDB-Sharding集群分片设计源码

    本项目为基于Java和Shell脚本开发...项目作为Java训练营作业14的成果,涉及MongoDB集群分片设计,是大型分布式存储系统架构进阶阶段的一部分,旨在深入讲解MongoDB存储原理及replica sets与Sharded Cluster等高级特性。

Global site tag (gtag.js) - Google Analytics