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个仲裁节点。仲裁节点的作用是在主节点不可用时,通过算法找到最适合的从节点成为新的主节点。不建议将仲裁节点和数据节点放在同一个服务器上。

原文地址:https://www.cnblogs.com/xibuhaohao/p/12044312.html

时间: 2024-11-08 17:40:48

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

mongodb 复制(副本集)

复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾难恢复 读写分离 高(24* 7)数据可用性 无宕机维护 副本集对应用程序是透明 复制的工作原理 复制至少需要两个节点A.B... A是主节点,负责处理客户端请求 其余的都是从节点,负责复制主节点上的数据 节点常见的搭配方式为:一主一从.一主多从 主节点记录在其上的所有操作,从节点定期轮询主节点获取

MongoDB 2.3复制(副本集)

2.3.复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾难恢复 读写分离 高(24* 7)数据可用性 无宕机维护 副本集对应用程序是透明 复制的工作原理 复制至少需要两个节点A.B... A是主节点,负责处理客户端请求 其余的都是从节点,负责复制主节点上的数据 节点常见的搭配方式为:一主一从.一主多从 主节点记录在其上的所有操作,从节点定期轮询主

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

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

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

mongoDB系列之(二):mongoDB 副本集 Mongodb2.6副本集验证部署和认证 副本集有以下特点: 1. 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary. 2. 成员数应该为奇数,如果为偶数的情况下添加arbiter,arbiter不保存数据,只投票. 3. 最大50 members,但是只能有 7 voting members,其他是non-voting members. 注意:配置mongo副本集的时候,不能先

MongoDB 3.2.8 副本集搭建

记录一下,MongoDB的角色创建及配置,以便以后使用 简介 Replica Set,中文翻译叫做副本集,不过我并不喜欢把英文翻译成中文,总是感觉怪怪的.其实简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致 Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点.主备节点存储数据,仲裁节点不存储数据.客户端同时连接主节点与备节点,不连接仲裁节点. 默认设置下,主节点提供所有增删查改服务,备

MongoDB的主从复制和副本集

mongoDB的两个特性主从复制和副本集,实现了数据的同步备份 一.主从复制 主从复制是一个简单的数据库同步备份的集群技术.例如主服务器宕机了,可以直接使用从服务器,主服务器恢复后在进行同步,保证了业务的连续性 注意点: 主服务器只有一台 从服务器需要知道自己的数据源,也就是对应的主服务器 --master确定主服务器,--slave和--source来控制从服务器 1.举例: 1).主服务器的端口是60000 2).从服务器的端口是60001 如何配置主从复制? 主服务器的配置: dbpath

mongodb安装配置及副本集的操作

一.Mongdb3.0安装 官网下载最新稳定版本的mongodb软体 https://www.mongodb.org/downloads 解压软体 [[email protected] service]# tar zxvf mongodb-linux-x86_64-rhel62-3.0.3.tgz  mongodb-linux-x86_64-rhel62-3.0.3/README mongodb-linux-x86_64-rhel62-3.0.3/THIRD-PARTY-NOTICES mong

Mongodb的Replica Set 副本集集群搭建

实验性的搭建一个集群做练手. 配置和环境: win10(本机)和linux(CentOs7)内网服务器各一台. Mongodb3.07 目标:Replica set 副本集结构,一个primary一个slave,实现读写分离的同步数据集群. 一.本机和内网服务器安装mongo 可参考我的另外两篇文章: Mongodb在windows和linux平台的安装配置(http://fykknd.blog.51cto.com/3175618/1716343) Mongodb权限管理(http://fykk

mongodb运维之副本集实践

忽然发现芋头好鸡贼 正式环境,4台机器+一台定时任务的机器.服务器是阿里云的ECS,负载均衡用的是阿里云的SLB,mysql用阿里云的RDS,缓存用阿里云的OCS,运维基本上是都不需要担心了,现在的云服务已经非常完善了,其实我们用阿里云的服务非常多,大概有20多个类型的服务,感谢阿里云. 而我的技术栈是nodejs + mongodb,而阿里云有k-v兼容redis协议的nosql,无mongodb,所以就要悲剧的自己运维mongodb了. 阿里的ots是非结构化存储,没有nodejs的sdk,