MongoDB复制集及管理

MongoDB复制集及管理

MongoDB复制集概述

什么是复制集

  • 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复。
  • 复制集的优点如下:

    1)、让数据更安全;
    2)、高数据可用性;
    3)、灾难恢复;
    4)、无停机恢复(如备份、索引重建、故障转移);
    5)、读缩放(额外的副本读取);
    6)、副本集对应用程序是透明的;

复制集工作原理

  • MongoDB的复制集至少需要两个节点。其中一个是主节点(Primary),负责处理客户端的请求,其余的都是从节点(Secondary),负责复制主节点上的数据。
  • MongoDB各个节点的搭配方式为:一主一从或一主多从。主节点记录其上的所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
  • 客户端在主节点写入数据,在从节点读取数据,主节点与从节点进行交互保障数据的一致性。如果其中一个节点出现故障,其他节点马上会将业务接过来而无需停机操作。
  • 复制集特点如下:

    1)、N个节点的群集;
    2)、任何节点可以做主节点;
    3)、所有写入操作都在主节点上;
    4)、自动故障转移;
    5)、自动恢复;

MongoDB复制集部署

1、配置复制集

  • 1)、创建多实例;

mkdir -p /data/mongodb/mongodb{2,3,4} #创建数据目录

mkdir /data/logs

touch /data/logs/mongodb{2,3,4}.log #创建日志文件

cd /data/logs

chmod 777 *.log #赋予权限

vi /etc/mongod.conf

bindIp: 0.0.0.0          #监听地址
path: /data/mongodb/mongod.log  #日志文件存储目录
dbPath: /data/mongodb/mongo     #数据存储目录
port: 27017                     #监听端口;每一个实例端口不一样
---省略内容---
replication:
  replSetName: kgcrs            #复制集的名称

cp mongod.conf mongod2.conf

cp mongod.conf mongod3.conf

cp mongod.conf mongod4.conf

  • #编辑完成后,复制三分,作为其他三个实例的配置文件,将mongod2.conf中的port参数设置为27018,mongod3.conf中的port参数设置为27019,mongod4.conf中的port参数设置为27020,同样也将padb和thPath参数修改为对应的路径值。

mongod -f /etc/mongod.conf #启动所有实例

mongo --port 27017

mongod -f /etc/mongod2.conf

mongo --port 27018

mongod -f /etc/mongod3.conf

mongo --port 27019

mongod -f /etc/mongod4.conf

mongo --port 27020

  • 2)、初始化配置复制集

mongo

cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.27.28:27017"},{"_id":1,"host":"192.168.27.128:27018"},{"_id":2,"host":"192.168.27.128:27019"}]} #定义cfg初始化参数

rs.initiate(cfg) #初始化启动复制集

  • 3)、增加和删除节点

mongo

rs.add("192.168.27.128:27020") #添加节点

rs.status() #查看状态

rs.remove("192.168.27.128:27020") #删除节点

re.status #查看状态,新添加的节点已被删除

  • 4)、模拟故障自动切换与手动切换
  • 模拟故障自动切换

mongo -f /etc/mongod.conf --shutdown #关闭复制集当前主节点

mongo --port 27018 #进入到第二个节点中

rs.ststus() #查看状态

  • 手动切换

mongod -f /etc/mongod.conf #开启第一个节点

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

mongo --port 27018

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

MongoDB复制集选举原理

1、复制原理

  • 复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录。复制是将主节点的oplog日志同步并应用到其他从节点的过程。

2、选举的原理

  • 节点类型分为标准(host)节点、被动(passive)节点和仲裁(arbiter)节点。
  • 1)、只有标准节点可能被选举为活跃(primary)节点,有选举权。被动节点有完整副本,不可能成为活跃节点,有选举权。仲裁节点不复制数据,不可能成为活跃节点,只有选举权。
  • 2)、标准节点与被动节点的区别:priority值高者是标准节点,低者则为被动节点。

-3)、选举规则是票数高者获胜,priority是优先权为0~1000的值,相当于额外增加0~1000的票数。选举结果:票数高者获胜;若票数相同,数据新者获胜。

3、配置复制集的优先级并查看oplog日志

mongon

cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.27.128:27017","priority":100},{"_id":1,"host":"192.168.27.128:27018","priority":100},{"_id":2,"host":"192.168.27.128:27019","priority":0},{"_id":3,"host":"192.168.27.128:27020","arbiterOnly":true}]} #配置4个节点的复制集

