部署MongoDB复制集(副本集)

 
环境
操作系统:Ubuntu 18.04
MongoDB: 4.0.3
服务器
首先部署3台服务器,1台主节点 + 2台从节点
3台服务器的内容ip分别是:
10.140.0.5 (主节点)
10.140.0.6 (从节点01)
10.140.0.7 (从节点02)
安装MongoDB
接下来,需要在每一台服务器上安装MongoDB。
完整安装过程可参考官方文档
为了方便,本文提供MongoDB的一键安装脚本
切换成root用户
sudo su -
运行安装脚本
wget https://gitlab.com/caizhifei2003/scripts/raw/master/install/mongodb/ubuntu-1804.sh
chmod u+x ubuntu-1804.sh
./ubuntu-1804.sh
此时,可以通过mongo命令进入数据库

配置复制集
 
设置复制集名称
 
有两种方式来设置复制集的名称。一种是通过mongod命令,另一种是通过修改配置文件。
本文使用通过修改配置文件的方式来设置复制集名称,确保每次节点重新启动后能够使用相同的配置启动数据库。
打开MongoDB在Ubuntu上的配置文件
vim /etc/mongod.conf
找到replication配置节
replication:
replSetName: "rs0"
绑定MongoDB的IP地址
 
找到net配置节
net:
port: 27017
bindIp: localhost,10.140.0.5
这里是主节点的地址,相应的从节点要绑定
10.140.0.6
10.140.0.7
保存文件,重新启动mongod服务
service mongod restart
此时,进入到任何一个节点。查看复制集状态。

初始化复制集
通过mongo shell进入主节点的数据库
执行复制集初始化命令
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "10.140.0.5:27017" },
{ _id: 1, host: "10.140.0.6:27017" },
{ _id: 2, host: "10.140.0.7:27017" }
]
})
查看复制集状态
rs.status()

到此,复制集已经创建成功。
测试数据同步
执行如下命令,在主节点上插入一条数据
use test
db.test.insertOne({"name": "kenny"})
进入任何一个从节点,查看数据是否被同步。
use test
rs.slaveOk()
db.test.find()
默认情况下,MongoDB只允许在主节点上写入和读取数据。这里的rs.slaveOk()是为了在从节点上也读取数据而需要执行的session(如果退出mongo shell,需要重新执行该命令)级别的命令。
显示的内容如下:

测试重新选举主节点
在3个节点上分别使用rs.isMaster()命令
10.140.0.5:

10.140.0.6:

10.140.0.7

强制关闭主节点上的MongoDB服务
use admin
db.shutdownServer()
在两个从节点上,通过rs.isMaster()命令查看状态
10.140.0.6:

10.140.0.7:

从上面的运行结果可以看出,10.140.0.6已经被推选成新的主节点。此时所有服务一切正常。
至此,部署MongoDB复制集的基本操作已经完成。
总结
  MongoDB复制集的部署还是比较简单的,官方文档也给出了较为详细的说明。
  同任何其它数据库一样,MongoDB的副本集也是为了增强数据的安全性,避免因为服务器出现异常时,而导致数据服务不可用的情况出现。同时,数据被完整的保存在多个节点中,任何一台服务器的硬盘出现问题,都不会丢失数据。但是这里也存在风险,那就是数据同步存在时间差,如果还没有等到数据被同步到从节点,主节点就当机的话,那么这部分数据是无法找回的。
  官方建议的副本集节点数量是3个,1个主节点+2个从节点。或者是1个主节点+1个从节点+1个仲裁节点。仲裁节点的作用是在主节点不可用时,通过算法找到最适合的从节点成为新的主节点。不建议将仲裁节点和数据节点放在同一个服务器上。

