mongodb高可用架构

https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/

复制是跨多个服务器同步数据的过程。

复制提供冗余,并通过不同数据库服务器上的多个数据副本增加数据可用性。

复制保护数据库免受单个服务器的丢失。

复制还允许从硬件故障和服务中断中恢复。

使用其他数据副本,可以将其专用于灾难恢复,报告或备份。

为什么复制?

  • 保持数据安全
  • 数据的高可用性(24 * 7)
  • 灾难恢复
  • 维护无停机(如备份,索引重建,压缩)
  • 读取缩放(额外的副本可读)
  • 副本集对应用程序是透明的

副本集角色

主节点、读写
副本节点、同步主节点数据
仲裁节点、非必须、不存储数据,不竞主,只投票

什么是副本集

MongoDB通过使用副本集来实现复制。

副本集是托管相同数据集的一组 mongod 实例。

在一个副本中,一个节点是接收所有写操作的主节点。

所有其他实例(例如辅助节点)都应用主节点的操作,以便它们具有相同的数据集。

副本集可以只有一个主节点。

  • 副本集是一组两个或多个节点(通常最少需要3个节点)。
  • 在副本集中,一个节点是主节点,其余节点是次要节点。
  • 所有数据从主节点复制到辅助节点。
  • 在自动故障切换或维护时,选择为主节点建立,并选择新的主节点。
  • 恢复故障节点后,它再次加入副本集,并作为辅助节点。

显示了MongoDB复制的典型图,客户端应用程序始终与主节点进行交互,然后主节点将数据复制到辅助节点。

部署副本集



mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}
mkdir -p /data/mongo_2801{7,8,9} cat >/opt/mongo_28017/conf/mongodb.conf <<EOF
systemLog:
destination: file
logAppend: true
path: /opt/mongo_28017/log/mongodb.log storage:
journal:
enabled: true
dbPath: /data/mongo_28017
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.5
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true processManagement:
fork: true
pidFilePath: /opt/mongo_28017/pid/mongod.pid net:
port: 28017
bindIp: 127.0.0.1,10.0.0.17 replication: # 开启主从复制
oplogSizeMB: 1024 # 类似binlog日志的大小单位,1GB
replSetName: dba # 副本集名
EOF # 复制3个实例,区分端口号
cp /opt/mongo_28017/conf/mongodb.conf /opt/mongo_28018/conf/
cp /opt/mongo_28017/conf/mongodb.conf /opt/mongo_28019/conf/ # 启动3个mongodb实例
sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongodb.conf
sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongodb.conf
mongod -f /opt/mongo_28017/conf/mongodb.conf
mongod -f /opt/mongo_28018/conf/mongodb.conf
mongod -f /opt/mongo_28019/conf/mongodb.conf # 检查3个实例
ps -ef|grep mongo
netstat -lntup|grep mongo

登录mongo副本集

1. 修改配置文件,以副本集模式启动多实例

2. 初始化副本集 28017 作为主节点
https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/#initiate-the-replica-set mongo --port 28017 # 只需要在一个节点执行,其他节点自动加入 rs.initiate(
{
_id: "dba",
version: 1,
members: [
{ _id: 0, host : "10.0.0.17:28017" },
{ _id: 1, host : "10.0.0.17:28018" },
{ _id: 2, host : "10.0.0.17:28019" }
]
}
)

该方法是官网推荐的模式,存在选举时间

查看副本集状态

rs.status()
# rs是管理集群的命令

从库开启slve