rs.reconfig(cfg)

kgcrs:PRIMARY> rs.isMaster() #查看状态信息

kgcrs:PRIMARY> use kgc

kgcrs:PRIMARY> db.t1.insert({"id":1,"name":"tom"}) #插入数据

kgcrs:PRIMARY> db.t1.insert({"id":2,"name":"jerry"}) #插入数据

kgcrs:PRIMARY> db.t1.find() #查看集合中的数据

kgcrs:PRIMARY> db.t1.update({"id":2},{$set:{"name":"jack"}}) #更改

kgcrs:PRIMARY> db.t1.remove({"id":1}) #删除

kgcrs:PRIMARY> use local

kgcrs:PRIMARY> show collections #查看集合

    显示
    oplog.rs

kgcrs:PRIMARY> db.oplog.rs.find() #查看日志记录所有操作

#oplog会包含所有对数据有修改的操作;但查询操作不会记录。

4、模拟节点故障

-1)、如果主节点出现故障,另一个标准节点将会选举成新的主节点;

mongod -f /etc/mongod.conf --shutdown #关闭第一个节点服务器

mongo --port 27018 #此时会选举第二个标准节点为主节点

rs.status() #查看状态信息

  • 2)、当所有标准节点都出现故障,被动节点也不可能成为主节点;

mongod -f /etc/mongod2.conf --shutdown #关闭第二个节点服务器

mongo --port 27019 #此时被动节点不能成为主节点

rs.status() #查看状态信息

MongoDB复制集管理

允许从节点读取数据

  • 默认MongoDB复制集的从节点不能读取数据,可以使用rs.slaveOK()命令能够在从节点读取数据。

查看复制集状态信息

  • 可以使用rs.printReplicationInfo()查看日志大小、时间范围;使用rs.printSlaveReplicationInfo()查看复制的节点、时间;

更改oplog大小

mongo --port 27018

rs.printReplicationInfo() #查看日志大小、时间范围

use admin

db.shutdownServer()

exit

vim /etc/mongod2.conf #注销replication:相关启动参数,并修改port端口号27028

net:
  port: 27028

#replication:
    #replSetName: kgcrs

mongod -f /etc/mongod2.conf #单实例模式启动

mongodump --port 27028 --db local --collection ‘oplog.rs‘ #全备当前节点的所有oplog记录

mongo --port 27028

use local

db.oplog.rs.drop() #删除原日志文件

db.runCommand( { create: "oplog.rs", capped: true, size: (2 1024 1024 * 1024) } ) #重建新的日志文件,并指定大小

use admin

db.shutdownServer() #关闭服务

exit

vim /etc/mongod2.conf

net:
  port: 27018

replication:
    replSetName: kgcrs
    oplogSizeMB: 2048       #指定大小

mongod -f /etc/mongod2.conf #启动

mongo --port 27018 #进入第二个节点

rs.printReplicationInfo() #查看日志大小、时间范围

exit

mongo #进入主节点

rs.stepDown() #有效产生选举;让出主节点,第二个会变成主节点

部署认证的复制

use admin #在主节点中创建一个用户

db.createUser({"user":"root","pwd":"123","roles":["root"]})

exit

vim /etc/mongod.conf #编辑配置文件;4个都需添加如下内容

security:
   keyFile: /usr/bin/kgcrskey1      #秘钥文件位置
   clusterAuthMode: keyFile         #验证模式为秘钥验证模式

cd /usr/bin/ #写入四个实例的秘钥文件(内容需一样)

echo "kgcrs key"> kgcrskey1

echo "kgcrs key"> kgcrskey2

echo "kgcrs key"> kgcrskey3

echo "kgcrs key"> kgcrskey4

chmod 600 kgcrskey{1..4}

#四个实例依次进行重启,并进入主节点进行验证;

show dbs #无法查看数据库

rs.status() #无法查看复制集

use admin #身份登录验证

db.auth("root","123")

rs.status() #可以查看数据库

show dbs #可以查看复制集

原文地址:http://blog.51cto.com/13659182/2147542

时间: 2024-08-29 12:48:23

MongoDB复制集及管理的相关文章

MongoDB复制集管理优化