MongoDB 部署复制集(副本集)的更多相关文章

  1. MongoDB 带访问控制的副本集部署

    当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4  Centos6.5  一. 下载安装 MongoDB Server 及 ...

  2. MongoDB 复制(副本集)学习

    MongoDB 复制(副本集)学习 replication set复制集,复制集,多台服务器维护相同的数据副本,提高服务器的可用性.MongoDB复制是将数据同步在多个服务器的过程.复制提供了数据的冗 ...

  3. mongodb 复制(副本集)

    复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾 ...

  4. MongoDB 2.6配置副本集,支持端口号修改和用户登录认证

    mongoDB系列之(二):mongoDB 副本集 Mongodb2.6副本集验证部署和认证 副本集有以下特点: 1. 最小构成是:primary,secondary,arbiter,一般部署是:pr ...

  5. 学习mongo系列(九)索引,聚合,复制(副本集),分片

    一.索引 二.聚合 三.复制(副本集) 四.分片 尚未实践操作. 详见http://www.runoob.com/mongodb/mongodb-indexing.html

  6. 8.MongoDB系列之创建副本集(一)

    1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...

  7. MongoDB 删除,添加副本集,并修改副本集IP等信息

    MongoDB 删除,添加副本集,并修改副本集IP等信息 添加副本,在登录到主节点下输入 rs.add("ip:port"); 删除副本 rs.remove("ip:po ...

  8. 第40章:MongoDB-集群--Replica Sets(副本集)---副本集的管理

    ①以单机模式启动成员 由于很多维护的工作需要写入操作,所以不合适在副本集中操作,可以以单机模式启动成员,也就是不要使用副本的选项,就跟以前启动单独的服务器一样.一般使用一个跟副本集配置中不一样的端口号 ...

  9. mongodb数据中的复制(副本集)

    ---恢复内容开始--- 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备 ...

随机推荐

  1. 『正睿OI 2019SC Day7』

    简单数论 质因子分解 素性测试 素性测试指的是对一个正整数是否为质数的判定,一般来说,素性测试有两种算法: \(1.\) 试除法,直接尝试枚举因子,时间复杂度\(O(\sqrt n)\). \(2.\ ...

  2. Replication:Distribution Reader

    在transactional replication中,在publication中执行了一个更新,例如:update table set col=? Where ?,如果table中含有大量的数据行, ...

  3. golang --- map如何判断key是否存在

    判断方式为value,ok := map[key], ok为true则存在 package main import "fmt" func main() { demo := map[ ...

  4. SQL Server的NTEXT类型不支持等号"="操作(转载)

    SQL SERVER – Fix: Error : 402 The data types ntext and varchar are incompatible in the equal to oper ...

  5. spring Boot 学习(七、Spring Boot与开发热部署)

    一.热部署在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间 花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四 种情况,如何能实现热部署.•1.模板引擎 ...

  6. 去世父亲在儿子手机中复活,这可能是最温暖的一个AI

    美国青年James Vlahos的父亲不幸因病去世,但聊以慰藉的是,现在他每天还能和父亲聊天并收到回复,而且父亲在回复中的口吻与语气,就仿佛还「活着」一样. 这并不是恐怖片剧情,而是科技的魔幻力量:回 ...

  7. HTML5 新增文本标签

    一.mark 标记文本 <mark> 标签定义带有记号的文本,表示页面中需要突出显示或高亮显示的信息. 通常在引用原文的时候使用 mark 元素,目的是引起当前用户的注意. 语法格式: & ...

  8. 2019最新Android常用开源库总结(附带github链接)

    前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 1.TextView HTextView ...

  9. Golang报错:Cannot convert expression of type interface{} to type []byte

    在使用golang实现后端登录逻辑的时候,碰到下面的问题:Cannot convert expression of type interface{} to type []byte 首先介绍下问题出现的 ...

  10. profile name is not valid,The EXECUTE permission was denied on the object 'sp_send_dbmail', database 'msdb', schema 'dbo'.

    使用不是sysadmin权限的账号执行存储发邮件,报异常profile name is not valid, EXEC msdb.dbo.sp_send_dbmail @profile_name = ...