不开启会提示报错,读的权限都没用,slave状态不正确 dba:SECONDARY> show dbs;
2022-10-17T17:11:47.201+0800 E QUERY [js] uncaught exception: Error: listDatabases failed:{
"operationTime" : Timestamp(1665997900, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotPrimaryNoSecondaryOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1665997900, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:147:19
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:99:12
shellHelper.show@src/mongo/shell/utils.js:906:13
shellHelper@src/mongo/shell/utils.js:790:15
@(shellhelp2):1:1
dba:SECONDARY>

开启方式

echo "rs.slaveOk()" > ~/.mongorc.js

测试副本集

主库写入数据

dba:PRIMARY> db.myblog.insertOne({"website":"www.yuchaoit.cn"})
{
"acknowledged" : true,
"insertedId" : ObjectId("634d1c065705b0c66b18384a")
}
dba:PRIMARY> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
dba:PRIMARY> db.myblog.find()
{ "_id" : ObjectId("634d1c065705b0c66b18384a"), "website" : "www.yuchaoit.cn" }
dba:PRIMARY>

从库只读权限

副本集常用命令

rs.config()
rs.status()
rs.isMaster()
dba:PRIMARY> rs.printReplicationInfo()
configured oplog size: 1024MB
log length start to end: 1430secs (0.4hrs)
oplog first event time: Mon Oct 17 2022 16:53:20 GMT+0800 (CST)
oplog last event time: Mon Oct 17 2022 17:17:10 GMT+0800 (CST)
now: Mon Oct 17 2022 17:17:13 GMT+0800 (CST)
dba:PRIMARY> 查看从库信息
dba:PRIMARY> rs.printSlaveReplicationInfo()
WARNING: printSlaveReplicationInfo is deprecated and may be removed in the next major release. Please use printSecondaryReplicationInfo instead.
source: 10.0.0.17:28018
syncedTo: Mon Oct 17 2022 17:17:20 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 10.0.0.17:28019
syncedTo: Mon Oct 17 2022 17:17:20 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
dba:PRIMARY> # 最新命令 dba:PRIMARY> rs.printSecondaryReplicationInfo()
source: 10.0.0.17:28018
syncedTo: Mon Oct 17 2022 17:17:37 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
source: 10.0.0.17:28019
syncedTo: Mon Oct 17 2022 17:17:37 GMT+0800 (CST)
0 secs (0 hrs) behind the primary
dba:PRIMARY>

副本集故障转移

1. 关闭主库
[root chaoge-linux /data/mongo_27017]#mongod -f /opt/mongo_28017/conf/mongodb.conf --shutdown
killing process with pid: 9492 ## 2.查看副本集信息
rs.status()
rs.config() 3.查看新的复制关系

新的主从关系

从库权重调整

了解即可

myconfig=rs.conf()
myconfig.members[0].priority=100 // 选择第几个成员,设置优先级
rs.reconfig(myconfig) // 重新加载配置 # 主动降级优先级,从主库,降到从库
rs.stepDown() # 恢复配置
myconfig=rs.conf()
myconfig.members[0].priority=1
rs.reconfig(myconfig)

增加节点

增加节点和删除节点
1.创建新节点
mkdir -p /opt/mongo_28010/{conf,log,pid}
mkdir -p /data/mongo_28010
cp /opt/mongo_28017/conf/mongodb.conf /opt/mongo_28010/conf/
sed -i 's#28017#28010#g' /opt/mongo_28010/conf/mongodb.conf
mongod -f /opt/mongo_28010/conf/mongodb.conf
mongo --port 28010 2.集群加入新节点,只能在主库加
rs.add("10.0.0.17:28010") 3.删除节点
rs.remove("10.0.0.17:28010")

副本集replicaSet的更多相关文章

  1. k8s初面考点ReplicaSet副本集极限9连击你懂了吗?

    k8s初面考点ReplicaSet副本集极限9连击你懂了吗? k8s考点灵魂拷问9连击 考点之简单描述一下k8s副本集ReplicaSet有什么作用? 考点之为什么ReplicaSet将取代Repli ...

  2. mongodb配置副本集(多台服务器间的副本集搭建) replica[ˈrɛplɪkə]

    副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多副本存在,并且解决了“主节点挂掉了,整个集群内会自动切换”的问题.我们来看看mongoDB副本集的架构图: 由图可以看到客户端连接到整个副本集 ...

  3. spring配置mongodb连接副本集多个节点

    mongodb版本3.4.x 1.配置副本集 先配置副本集,可参考我之前写的文章:http://blog.csdn.net/fuck487/article/details/78287362 注意:必须 ...

  4. MongoDB学习笔记——Replica Set副本集

    副本集 可以将MongoDB中的副本集看作一组服务器集群由一个主节点和多个副本节点等组成,相对于之前讲到的主从复制提供了故障自动转移的功能 副本集实现数据同步的方式依赖于local数据库中的oplog ...

  5. MongoDB 副本集的原理、搭建、应用

    概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...

  6. 修改mongodb3.0副本集用户密码遇到的坑

    最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题. 在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mon ...

  7. mongo(五)副本集

    mongo(五)副本集 配置文件 1-3为三个存储节点,其实一个为Primary,两个secondary作为备份,4为仲裁节点 # mongod.conf #where to log logpath= ...

  8. Mongodb3.0.5副本集搭建及spring和java连接副本集配置

    这是去年写的一篇文档,最近突然发现并没有发不出来,因此现在补上,希望能对某些朋友有所帮助.因为当时记录时没有截图,因此这里看起来可能就比较单调. 一.基本环境: mongdb3.0.5数据库 spri ...

  9. Mongodb4.0副本集构建

    目前最新的mongodb4.0.2已经支持事务这个重要特性,需要使用的话必须是复制或副本集,这是第一篇先研发如何构建副本集,因为副本集是目前最低成本的高可用群集方式. 1.准备三台服务器,本次使用是的 ...

  10. MongoDB副本集功能及节点属性梳理

    副本集的主要功能 副本集是MongoDB高可用的基础,其主要作用 归纳为以下几点: (1)高可用,防止设备(服务器.网络)故障.提供自动FailOver功能. (2)无需配置高可用性虚拟节点:无论是S ...

随机推荐

  1. [ARC174B] Bought Review 题解

    [题目描述] 你开了一家店,有 \(A_i\) 个 \(i\) 星级评论,你可以花费 \(P_i\) 元买到一个 \(i\) 星评论,问使得这家店评论的星星平均值不小于 \(3\),最少要花多少钱. ...

  2. Java 应用压测性能问题定位经验分享

    简介: 问题千千万,但只要修练了足够深厚的内功,形成一套属于自己的排查问题思路和打法,再加上一套支撑问题排查的工具,凭借已有的经验还有偶发到来的那一丝丝灵感,相信所有的问题都会迎刃而解. 作者:凡勇 ...

  3. 阿里云荣获可信云容器安全能力先进级认证, ACK/ACR为企业级安全护航

    阿里云关注企业级用户的Kubernetes生产落地痛点,结合企业生产环境的大量实践,全面帮助企业真正落地云原生架构.安全侧问题,是众多大中型或金融领域企业的核心关注点. 端到端云原生安全架构 早在20 ...

  4. 使用MQTT与函数计算做热力图的实践

    简介: 在各类场景中,关于上报数据的处理无处不在,而以上提到的场景都可以通过本方案的MQTT+FC+API Gateway的方式参考优化来实现. 前言 最近几年,我们在一些商场.图书馆.机场或港口环境 ...

  5. Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞

    ​简介:Dataphin,用中台方法论打造企业级好数据.Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出,一站式提供数据采.建.管.用全生命周期的大数据能力,以助力企业显著 ...

  6. [PPT] WPS 提取 PPT 中的母版到另一份 PPT 中

    1. 打开 PPT. 2. 视图 - 幻灯片母版,在第一个 ppt 上面 "鼠标右键 - 复制" 来进行拷贝. 3. 打开目标 PPT,视图 - 幻灯片模板,快捷键 Ctrl + ...

  7. 259k+ Star!这是我见过最全的开发者技术学习路线!

    大家好,我是 Java陈序员. 自从上班后,身体是一天不如一天了,也很少有时间可以去学习新技术了.程序员如果技术跟不上,很容易就被淘汰. 而碎片化的学习效率又不高,往往今天学了,明天就忘了.有时候更是 ...

  8. ruby执行周期性任务 whenever

    ruby执行周期性任务 下面看看怎么将任务写入cron服务. $ whenever #不带参数的whenever会显示转换程cron任务的代码,不写入cron任务表 $ whenever -w #写入 ...

  9. 深度学习框架火焰图pprof和CUDA Nsys配置指南

    注:如下是在做深度学习框架开发时,用到的火焰图pprof和 CUDA Nsys 配置指南,可能对大家有一些帮助,就此分享.一些是基于飞桨的Docker镜像配置的. 一.环境 & 工具配置 0. ...

  10. Win10-常用cmd命令与快捷键

    以下全部是本人私认为平时经常用到的指令,持续更行中- 常用快捷键 win + R : 输入cmd回车,打开命令提示符界面 win + E : 打开文件资源管理器(俗称:文件夹) win + S : 搜 ...