环境
操作系统: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-.sh
./ubuntu-.sh
此时,可以通过mongo命令进入数据库

配置复制集
 
设置复制集名称
 
有两种方式来设置复制集的名称。一种是通过mongod命令,另一种是通过修改配置文件。
本文使用通过修改配置文件的方式来设置复制集名称,确保每次节点重新启动后能够使用相同的配置启动数据库。
打开MongoDB在Ubuntu上的配置文件
vim /etc/mongod.conf
找到replication配置节
replication:
replSetName: "rs0"
绑定MongoDB的IP地址
 
找到net配置节
net:
port:
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: , host: "10.140.0.5:27017" },
{ _id: , host: "10.140.0.6:27017" },
{ _id: , 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 复制(副本集)学习 replication set复制集,复制集,多台服务器维护相同的数据副本,提高服务器的可用性.MongoDB复制是将数据同步在多个服务器的过程.复制提供了数据的冗 ...

  2. mongodb 复制(副本集)

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

  3. 7.Mongodb复制(副本集)

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

  4. 【六】MongoDB管理之副本集

    一.复制介绍 所谓的复制就是在多个主机之间同步数据的过程. 1.数据冗余及可用性 复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务器出现数据故障而出现数 ...

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

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

  6. mongodb系列之---副本集配置与说明

    在配置副本集之前,我们先来了解一些关于副本集的知识. 1,副本集的原理 副本集的原理与主从很相似,唯一不同的是,在主节点出现故障的时候,主从配置的从服务器不会自动的变为主服务器,而是要通过手动修改配置 ...

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

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

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

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

  9. Mongodb主从复制 及 副本集+分片集群梳理

    转载努力哥原文,原文连接https://www.cnblogs.com/nulige/p/7613721.html 介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 ...

随机推荐

  1. MongoDB数据库安装及配置环境(windows10系统)

    windows10系统下MongoDB的安装及环境配置: MongoDB的安装 下载地址: https://www.mongodb.com/download-center (这是windows10环境 ...

  2. JVM知识(一):基础原理

    学过java知识和技术人,都应该听说过jvm,jvm一直是java知识里面晋级阶段的重要部分,如果想要在java技术领域更深入一步,jvm是必须需要明白的知识点. 本篇来讲解jvm的基础原理,先来熟悉 ...

  3. A B C D类网络地址

    A类网络地址(红色为网络地址,黑色为主机地址): 下限:0000 0001.0000 0000.0000 0000.0000 0000(1.0.0.0) 上限:0111 1110.1111 1111. ...

  4. 关于打开现有项目时数据库连接配置遇到的问题 连接字符串中的数据源值指定未安装的SQL Server的实例。要解决此问题,可选择安装匹配的SQL Server实例或修改连接字符串中的数据源值

    最近在看红皮书<ASP.NET MVC 5 高级编程>时,为了更好理解,边看书,边打开源代码查看,在VS(Visual Studio 2015)中将源代码打开,发现数据库连接是关闭的,本想 ...

  5. NSCopying简析

    NSCopying简析 用到NSCopying的时候并不多,但还是有必要知道最基本的用途,比方说数组的拷贝操作,需要注意的是,数组的拷贝操作并不是执行了 copy 方法,而是需要执行 initWith ...

  6. 生活随记[All]

    1. 心灵鸡汤[all] 2. 工作总结 [all] 3. 面试经验[all] 4. 其他

  7. [微信小程序直播平台开发]___(三)Nginx-rtmp事件回调

    1.一个可以忽略的前言 发起直播后可以在Nginx的自带的页面上查看到统计,那怎么知道发起了直播或者关闭了直播呢?我想到了这个统计页,于是查看一下里面的内容看看如何获取到的数据, 找到后发现是个xsl ...

  8. [SHOI2008]小约翰的游戏

    题目 不会,抄论文 这是一个非常牛逼的东西,叫做\(anti\)博弈,就是进行最后一次操作的人输 我们考虑一下这道题 显然如果石子个数都是\(1\),那么有奇数堆石子先手必败,有偶数堆石子先手必胜 如 ...

  9. 【[BJOI2017]魔法咒语】

    矩阵乘法+\(AC\)自动机 是道很不错的题了 首先是前六十分,就是一个\(AC\)自动机上的套路\(dp\),设\(dp[i][j]\)表示匹配出的长度为\(i\)在自动机上位置为\(j\)的方案数 ...

  10. RAC with asm on AIX, ORA-01114 error,with "gipcretAuthFail (22) " in ocssd.log

    I/O Errors in Alert log with ORA-29701, with "gipcWait failed with 16" in trace (文档 ID 149 ...