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. 用于sql server启动的账户

    用于启动和运行 SQL Server 的启动帐户可以是域用户帐户.本地用户帐户.托管服务帐户.虚拟帐户或内置系统帐户. 若要启动和运行 SQL Server 中的每项服务,这些服务都必须有一个在安装过 ...

  2. 为benchmarksql的PostgreSQL java驱动进行升级

    为benchmarksql的PostgreSQL java驱动进行升级[root@minion1 benchmarksql-4.1.0]# wget https://jdbc.postgresql.o ...

  3. Leetcode: Mini Parser

    Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...

  4. 找区间连续值(HDU5247)

    找连续数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 根据搜素的字符串改变label包含该字符串的文字

    http://www.2cto.com/kf/201504/391811.html NSString *text =@"人生若只如初见"; //判断字符串所在的位置,并不区分大小写 ...

  6. ActivityGroup中EditText无法删除的问题

    坑,以前比较少用ActivityGroup,最近使用才发现ActivityGroup中多个Activity中如果都有Edittext是无法后退删除. 网上说有种方法监听dispatchKeyEvent ...

  7. mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间

    mysql取出现在的时间戳和时间时间戳转成人类看得懂的时间,我们在mysql里面他封装了一个内置的时间戳转化的函数,比如我们现在的时间戳是:1458536709 ,"%Y-%m-%d&quo ...

  8. 关于jQuery的bind()\trigger()\triggerHandler()

    1.bind() 事件绑定. 多个事件会链式累加,而不会覆盖. 即 $("div").bind("click",funtion(){alert("te ...

  9. Delphi Xe2 后的版本如何让Delphi程序启动自动“以管理员身份运行"

    由于Vista以后win中加入的UAC安全机制,采用Delphi开发的程序如果不右键点击“以管理员身份运行”,则会报错. 在XE2以上的Delphi版本处理这个问题已经非常简单了. 右建点击工程,选择 ...

  10. 161103、Spring Boot 入门

    Spring Boot 入门 spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验 ...