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

相关文章

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

node快速复制文件或文件夹,排除部分文件(node_modules)

const fs = require('fs')const path = require('path')/*** @description: 获取完整的文件路径* @param {*} url 路径* @return {*} 返回完整的文件路径*/const getPath = (url) => {return path.join(__dirname, url)}/*** @descr

strcpy复制一个字符串

看似很简单的题目,其实有着很多陷阱 首先看一个错误的范例: char  *r; strcpy(r,s); strcat(r,t); 错误在于:r并未指定地址且未赋予内存空间 好了,该如何做呢 首先,肯定得考虑内存的分配 使用malloc   显式调用分配内存 则也得显式调用释放内存free 不多说了 上代码 char *r; r=malloc(strlen(s)+strle

【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题

WPS表格 2019版本 升级到 WPS最新版 WPS-支持多人在线协作编辑Word、Excel和PPT文档_WPS官方网站 使用最新版就能够解决这个问题,如果仍旧无法解决可以勾选如下配置 重启Excel解决。 请勾选:文件 - 选项 - 编辑 - 不提示且不压缩文件中的图像

Java实现mongodb 表复制

String tableName = "";try {// 连接到 mongodb 服务 先查询复制的那张表的数据MongoCredential credential = MongoCredential.createCredential("用户名", "数据库名", "密码".toCharArray());MongoClient mongoClient = new MongoClient(n

mongodb 复制数据库 备份数据库

不得不说mongodbs数据库还是挺折腾人的 //将数据库备份到路径 mongodump --port 端口号 -u 用户名  -p密码 -d 数据库 -o /usr/local/(备份到这个路径) //将数据库导入到Mongodb mongorestore --port 端口号  -u 用户名 -p密码 -d 数据库 --dir /usr/local/文件/(将这个文件导入到数据库)

mongodb 复制表的命令

db.district.find().forEach(function(d){db.getSiblingDB("KeyBox")["district"].insert(d);}); 现在将同一台服务器上的 某数据库的district表复制到KeyBox数据库上,如上写法

赋值函数;复制函数

每个类只有一个赋值函数.   由于并非所有的对象都会使用 拷贝构造函数 和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:    1. 如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String的两个对象a,b为例,假设a.m_data的内容为“h

Mysql复制表结构、表数据

1、复制表结构及数据到新表 CREATE TABLE 新表SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable;来删除。 不过这种方法的一个最不好的地方就是新表中没有了旧表的primary key、Extra(auto_increment)等属性。需要自己用"alter"添加,而且容易搞错。 2、只复制