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. devexpress13学习系列(三)PDFViewer(3)

    PdfDocumentProperties Class 该类,用来显示载入的pdf文件的属性,包括:   Name Description Application Indicates the appl ...

  2. Lintcode: Segment Tree Query

    For an integer array (index from 0 to n-1, where n is the size of this array), in the corresponding ...

  3. Java中几种日志方案

    .本文记录Java中几种常用的日志解决方案 0x01 Log4j .这应该是一个比较老牌的日志方案了,配置也比较简单,步骤如下 1)添加对应依赖,比如 Gradle 中 dependencies { ...

  4. 最近兰州的js风格写个插件和一个template engine

    /* *@Product Name: Rational Framework Author: Calos Description: pager !important: pager */ (functio ...

  5. 数组有没有length()这个方法? String有没有length()这个方法?

    答:数组和string都没有Length()方法,只有Length属性.

  6. c++ 中this底层

    成员变量设置在一个结构体中, 操作成员变量的成员函数,其实质上就是拥有一个隐藏的 成员变量结构体的地址指针,俗称this指针.

  7. HDU 4888 Redraw Beautiful Drawings(最大流+判最大流网络是否唯一)

    Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited ...

  8. URAL 1139 City Blocks(数论)

    The blocks in the city of Fishburg are of square form. N avenues running south to north and Mstreets ...

  9. 夺命雷公狗—angularjs—14—$location的作用

    废话不多说看下,我们直接来走代码看下效果如何 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  10. 查找(顺序表&有序表)

    [1]查找概论 查找表是由同一类型是数据元素(或记录)构成的集合. 关键字是数据元素中某个数据项的值,又称为键值. 若此关键字可以唯一标识一个记录,则称此关键字为主关键字. 查找就是根据给定的某个值, ...