MongoDB副本集的搭建和管理(高可用)
使得mongodb具备自动故障转移、高可用、读写分离。
副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离。
使用pymongo的时候也可以设置,还可以动态设置库、集合的readPreference。详细的后面再写。。。
如果主节点不可用,副本集会选择一个辅助节点作为主节点并继续正常运行。旧的主节点在可用时会重新加入集合。
副本集搭建可以参考官方教程:
https://www.mongodb.com/docs/manual/administration/replica-set-deployment/
如果是需要将现有的mongodb实例转换为副本集,看这里:
副本集中的节点角色可以有下面几种:
- 主节点
- 副节点
- 仲裁器节点(仲裁者参与选举,但不保存数据,即不提供数据冗余)
- 仲裁节点的使用场景:你有一个主、副节点,但是你的服务器又不够硬件支撑你再添加一个副节点(因为副节点也是池不少硬件的),此时你可以添加一个仲裁器。仲裁器参与主节点的选举,但仲裁器没有数据集的副本,因此无法成为主节点。
需要注意的是:
- 仲裁节点不要和主节点和副节点运行在统一个系统上!!!
- 仲裁器节点不要添加多个,容易出现数据一致性问题。降低写入时的可靠使用性。
- 副本集建议使用单数,3、5、7这样的.....
副本集的搭建至少要有3个节点,可以是:1主2从(官方推荐),或者:1主1从1仲裁
副本集搭建实例(1主2从)
- 创建3个实例的数据存储目录,因为我都放在同一台机器上了,所以要区分一下目录。生成环境不可能将成员实例都放在同一台机器上的。
mkdir data-master
mkdir data-slave01
mkdir data-slave02
修改3个实例的配置文件
这里测试用,所以都放在同一台机器上了,注意修改端口为不一样的。
主节点master:
# Where and how to store data.
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# 副本集配置
replication:
#副本集的名称
replSetName: "myrs"
**副节点1:**
# mongod-salve01.conf
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data-slave01
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod-slave01.log
# network interfaces
net:
port: 27018
bindIp: 127.0.0.1
# 副本集配置
replication:
# 副本集的名称 ,统一个副本集中的mongodb实例都要用同一个名称!!!
replSetName: "myrs"
**副节点2:**
# mongod-salve02.conf
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data-slave02
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod-slave02.log
# network interfaces
net:
port: 27019
bindIp: 127.0.0.1
# 副本集配置
replication:
# 副本集的名称 ,统一个副本集中的mongodb实例都要用同一个名称!!!
replSetName: "myrs"
- 启动3个实例
mongod.exe -f mongod.cfg
mongod.exe -f mongod-slave01.cfg
mongod.exe -f mongod-slave02.cfg
REM windows可以将其安装为服务,以服务的方式启动
mongod.exe -f mongod-slave01.cfg --install --serviceName MongoDB-slave01-27018
mongod.exe -f mongod-slave02.cfg --install --serviceName MongoDB-slave01-27019
初始化副本集
需要先连接到你想要其成为主节点的实例上,然后执行
rs.initiate({config配置})命令通过传递副本集配置参数来初始化。副本集的配置参数请参考:https://www.mongodb.com/docs/manual/reference/replica-configuration/
mongo.exe --port 27017
/*
// 生产环境,用hostname比较好。
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "mongodb0.example.net:27017" },
{ _id: 1, host: "mongodb1.example.net:27017" },
{ _id: 2, host: "mongodb2.example.net:27017" }
]
})
*/
//这里因为式测试,所以就用ip地址了
rs.initiate({
_id : "myrs", // 副本集的名称,这个在配置文件中指定了。
members: [
{ _id: 0, host: "127.0.0.1:27017" },
{ _id: 1, host: "127.0.0.1:27018" },
{ _id: 2, host: "127.0.0.1:27018" }
]
})
// 第一次初始化后副本集后,一开始显示的还是PRIMARY节点(副节点),过一会再按回车后才会变成主节点
// 这是因为,初始化还未完成,需要稍等一会。
myrs:SECONDARY>
myrs:PRIMARY>
副本集管理
https://www.mongodb.com/docs/manual/administration/replica-set-member-configuration/
https://www.mongodb.com/docs/manual/administration/replica-set-maintenance/
比较常用:
rs.help() // 查看帮助信息
rs.isMaster() // 查看当前节点是否为主节点等信息
rs.hello() // 查看副本集信息
rs.status() // 查看副本集状态
rs.conf() // 返回当前副本集的配置文件
**rs.secondaryOk(true|false) //将所有的副节点设置是否允许读操作(在同一个副本集中的任意节点中都可以执行该命令)**
// https://www.mongodb.com/docs/manual/reference/method/rs.add/#mongodb-method-rs.add
rs.add() // 将成员添加到副本集。使用该命令必须实在主节点上操作!
MongoDB副本集的搭建和管理(高可用)的更多相关文章
- MongoDB副本集的搭建
副本集是mongodb提供的一种高可用解决方案.相对于原来的主从复制,副本集能自动感知primary节点的下线,并提升其中一个Secondary作为Primary. 整个过程对业务透明,同时也大大降低 ...
- [ MongoDB ] 副本集的搭建及测试
Replica Sets 复制 (副本集) node1: 10.0.0.10node2: 10.0.0.11node3: 10.0.0.12 副本集结构图:
- window系统上实现mongodb副本集的搭建
一.问题引出 假设我们生产上的mongodb是单实例在跑,如果此时发生网络发生问题或服务器上的硬盘发生了损坏,那么这个时候我们的mongodb就使用不了.此时我们就需要我们的mongodb实现高可用, ...
- MySQL集群搭建(5)-MHA高可用架构
1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...
- MySQL集群搭建(3)-MMM高可用架构
1 MMM 介绍 1.1 简介 MMM 是一套支持双主故障切换以及双主日常管理的第三方软件.MMM 由 Perl 开发,用来管理和监控双主复制,虽然是双主架构,但是业务上同一时间只允许一个节点进行写入 ...
- mongodb副本集群搭建
一.环境介绍 1.机器信息 10.40.6.68 10.40.6.108 10.40.6.110 软件环境为centos 6.x 2.mongodb 下载链接地址 https://www.mongod ...
- Docker下搭建mongodb副本集
背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...
- MongoDB副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
- MongoDB 副本集的常用操作及原理
本文是对MongoDB副本集常用操作的一个汇总,同时也穿插着介绍了操作背后的原理及注意点. 结合之前的文章:MongoDB副本集的搭建,大家可以在较短的时间内熟悉MongoDB的搭建和管理. 下面的操 ...
随机推荐
- 【网络爬虫笔记】爬虫Robots协议语法详解
Robots协议是指一个被称为Robots Exclusion Protocol的协议.该协议的主要功能是向网络蜘蛛.机器人等搜索引擎爬虫提供一个标准的访问控制机制,告诉它们哪些页面可以被抓取,哪些页 ...
- 解密IP分片与重组:数据传输中的关键技术
引言 在上一章节中,我们详细讨论了IP的分类和无分类原则的原理以及其在网络通信中的应用.IP分片与重组是在数据包传输过程中起到关键作用的机制.当数据包的大小超过网络链路的MTU(最大传输单元)限制时, ...
- Python shape+size详解
import cv2 from PIL import Image # pic.JPG 图片的路径 img = cv2.imread("pic.JPG",-1) print(&quo ...
- 什么是Kubernetes
什么是Kubernetes Kubernetes 概述 1.K8S 是什么? K8S 的全称为 Kubernetes (K12345678S),PS:"嘛,写全称也太累了吧,不如整个缩写&q ...
- nginx参数调优能提升多少性能
前言 nginx安装后一般都会进行参数优化,网上找找也有很多相关文章,但是这些参数优化对Nginx性能会有多大影响?为此我做个简单的实验测试下这些参数能提升多少性能. 声明一下,测试流程比较简单,后端 ...
- Go 方法集合与选择receiver类型
Go 方法集合与选择receiver类型 目录 Go 方法集合与选择receiver类型 一.receiver 参数类型对 Go 方法的影响 二.选择 receiver 参数类型原则 2.1 选择 r ...
- 如何深度学习Python?
安装必要软件:首先需要安装Anaconda或Miniconda等科研计算环境,并创建虚拟环境以便管理不同项目所需库和版本.可以按照如下步骤进行操作: 下载并安装 Anaconda 或 Minicond ...
- C语言,可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶,有的时候一次爬三个台阶。如果这个楼梯有n个台阶,小明一共有多少种爬法呢?n值从键盘输入。
/* 开发者:慢蜗牛 开发时间:2020.5.28 程序功能:小明爬楼梯 */ #include<stdio.h> int taijie(int n); long taijie(int n ...
- CART算法解密:从原理到Python实现
本文深入探讨了CART(分类与回归树)算法的核心原理.实现方法以及应用场景.文章首先介绍了决策树的基础知识,然后详细解析了CART算法的工作机制,包括特征选择和树的构建.接着,通过Python和PyT ...
- R数据分析:集成学习方法之随机生存森林的原理和做法,实例解析
很久很久以前给大家写过决策树,非常简单明了的算法.今天给大家写随机(生存)森林,随机森林是集成了很多个决策数的集成模型.像随机森林这样将很多个基本学习器集合起来形成一个更加强大的学习器的这么一种集成思 ...