用途
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的副本集和分片集群。 首先,我们来理解一下MongoDB的...
MongoDB的Replica Sets+Sharding架构是大数据时代下应对高可用性和可扩展性需求的重要解决方案。本篇文章将深入探讨这两个关键特性在Windows环境下的应用。 **副本集(Replica Sets)** MongoDB的副本集是一种高可用...
### MongoDB副本集(Replica Sets)入门:配置与管理 #### MongoDB副本集概念与优势 MongoDB副本集是一种数据冗余和高可用性方案,它通过在多个服务器上复制数据库来提供故障转移、负载均衡以及数据恢复能力。副本...
在实际使用中,为获取高可用、高性能的集群方案,我们会将 Shard Server 部署成 Replica Sets。每个 Shard 就是一个分片,分片最好部署到不同的机器上,这样才能有效解决单台服务器压力过大,或者宕机导致整个应用...
3. 配置 Replica Sets:配置每个 Shard 的 Replica Sets,例如 Shard1 的 Replica Sets 由 Server1、Server2 和 Server3 组成。 4. 初始化 Replica Set:使用 mongo 连接到其中一个 Mongod 实例,执行 `rs.initiate`...
此外,MongoDB还支持复制集(Replica Sets)以实现数据冗余和高可用性,分片(Sharding)以实现水平扩展,以及丰富的聚合框架和地理空间索引,使其在大数据和实时分析场景下表现出色。 在实际应用中,还需要考虑...
MongoDB的高可用性体现在其复制集(replica sets)功能上,它可以在多个节点间复制数据,确保即使在单个节点故障时也能提供服务。此外,MongoDB的分片(sharding)特性允许将数据分布到多个服务器,以实现水平扩展,...
4. **Replica sets**:MongoDB支持复制集,这是一种高可用性配置,通过在多个节点间复制数据以确保数据冗余和故障转移。 5. **Sharding**:MongoDB支持水平扩展,通过将数据分片到多个服务器来提高性能和存储能力。...
此外,还有复制集(Replica Sets),它提供数据冗余和自动故障切换,保证服务的持续可用。 MongoDB还提供了丰富的API和驱动程序,包括MongoDB Shell、命令行工具,以及各种编程语言(如Python、Java、Node.js等)的...
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 ...
4. **复制集**: 复制集(Replica Sets)提供了数据冗余和故障转移,确保在主节点出现故障时,系统仍能正常运行,增强了服务的可用性和数据安全性。 5. **聚合框架**: MongoDB的聚合框架允许开发者执行复杂的分析...
8. **高可用性**: 副本集(Replica Sets)是MongoDB的一种高可用性机制,它能自动在多个节点之间复制数据,确保数据的冗余和容错。当主节点出现故障时,副本集中的其他节点可以自动接管服务。 9. **安全特性**: ...
在高可用性设置中,MongoDB 使用副本集(Replica Sets)来实现数据冗余和故障转移。副本集中,每个成员都有一个唯一的ID,且所有成员的副本集ID应该相同,以确保它们属于同一个集合。在本文中,我们将探讨如何解决在...
副本集(replica sets)确保数据高可用和故障转移,分片(sharding)技术则可以水平扩展数据存储。 4. 索引支持:为了提高查询性能,MongoDB允许在文档的任何字段上创建索引,包括复合索引,以支持高效的数据检索。...
本项目为基于Java和Shell脚本开发...项目作为Java训练营作业14的成果,涉及MongoDB集群分片设计,是大型分布式存储系统架构进阶阶段的一部分,旨在深入讲解MongoDB存储原理及replica sets与Sharded Cluster等高级特性。