一、复制

复制允许多个数据库服务器共享相同数据的功能,从而确保冗余并促进负载平衡

1、数据冗余及可用性

复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务器出现数据故障而出现数据丢失。通过设置从库,你能在上面进行灾难切换、数据备份、报表服务等。在某些应用场景下,你还能提高读的能力,客户端通过将读和写请求分发到不同的服务器上面。

2、MongoDB复制技术

副本集:一组MongoDB服务器,用于实现复制和自动故障转移。MongoDB推荐的复制策略。

复制集(replica Set)或者副本集,由一组Mongod实例(进程)组成,包含一个Primary节点多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据通过上述方式来保持复制集内所有成员存储相同的数据集,提供数据的高可用性。

 3、 复制集(replica Set)主要作用:

  • Failover (故障转移,故障切换,故障恢复)
  • Redundancy(数据冗余)
  • 避免单点,用于灾难时恢复,报表处理,提升数据可用性
  • 读写分离,分担读压力
  • 对用户透明的系统维护升级

二、复制集

1、副本集中成员

主要包括三个:主节点、副节点、仲裁节点。

在一个副本集群中,对成员个数的最低要求是:一个主节点、一个从节点、一个仲裁节点。但是大多数实际应用中是一个主节点、两个从节点。在3.0版本中一个集群中最多可以达到50个成员,在3.2版本中可以有12个成员。

1)主节点

在一个副本集群中,只能存在一个主节点,接收所有写请求。MongoDB应用写操作到数据文件中并记录操作到日志文件oplog中。从节点成员复制这些oplog日志并应用操作到他们的数据集中。在集群中,所有成员都能接收读请求,但是默认上应用程序的读请求直接被发送到主节点上。当主节点不可用了,这就触发了竞选,会在剩下的从节点中选择一个新节点。在某些情景下,会有两个节点有那么一瞬间认为他们自己是主节点,但是他们最多只有一个能够完成写操作,它就是目前的主库,并且另外一个是前主节点还没有觉察它被降级了,典型的由于是网络分区。当这种情况出现时,连接到前主库的客户端也许会察觉到过期数据,最后进行回滚。

2)从节点

为了复制数据,从节点采用异步的方式,复制主库上的oplog并应用日志中操作到自己的数据集。一个主从集群环境中可以存在多个从库。

3)仲裁者

它没有数据集并且不能成为主库,它的存在可以允许主从复制集群中成员数为奇数,因为它总有一个投票权。

2、副本集部署架构

复制集群的架构能够影响集群的容量及性能。标准的生产环境部署架构是一个具有三个成员的复制集群,能够很好的提供容错和冗余能力。一般而言,我们要避免复杂,凡事根据实际的应用需求设计集群架构。

下面介绍几种常用的架构:

1)具有三成员复制集群

复制集群最低要求需要有三个成员,在三成员架构中,分为一主两从和一主一从一仲裁者。

  • 一主两从模式:当主库不可用,两个从库通过竞选成为新主库
  • 一主一从一仲裁模式:当主库不可用,这个唯一从库将会成为新主库

三、复制集集群的实现(一主两从)

复制集结构图

1.在目录下新建文件夹cluster,再分别新建文件夹shard1

2.shard1文件夹结构如下:其中config是配置文件、db是数据存放地址、log是日志文件

3.shard1目录下每个config文件夹中都有mongod.cfg文件分别如下:

 # mongod.conf

  # for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data.
storage:
dbPath: C:\cluster\shard1\db
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger: # where to write logging data.
systemLog:
destination: file
logAppend: true
path: C:\cluster\shard1\log\mongod.log # network interfaces
net:
port:
bindIp: 0.0.0.0 #processManagement: #security: #operationProfiling: replication:
replSetName: shard1 #sharding:
## Enterprise-Only Options: #auditLog: #snmp:

4.在cluster目录里的bin目录下

新建如下几个bat文件(用于启动不同的MongoDB实例):

具体如下:

5.分别启动三个不同的MongoDB实例表示不同的节点

  • 先运行

  • 再运行

另外两个节点一样顺序启动。

6. 部署复制集集群

  • 初始化主节点,直接使用rs.initiate(),但是显示成员时显示的是主机名
  • 添加两个副节点
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "Server131:27020",
"ok" : ,
"operationTime" : Timestamp(, ),
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
}
}
shard1:SECONDARY> rs.add("192.168.111.135:27020")
{
"ok" : ,
"operationTime" : Timestamp(, ),
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
}
}
shard1:PRIMARY> rs.add("192.168.111.138:27020")
{
"ok" : ,
"operationTime" : Timestamp(, ),
"$clusterTime" : {
"clusterTime" : Timestamp(, ),
"signature" : {
"hash" : BinData(,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong()
}
}
}
shard1:PRIMARY>
  • 这时集群已经建立完毕,member下有3个成员,用rs.conf()

  • 分别在另外两个节点输入rs.status(),可以看见对应节点状态与类型。

注意:SECONDARY是不允许读写的,要使用rs.slaveOk()获得读写权限,可以看出主节点的student数据库已经同步到副节点中

MongoDB DBA 实践4-----创建复制集的更多相关文章

  1. MongoDB DBA 实践6-----MongoDB的分片集群部署

    一.分片 MongoDB使用分片技术来支持大数据集和高吞吐量操作. 1.分片目的 对于单台数据库服务器,庞大的数据量及高吞吐量的应用程序对它而言无疑是个巨大的挑战.频繁的CRUD操作能够耗尽服务器的C ...

  2. MongoDB DBA 实践7-----MongoDB的分片集群操

    一.使用Ranged Sharding对集合进行分片 从mongo连接到的shell中mongos,使用该sh.shardCollection()方法对集合进行分片. 注意: 必须已为集合所在的数据库 ...

  3. MongoDB DBA 实践5-----复制集集群的数据同步和故障转移

    (1)复制集集群的数据同步 1>主节点数据库test,在其中goods集合中加入一个文档. 2>在副节点中查看 注意:SECONDARY是不允许读写的,要使用rs.slaveOk()获得读 ...

  4. MongoDB DBA 实践8-----Linux系统Mongodb分片集群部署

    在Linux系统中,主要是使用命令行进行mongodb的分片集群部署 一.先决条件 mongodb安装成功,明确路径, MongoDB的几个路径: /var/lib/mongodb /var/log/ ...

  5. MongoDB基础之九 replication复制集

    准备工作:创建目录 mkdir -p /home/m17 //home/m18 /home/m19 /home/mlog 1:启动3个实例,且声明实例属于某复制集 # ./bin/mongod --d ...

  6. MongoDB for OPS 02:复制集 RS 配置

    写在前面的话 对于生产环境而言,除非是非常不重要的业务,且该业务允许我们出现一定时间的停机,我们一般才会使用单节点,且该单节点必须要有完善的备份手段. RS 复制集 我们这里采取一主两从的方式搭建复制 ...

  7. MongoDB DBA 实践1-----Windows

    一.先决条件 1.支持的平台 在3.4版中更改: MongoDB不再支持32位x86平台. MongoDB需要x86-64架构并支持以下内容: Windows 7 / Server 2008 R2 W ...

  8. MongoDB DBA 实践2-----常用语句与索引

    一.mongodb常用语句 1.数据库database 1). 查看当前选择的数据库,默认是test 2).有则使用这个数据库,没有就创建 3).查看数据库,默认有admin.local和" ...

  9. MongoDB DBA 实践3-----安装mongdb4.0发生错误

    在安装mongodb时,常常会出现一些错误,导致无法安装完全,下面则是各种错误与它们的解决方法: 1.在window机安装mongodb4.0, 其中的一种:由于缺失系统补丁,而导致无法完全安装,具体 ...

随机推荐

  1. java 分次读取大文件的三种方法

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作.例如 Path path = Paths.get("file path&qu ...

  2. sql语句 查询分组后的每组的第一条或最后一条数据

    select * from(select row_number() over(partition by IDCARD order by DATATM desc) as rownum,* from (S ...

  3. Mysql常用函数汇总-经典实用

    以下是对mysql中的常用函数进行了汇总介绍.需要的朋友可以过来参考下. 一.数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x ...

  4. 沉淀,再出发:python爬虫的再次思考

    沉淀,再出发:python爬虫的再次思考 一.前言    之前笔者就写过python爬虫的相关文档,不过当时因为知识所限,理解和掌握的东西都非常的少,并且使用更多的是python2.x的版本的功能,现 ...

  5. 沉淀,再出发:Docker的功能浅析

    沉淀,再出发:Docker的功能浅析 一.前言 这段时间一直在使用docker,发现docker的技术有很多,从最开始的将自己的程序打包成docker中的镜像,然后上传和下载镜像并使用,再到后来的在集 ...

  6. 8个PHP数组面试题

    1.写函数创建长度为10的数组,数组中的元素为递增的奇数,首项为1. 代码如下: <?php function arrsort($first,$length){ $arr = array(); ...

  7. [Vijos 1768] 顺序对的值

    顺序对的值 描述 给定一个序列a,a中任意两个元素都不等.如果i<j,且a[i]<a[j],则我们称a[i],a[j]为一个顺序对,这个顺序对的值是指a[i+1],a[i+2]…….a[j ...

  8. Java自学之路(新手一定要看)

    Java自学之路(新手一定要看) 转自尚学堂 JAVA自学之路 一:学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游 ...

  9. 创建工程支持scala代码开发

    第一步:idea当中创建创建普通maven工程 File ==> New ==> Project 第二步:修改pom.xml添加scala的版本以及打包插件 <dependencie ...

  10. Google的Python代码格式化工具YAPF详解

    平时习惯了杂乱无章地编写代码,而最后的代码勘定,却依赖于PyCharm自带的格式化工具,以及其自带的提示功能来规范代码.而pycharm里的格式化工具,不支持对多文件进行代码批量格式化,曾经尝试些解决 ...