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. Swift动画编程指南-02 Swift动画是怎么炼成的

    上一节我们看了几个很棒的例子,我们不禁会想.他们是怎么设计的,怎么从一个空白的画布变成一个完整的,美丽的动画.这些动画是如何产生的,是哪些属性被改变了.我们还要认真思考的是,每一个步骤到底发生了什么. ...

  2. 数dp多少个0-n多少0-9

    #include <bits/stdc++.h> using namespace std; const int N = 15; int n; int dp[N][N][N]; int a[ ...

  3. 12.了解或熟悉 C, C++, .NET

    挂起,暂不了解,不过C++略懂,.net虽不懂但是做过实际项目,有能力担当

  4. 二项分布 多项分布 伽马函数 Beta分布

    http://blog.csdn.net/shuimu12345678/article/details/30773929 0-1分布: 在一次试验中,要么为0要么为1的分布,叫0-1分布. 二项分布: ...

  5. PAT乙级 1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...

  6. 在linux中搭建git服务器

    个人觉得, 以下搭建git服务器的过程就像是在linux增加了一个用户, 而这个用户的登录shell是 git-shell, 太刨根问底的东西我也说不清楚, 还是看下面的过程吧. 过程参考了网上的文章 ...

  7. ubuntu sublime-text package control

    1.ubuntu 环境下sublime-text的 package control一直配置失败 因为我下的是sublime-text3,而网上一般都是sublime-text2的教程. 2.subli ...

  8. 一个fork()系统调用的问题

    转载:http://coolshell.cn/articles/7965.html 题目:请问下面的程序一共输出多少个“-”? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  9. 【海岛帝国系列赛】No.1 海岛帝国:诞辰之日

     50111117海岛帝国:诞辰之日 [试题描述] YSF自从上次“被盗投降”完(带着一大堆债)回去以后,YSF对“海盗”怀念至今,他想要建立一个“药师傅”海岛帝国. 今天,他要像“管理部”那样去探寻 ...

  10. ImagXpress中如何修改Alpha通道方法汇总

    ImagXpress支持处理Alpha通道信息来管理图像的透明度,Alpha通道支持PNG ,TARGA和TIFF文件,同时还支持BMP和ICO文件.如果说保存的图像样式不支持Alpha通道,就将会丢 ...