Replica Sets (复制集)

2024-02-27 13:32
文章标签 复制 sets replica

本文主要是介绍Replica Sets (复制集),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://sheperd.blog.163.com/blog/static/195255119201191233517393/

Replica Sets (复制集)  

2011-10-12 15:35:17|  分类: MongoDB|字号 订阅

       MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只 有一台是用于写操作。正是由于这个情况,为 MongoDB 提供了数据一致性的保障。担当 Primary 角色的机器能把读操作分发给 slave

MongoDB 高可用可用分两种 

Master-Slave 主从复制 :只需要在某一个服务启动时加上–master 参数而另一个服务加上–slave 与–source 参数即可实现同步。MongoDB 的最新版本已不再推荐此方案。

Replica Sets 复制集 MongoDB 在 1.6 版本对开发了新功能 replica set,这比之前的 replication 功能要强大一 ,增加了故障自动切换和自动修复成员节点,各个 DB 之间数据完全一致,大大降低了维 护成功。auto shard 已经明确说明不支持replication paris,建议使用 replica set,replica set 故障切换完全自动。


 



Replica Sets 的结构非常类似一个集群 ,其中一个节点如果出现故障其它节点马上会将业务 接过来而无须停机操作。





部署 Replica Sets

1.1创建数据文件存储路径

分别创建三个存储路径

mkdir -p /data/data/r0

mkdir -p /data/data/r1

mkdir -p /data/data/r2

1.2 创建日志路径

mkdir -p /data/log

1.3 创建主从 key 文件

创建主从 key 文件,用于标识集群的私钥的完整路径,如果各个实例的 key file 内容不一 ,程序将不能正常用。

mkdir -p /data/key

echo "this is rs1 super secret key" > /data/key/r0

echo "this is rs1 super secret key" > /data/key/r1

echo "this is rs1 super secret key" > /data/key/r2

chmod 600 /data/key/r* 权限不正确,会出现too open的异常。

1.4 启动 个实例

APP_PATH=`pwd`

echo $APP_PATH

KEY_PATH=$APP_PATH/replicatset/keyfile

DATA_PATH=$APP_PATH/replicatset

LOG_PATH=$APP_PATH/logs

mongod --replSet rs1 --keyFile "$KEY_PATH/key0" --fork --port 28010 --dbpath "$DATA_PATH/data0" --logpath "$LOG_PATH/r0.log" --logappend

mongod --replSet rs1 --keyFile "$KEY_PATH/key1" --fork --port 28011 --dbpath "$DATA_PATH/data1" --logpath "$LOG_PATH/r1.log" --logappend

mongod --replSet rs1 --keyFile "$KEY_PATH/key2" --fork --port 28012 --dbpath "$DATA_PATH/data2" --logpath "$LOG_PATH/r2.log" –logappend

1.5 配置及初始化 Replica Sets

config_rs1 = {_id: 'rs1', members: [{_id: 0, host: 'localhost:28010', priority:1},{_id: 1, host: 'localhost:28011'},{_id: 2, host: 'localhost:28012'}]}

rs.initiate(config_rs1);

1.6 查看复制集状态

rs.status() 查看复制集状态,还可以用 isMaster 查看 Replica Sets 状态

主从操作日志 oplog

MongoDB 的 Replica Set 架构是通过一个日志来存储写操作的,这个日志就叫做”oplog” oplog.rs 是一个固定长度的 capped collection,它存在于”local”数据库中,用于记录 Replica Sets 操作日志。在默认情况下,对于 64 位的 MongoDB,oplog 是比较大的,可以达到 5%的磁 盘空间。oplog 的大小是可以通过 mongod 的参数”—oplogSize”来改变 oplog 的日志大小。

Replica Sets (复制集) - sheperd - 牧羊人的博客
字段说明:
ts: 某个操作的时间戳
op: 操作类型,如下:
i: insert
d: delete
u: update
ns: 命名空间,也就是操作的 collection name
o: document 的内容



查看 master 的 oplog 元数据信息

Replica Sets (复制集) - sheperd - 牧羊人的博客
 字段说明:
configured oplog size:配置的 oplog 文件大小
log length start to end:oplog 日志的启用时间段
oplog first event time:第一个事务日志的产生时间
oplog last event time:最后一个事务日志的产生时间
now:现在的时间

查看 slave 的同步状态:
Replica Sets (复制集) - sheperd - 牧羊人的博客
 
字段说明:
source:从库的 IP 及端口
syncedTo:目前的同步情况,延迟了多久等信息



主从配置信息

在 local 库中不仅有主从日志 oplog 集合 ,还有一个集合用于记录主从配置信息 system.replset

db.system.replset.find()
Replica Sets 的配置信息,也可以在任何一个成员实例上执行 rs.conf()来查看配置信息

管理维护 Replica Sets

4.1 读写分离

让从库可以读,分担主库的压力 ,在slave上执行db.getMongo().setSlaveOk() 即可。

如果不设置,在slave上查询会报异常。

4.2 故障转移

     复制集比传统的 Master-Slave 有改进的地方就是他可以进行故障的自动转移如果我们停掉 复制集中的一个成员,那么剩余成员会再自动选举出一个成员,做为主库。

4.3 增减节点

4.3.1 增加节点

     rs.add("localhost:28013") ,使用rs.status()查看下rs的状态。

4.3.2 减少节点

     rs.remove("localhost:28014")

这篇关于Replica Sets (复制集)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/752557

相关文章

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL