1.mongoDB节点介绍

主节点(Primary)

在复制集中,主节点是唯一能够接收写请求的节点。MongoDB在主节点进行写操作,并将这些操作记录到主节点的oplog中。而从节点将会从oplog复制到其本机,并将这些操作应用到自己的数据集上。(复制集最多只能拥有一个主节点)

从节点(Secondaries)

从节点通过应用主节点传来的数据变动操作来保持其数据集与主节点一致。从节点也可以通过增加额外参数配置来对应特殊需求。例如,从节点可以是non-voting或是priority 0.

仲裁节点(ARBITER)

仲裁节点即投票节点,其本身并不包含数据集,且也无法晋升为主节点。但是,旦当前的主节点不可用时,投票节点就会参与到新的主节点选举的投票中。仲裁节点使用最小的资源并且不要求硬件设备。投票节点的存在使得复制集可以以偶数个节点存在,而无需为复制集再新增节点 不要将投票节点运行在复制集的主节点或从节点机器上。 投票节点与其他 复制集节点的交流仅有:选举过程中的投票,心跳检测和配置数据。这些交互都是不加密的。

心跳检测

复制集成员每两秒向复制集中其他成员进行心跳检测。如果某个节点在10秒内没有返回,那么它将被标记为不可用。

mongodb副本集是有故障恢复功能的主从集群,由一个primary节点和一个或多个secondary节点组成:

同步过程: Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。如果某个操作失败,则备份节点停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从oplog的最后一个操作开始同步,同步完成后,将信息写入自己的oplog,由于复制操作是先复制数据,复制完成后再写入oplog,有可能相同的操作会同步两份,不过MongoDB在设计之初就考虑到这个问题,将oplog的同一个操作执行多次,与执行一次的效果是一样的。

通俗理解:当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步

  • 1、检查自己local库的oplog.rs集合,找出最近的时间戳。
  • 2、检查Primary节点local库oplog.rs集合,找出大于此时间戳的记录。
  • 3、将找到的记录插入到自己的oplog.rs集合中,并执行这些操作。

副本集的同步和主从同步一样,都是异步同步的过程,不同的是副本集有个自动故障转移的功能。其原理是:slave端从primary端获取日志,然后在自己身上完全顺序的执行日志所记录的各种操作(该日志是不记录查询操作的),这个日志就是local数据 库中的oplog.rs表,默认在64位机器上这个表是比较大的,占磁盘大小的5%,oplog.rs的大小可以在启动参数中设 定:–oplogSize 1000,单位是M。

注意:在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。

2.mongoDB安装文档

工具:Robomongo(mongodb可视化管理工具)

安装之前系统优化:

mongoDB 禁用大内存页面

echo never >> /sys/kernel/mm/transparent_hugepage/enabled

echo never >> /sys/kernel/mm/transparent_hugepage/defrag

yum install -y numactl (可以提高mongodb导入速度)

numactl --interleave=all 启动命令

官方安装文档:http://docs.mongoing.com/manual-zh/installation.html

2.1创建mongoDB3.2源

vim /etc/yum.repos.d/mongodb-org-3.2.repo

[mongodb-org-3.2] name=MongoDB

Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc

2.2创建mongoDB2.6源

vim /etc/yum.repos.d/mongodb-org-3.2.repo

[mongodb-org-2.6]

name=MongoDB 2.6

Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/

gpgcheck=0

enabled=1

2.3安装的MongoDB的最新稳定版本

yum install -y mongodb-org

2.4安装的MongoDB特定版本

分别指定每个组件包以及版本号追加到包的名称,如下面的例子:

yum install -y mongodb-org-3.2.0 mongodb-org-server-3.2.0 mongodb-org-shell-3.2.0 mongodb-org-mongos-3.2.0 mongodb-org-tools-3.2.0

3.创建keyfile(用于集群通信)

openssl rand -base64 755 > keyfile文件名

chmod 400 keyfile文件名

3.2将keyfile文件复制到从库和仲裁等其他节点,并在配置文件中指定路径

3.3配置文件修改(仅供参考)

vi /etc/mongod.conf

systemLog:#配置日志信息

destination: file

path: /home/mongodb/data/arbiter/mongod-qnzs-arbiter.log

logAppend: true

timeStampFormat: iso8601-local

processManagement:#fork后台允许模式

fork: true

pidFilePath: /home/mongodb/data/arbiter/mongod-qnzs-arbiter.pid

net:#配置通信端口

port: 27017

security:#安全通信设置

#初始化数据库之后需要创建管理用户,所以提前关闭用户认证。不然操作数据库提示权限不足

clusterAuthMode: keyFile

keyFile: /home/mongodb/data/mongo-keyfile

#authorization: enabled

authorization: disabled

storage:#引擎配置

dbPath: /home/mongodb/data/arbiter

directoryPerDB: true

journal:

enabled: true

engine: wiredTiger

wiredTiger:

engineConfig:

directoryForIndexes: true

cacheSizeGB: 90

operationProfiling:

slowOpThresholdMs: 100

replication:

oplogSizeMB: 20480

replSetName: qnzs

官方详细配置说明:http://docs.mongoing.com/manual-zh/reference/configuration-options.html

3.4mongoDB启动

numactl --interleave=all mongod -f 配置文件路径

3.5创建管理用户

use admin db.createUser( { user: "root", pwd: "1234", roles: [ { role: "root", db: "admin" } ] } );

3.6mongoDB集群配置(1主+1从+1仲裁)

进入mongoDB:

mongo 172.168.11.19:27017/admin -u root -p 123

use admin

rs.initiate(

{

_id : "qnzs",#设置集群名称

members: [

{_id:0,host:"172.17.116.18:27017",priority:2},#设置主库(优先级高仲裁为主库概率越高)

{_id:1,host:"172.17.116.19:27017",priority:1},#设置从库

{_id:2,host:"172.17.116.20:27017",arbiterOnly:true}#设置仲裁

]

}

)

注意:对于仲裁节点,需要特别的配置:arbiterOnly:true。不设置,主备模式不生效。

3.7查看集群状态

rs.status()

4.扩展知识

节点角色:

读写分离

MongoDB副本集对读写分离的支持是通过Read Preferences特性进行支持的,这个特性非常复杂和灵活。设置读写分离需要先在从节点SECONDARY 设置 setSlaveOk

应用程序驱动通过read reference来设定如何对副本集进行读取操作,默认的,客户端驱动所有的读操作都是直接访问primary节点的,从而保证了数据的严格一致性。

有如下几种模式:

mongo shell中复制相关方法

复制 数据库的命令

用户管理和认证方法

官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

角色管理方法

官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

相关官方资料mongo Shell MethodsBuilt-In RolesSecurity Methods in the mongo Shell

总结:

由于之前没有接触过mongodb数据库,项目中需要用到。后续查看官方文档,英文就是个渣渣。

还好有翻译工具。按照官文搭建,但还是遇到很多坑。例如验证问题

security:#安全通信设置

#初始化数据库之后需要创建管理用户,所以提前关闭用户认证。不然操作数据库提示权限不足

clusterAuthMode: keyFile

keyFile: /home/mongodb/data/mongo-keyfile

#authorization: enabled

authorization: disabled

初始化数据库的时候,一定要先禁言用户验证功能。然后在创建管理用户,之后就可以开启验证。操作数据库了

参考文档

官方文档:

http://docs.mongoing.com/manual-zh/

http://docs.mongoing.com/manual-zh/reference/configuration-options.html

http://docs.mongoing.com/manual-zh/core/security-built-in-roles.html

个人文档:

http://blog.csdn.net/luonanqin/article/details/8497860

https://deepzz.com/2016/05/15/19.html

https://segmentfault.com/a/1190000004641620

http://blog.csdn.net/kk185800961/article/details/45619863

mongoDB Replica集群配置(1主+1从+1仲裁)的更多相关文章

  1. Mongodb Sharding 集群配置

    mongodb的sharding集群由以下3个服务组成: Shards  Server: 每个shard由一个或多个mongod进程组成,用于存储数据 Config  Server: 用于存储集群的M ...

  2. MongoDB 分片集群配置

    本文测试环境为 CentOS 7 和 MongoDB 最新版 (4.0.12) 使用 root 操作 (实际操作中使用非 root 账户启动报错) 零.服务器分配 服务器 102 服务器 103 服务 ...

  3. 『集群』002 Slithice 集群配置工具 的使用

    Slithice 集群配置工具 的使用 Slithice集群配置工具 主界面 在测试 Slithice 的 Demo 中,我配置了 7个服务端: 一个 WCF 的 中央服务端: 两个 WCF 的 成员 ...

  4. MongoDB 学习笔记(三) MongoDB (replica set) 集群配置

    MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...

  5. MongoDB高可用集群配置的方案

    >>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...

  6. MongoDB高可用集群配置方案

    原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...

  7. mongodb集群配置及备份恢复

    Mongodb安装: 编辑/etc/yum.repos.d/mongodb.repo,添加以下: [MongoDB] name=MongoDB Repository baseurl=https://r ...

  8. 实例:Mongodb集群配置过程

    最近因为一些项目公司开始采用Mongodb做为大量的数据存储,通过网络上大量的资源自己已经掌握一套可行的Mongodb集群配置过程,Mongodb具有无规则存储.大数据存储.多平台支持.强大的扩展插件 ...

  9. mariadb集群配置(主从和多主)

    mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...

随机推荐

  1. Lintcode: Segment Tree Query II

    For an array, we can build a SegmentTree for it, each node stores an extra attribute count to denote ...

  2. Lintcode: Subarray Sum Closest

    Given an integer array, find a subarray with sum closest to zero. Return the indexes of the first nu ...

  3. 成员变量&&局部变量

    一.相同点:1.都遵循变量的声明格式:(修饰符) 数据类型  变量名=初始化值 2.都有各自的作用域 二.不同点:1.声明的位置不同      成员变量:声明在类内,方法外. 局部变量:声明在方法内. ...

  4. [转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )

    7本免费的Java电子书和教程 1. Thinking in Java (Third Edition) 本书的作者是Bruce Eckel,它一直都是Java最畅销的免费电子书.这本书可以帮助你系统的 ...

  5. 数据库 SQL基础

    数据库是用来存取数据的. 数据库类型: ACESS(比较小,存储少) SQL SERVER (.net) MySQL Oracle(java) 数据库:服务.界面 服务是可以操作的后台的程序. 界面是 ...

  6. ofbiz进击 个人遇到的奇葩问题汇总。

    在本人做退货单生成的时候,因为考虑到要控制通过java类方法去调用 service服务可以方便给出提示消息,所以专门新建了一个java类,然后去重新请求request请求,下面为Java类的代码 pu ...

  7. 建立一个Hello World级别的Spring项目

    package com.sevenhu.domain; import org.springframework.context.ApplicationContext; import org.spring ...

  8. git 命令--上传代码

    创建密钥命令: ssh-keygen -C 'your@email.address' -t rsa 找到生成的密钥文件id_rsa.pub 地址:C:\Documents and Settings\A ...

  9. Mysql 修改字段长度、修改列名、新增列

    alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...

  10. java mybatis 框架下多种类型的参数传入到xml问题

    由于公司要求,最近从.net向java 转,然后过程中遇到各种奇葩问题,特在此随记一番. 场景:一个方法中有两个参数,一个List的集合,一个int 类型的参数,最初我在xml的sql参数,无论定义成 ...