本文章将介绍MongoDB复制集的基本配置和管理,分别包括配置从节点可以读取数据.查看复制集状态.更改oplog大小.配置带认证的复制集 复制集的选举原理 复制是基于操作日志oplog,相当于Mysql中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步并应用到其他从节点的过程. 选举的原理 节点的类型分为标准(host)节点.被动(passive)节点和仲裁(arbiter)节点. 标准节点可能被选举为活跃(primary)节点,有选举权. 被动节点有完整副本,不可能成为活

在CentOS7上部署MongoDB复制集和复制集的管理维护

MongoDB复制集的概述 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个是主节点(primary),负责处理客户端的请求,其余都是从节点(Secondary),负责复制主节点上的数据. MongoDB各个节点常见的搭配方式为:一主一从或一主多从.主节点记录其上的所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数副本执行

MongoDB复制集部署和基本管理

MongoDB复制集部署和基本管理 MongoDB复制集概述 复制集(Replica Sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据的可用性,通过复制集可以对硬件故障和中断服务进行恢复. 复制集由下列优点: 让数据更安全 高数据可用性(7*24) 灾难恢复 无停机维护(如备份.索引重建.故障转移) 读缩放(额外的副本读取) 副本集对应用程序是透明的 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个节点是主节点(Primary),负责处理客户

MongoDB复制集管理(后续)

简介:复制集:1:标准节点:参与primary选举2:被动节点:只能成为secend,不参与选举3:仲裁节点:负责投票选举,不存放数据 实验环境:2台标准节点 1台被动节点 1台仲裁点具体实验步骤:(前半部分实验为上次实验操作) [[email protected] ~]# mkdir -p /data/mongodb/mongodb{2,3,4}[[email protected] ~]# mkdir -p /data/mongodb/logs[[email protected] ~]# to

MongoDB复制集架构

MongoDB复制集架构 由数据结点,投票结点组成,需要配置集群信息,可自动检测集群中的结点健康状态,当有结点出故障时,自动下线和切换主从结点.适用于数据量较大,高可用服务 通常,为了防止单点故障应用程序需要做集群.然而在数据库中除了防止单点故障,还需要做到数据库备份,读写分离,故障转移等.而 MongoDB 的 Replica Set 恰恰都能满足这些要求. Replica Set角色 Replica Set 的成员是一堆有着同样的数据内容 mongod 的实例集合,包含以下三类角色: 主节点

MongoDB复制集技术

第1章 MongoDB复制集简介: 一组MongoDB复制集,就是一组MongoDB进程,这些进程维护同一个数据集合,复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础 1.1 复制集的目的: 保证数据在生产部署是的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单间损坏而丢失,能够随时应对数据丢失或者机器损坏带来的风险 还可以提高用户读写数据的性能,提高整个系统的负载 1.2 简单介绍: 1.      一组复制集就是一组MongoDB实例掌管同一个数据集,实例可以在不同的机

配置MongoDB复制集

什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复.复制集的优势如下: 让数据更安全 高数据可用性(24*7) 灾难恢复 无停机维护(如备份.索引重建.故障转移) 读缩放(额外的副本读取) 副本集对应用程序是透明的 复制集工作原理 MongoDB的复制集至少需要两个节点.其中一个是主节点(Primary),负责处理客户端的请求,其余的都是从节点(Secondary),负责复制主节点上的数据.Mon

MongoDB复制集(实现选举复制、故障切换、升级oplog大小、认证复制)

什么是复制集? 复制集(replica sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断服务进行恢复. 复制集的优势 让数据更安全. 高数据可用性. 灾难恢复. 无停机维护(如备份.索引重建.故障转移) 读缩放(额外的副本读取) 副本集对应用程序是透明的. 复制集概述 MongoDB复制集是额外的数据副本,复制集提供了冗余和增加数据可用性. MongoDB的复制集至少需要两个节点,其中主节点负责处理客户端请求,从节点负责

【亲测】教你如何搭建 MongoDB 复制集 + 选举原理

目录 1·MongoDB 复制集概述2·MongoDB 复制集部署3·MongoDB 复制集管理(添加.移除等)4·复制集的总结 MongoDB 复制集是什么? 之前的一片文章讲了 MongoDB 的安装和日常的操作,有兴趣的朋友可以看看 MongoDB 的安装和简单操作 1)什么是复制集? 复制集是额外的一种数据副本,是跨多个服务器同步数据的过程,通俗的说就是可以在不同的服务器上备份数据,专业点说就是冗灾处理.通过复制集可以对硬件和终端的服务进行恢复. 2)复制集的优势如下: 1-让数据更加安