MongoDB配置复制集

简介

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

复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

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

复制集的优势

  • 保障数据的安全性
  • 数据高可用性 (24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据

MongoDB复制原理

  1. mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
  2. mongodb各个节点常见的搭配方式为:一主一从、一主多从。
  3. 主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

副本集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

一、部署MongoDB复制集

1. 创建多实例配置文件,并开启服务。

(1)创建数据文件和日志文件存储路径

[[email protected] ~]# mkdir -p /data/mongodb/mongodb{2,3,4}   //创建数据目录
[[email protected] ~]# mkdir -p /data/logs/mongodb
[[email protected] ~]# touch /data/logs/mongodb/mongodb{2,3,4}.log  //创建日志文件
[[email protected] ~]# chmod -R 777 /data/logs/mongodb/*.log    //赋予权限

(2)编辑4个MongoDB实例的配置文件

先编辑Mongodb实例1的配置文件,配置replication选项,并复制3份。

 vim /etc/mongod.conf
     replication:
         replSetName: kgcrs  //配置replSetName参数为kgcrs

重新启动Mongodb实例1

[[email protected] ~]# mongod -f /etc/mongod.conf  --shutdown
killing process with pid: 1074
[[email protected] ~]# mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 17130
child process started successfully, parent exiting

复制3份,并修改配置文件中的port参数配置,dbpath参数配置,logpath参数配置。

cp -p /etc/mongod.conf /etc/mongod2.conf
cp -p /etc/mongod.conf /etc/mongod3.conf
cp -p /etc/mongod.conf /etc/mongod4.conf 

修改mongod2.conf 的配置文件参数。

vim /etc/mongod2.conf 

   path: /data/logs/mongodb/mongodb2.log   //日志文件存储路径

   dbPath: /data/mongodb/mongodb2  //数据文件路径

   port: 27018     //监听端口

修改mongod3.conf 的配置文件参数。

vim /etc/mongod3.conf 

   path: /data/logs/mongodb/mongodb3.log   //日志文件存储路径

   dbPath: /data/mongodb/mongodb3  //数据文件路径

   port: 27019     //监听端口

修改mongod4.conf 的配置文件参数。

vim /etc/mongod4.conf 

   path: /data/logs/mongodb/mongodb4.log   //日志文件存储路径

   dbPath: /data/mongodb/mongodb4  //数据文件路径

   port: 27020     //监听端口

(3)启动多实例服务

mongod -f /etc/mongod2.conf
mongod -f /etc/mongod3.conf
mongod -f /etc/mongod4.conf

可以看到四个实例全部启动。

2.配置3个节点的复制集

[[email protected] ~]# mongo   //进入MongoDB27017实例
MongoDB shell version v3.6.6
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.6    

(1)先通过rs.status()命令查看复制集的状态信息,提示复制集还未配置。

(2)定义cfg初始化参数。

初始化配置时保证从节点没有数据,不然数据会丢失。

> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.113.176:27017"},{"_id":1,"host":"192.168.113.176:27018"},{"_id":2,"host":"192.168.113.176:27019"}]}

(3)通过rs.initiate(cfg)命令启动复制集。

> rs.initiate(cfg)

(4)查看复制集状态。

启动复制集后,再次通过rs.status()命令查看复制集的完整状态信息。
其中,health为1代表健康,0代表宕机。state为1代表主节点,为2代表从节点。

二、增加和删除节点

配置启动复制集后,可以通过rs.add()和rs.remove()命令方便的添加或删除节点。

#添加节点
kgcrs:PRIMARY> rs.add("192.168.113.176:27020")
kgcrs:PRIMARY> rs.status() //查看节点是否添加成功

#删除节点
kgcrs:PRIMARY> rs.remove("192.168.113.176:27020")
kgcrs:PRIMARY> rs.status()

可以看到27020的节点没有了。

三、MongoDB复制集切换

MongoDB复制集可以实现群集的高可用,当其中的主节点出现故障时会自动切换到其他节点。管理员也可以手动进行复制集的主从切换。

1.模拟故障自动转移

通过kill命令可以停止复制集的当前主节点,然后查看主节点会自动切换到其他节点上。

(1)先查看MongoDB的进程,停止当前的主节点27017

[[email protected] ~]# ps aux | grep mongod
root      17130  1.0  6.2 1582772 62064 ?       Sl   09:33   1:06 mongod -f /etc/mongod.conf
root      17830  0.8  5.7 1462576 57628 ?       Sl   09:58   0:45 mongod -f /etc/mongod2.conf
root      17880  0.8  5.8 1522504 58324 ?       Sl   09:58   0:45 mongod -f /etc/mongod3.conf
root      17927  0.7  5.3 1441856 53356 ?       Sl   09:58   0:37 mongod -f /etc/mongod4.conf
root      20678  0.0  0.0 112676   984 pts/1    S+   11:23   0:00 grep --color=auto mongod
[[email protected] ~]# kill -9 17130  

(2)查看主节点切换

[[email protected] ~]# mongo -port 27018
kgcrs:SECONDARY> rs.status()


2.手动也可以进行主从切换

(1)先进入主节点27019,暂停选举

[[email protected] ~]# mongo -port 27019

kgcrs:PRIMARY> rs.freeze(30)      //暂停30s不参与选举

kgcrs:PRIMARY> rs.stepDown(60,30)   //交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步

(2)查看主节点切换

kgcrs:SECONDARY> rs.status()

原文地址:http://blog.51cto.com/11134648/2146034

时间: 2024-07-30 18:34:50

MongoDB配置复制集的相关文章

centos7部署MongoDB数据库复制集(超详细)

centos7部署MongoDB数据库复制集(超详细)重点:复制集概述:复制集实现原理:复制集的应用案例:一.概述:组成:Mongodb复制集(副本集replica set)由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary通过oplog来同步Primary的数据,保证主节点和从节点数据的一致性,复制集在完成主从复制的基础上,通过心跳机制,一旦primary节点出现宕

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://g

mongodb的复制集配置

什么是mongodb副本集: mongodb副本集是一组mongodb服务器组成的一个副本集群.集群中包含一个Primary主服务器以及若干个Secondary备份服务器或者Artiber选举服务器.Secondary会向Primary服务器同步数据,实现集群内服务器的数据备份.当Primary宕机或无法提供服务时,集群会再次选举一个新的Primary服务器,以保证服务的正常,以及数据的安全. 配置副本集:    配置环境: Server1 : 192.168.189.129:5555 Serv

MongoDB之复制集(二)搭建

准备工作 环境: CentOS6.5 64位 MongoDB 3.0.1 64位 一.启动mongod服务 [[email protected] data]# /usr/local/mongodb3.0.1/bin/mongod --port 40144 --dbpath=/data/mongodb3.0.1/data/ --logpath=/data/mongodb3.0.1/log/mongodb.log --directoryperdb --maxConns 100 --logappend

mongodb 分片+复制集

mongodb版本:3.0.4 准备: 1.校验服务器的时间,3台同步 2.关闭防火墙 3.关闭selinux Sharding+Replica Sets 主机 IP 服务及端口 Server A 192.168.31.231 mongod shard1_1:27017 mongod shard2_1:27018 mongod config1:20000 mongs1:30000 Server B 192.168.31.232 mongod shard1_2:27017 mongod shard

MongoDB之复制集(一)原理篇

参考资料 官网:www.mongodb.org 中文社区:www.mongoing.com 在线教程:https://university.mongodb.com/ mongodb支持传统的master-slave架构.没有自动故障转移功能,需要指定master和slave端.建议使用复制集架构,复制集架构比复制架构更好维护,功能更强. 一.基本概念 复制集是由一组拥有相同数据集的 mongod 实例组成的.其中的一个节点为主节点(Primary),所有的写请求都是在它上面完成的.而其他的节点都

Spring Boot MongoDB 可复制集的读写分离

最近项目的一个版本刚迭代上去,然后设备也陆续地接入到了系统中. 设备产生的数据经过解析.处理之后落到了 MongoDB 中,但是才 10w 的数据就导致分页查询非常慢,count 操作也是慢的感人. 上午加了索引之后,从 10 多秒降到了 5 秒左右,但是这个速度还是很慢啊,这 TM 的等到设备都接入进来不就炸了. 然后下午就开始排错,查看代码中的慢查询. 最后发现一个现象就是:通过 Navicat 去查询相同的 find 和 count 语句要比在代码中快了好多倍,客户端的查询才是正常现象.

【MongoDB学习笔记31】MongoDB配置副本集

一.配置环境 1.两台安装了mongodb的CentOS服务器;(安装参考http://281816327.blog.51cto.com/907015/1598270) 2.两台服务器的ip分别为192.168.1.112.192.168.1.113: 3.两台服务器防火墙放开mongodb的默认27017的端口: 二.配置服务器 两台服务器都做如下的配置 创建/data/db文件夹 mkdir /date && mkdir /data/db 修改配置文件 vim /etc/mongodb

mongoDB的复制集5----复制集安全(认证,用户,权限)

一.什么是认证  如何开启认证    1).auth=true(在配置文件里增加)    2).keyFile(建议添加到配置文件里) #如果设置了auth=true,但第一次没有创建用户就启动实例怎么办# 在配置文件里增加如下 echo "setParameter=enableLocalhostAuthBypass=1" >> /usr/local/mongoDB/conf/28001.conf#然后用本地ip连接mongo localhost:28001  auth与k