mongoDB Replica集群配置(1主+1从+1仲裁)
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 Methods , Built-In Roles,Security 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仲裁)的更多相关文章
- Mongodb Sharding 集群配置
mongodb的sharding集群由以下3个服务组成: Shards Server: 每个shard由一个或多个mongod进程组成,用于存储数据 Config Server: 用于存储集群的M ...
- MongoDB 分片集群配置
本文测试环境为 CentOS 7 和 MongoDB 最新版 (4.0.12) 使用 root 操作 (实际操作中使用非 root 账户启动报错) 零.服务器分配 服务器 102 服务器 103 服务 ...
- 『集群』002 Slithice 集群配置工具 的使用
Slithice 集群配置工具 的使用 Slithice集群配置工具 主界面 在测试 Slithice 的 Demo 中,我配置了 7个服务端: 一个 WCF 的 中央服务端: 两个 WCF 的 成员 ...
- MongoDB 学习笔记(三) MongoDB (replica set) 集群配置
MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...
- MongoDB高可用集群配置的方案
>>高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. ...
- MongoDB高可用集群配置方案
原文链接:https://www.jianshu.com/p/e7e70ca7c7e5 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非 ...
- mongodb集群配置及备份恢复
Mongodb安装: 编辑/etc/yum.repos.d/mongodb.repo,添加以下: [MongoDB] name=MongoDB Repository baseurl=https://r ...
- 实例:Mongodb集群配置过程
最近因为一些项目公司开始采用Mongodb做为大量的数据存储,通过网络上大量的资源自己已经掌握一套可行的Mongodb集群配置过程,Mongodb具有无规则存储.大数据存储.多平台支持.强大的扩展插件 ...
- mariadb集群配置(主从和多主)
mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构 ...
随机推荐
- transient关键字的含义
transient java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持. Java的serialization提供了一种持久化对象实例的机制.当 ...
- web 前端:连接mysql中文乱码问题的解决办法
当使用tomcat部署servlet连接时,总是出现各种原因的中文乱码问题.有的是因为mysql的默认字符集的问题,有的是客户端的字符配置问题. 现在对于这两种问题进行配置,来解决乱码. 服务器端(m ...
- WinForm利用 WinApi实现 淡入淡出 弹出 效果 仿QQ消息
消息框: using System.Runtime.InteropServices; namespace Windows_API_实现屏幕右下角_消息框_ { public partial class ...
- C# Winform 水波纹效果
//添加自定义控件 using System; using System.Collections.Generic; using System.ComponentModel; using System. ...
- 如何使用highmaps制作中国地图
如何使用highmaps制作中国地图 文章目录 Highmaps 所需文件 地图初始化代码 highmaps 渲染讲解 highmaps 中国各城市坐标的json文件 highmaps 线上DEMO ...
- SparkSQL JSON数据操作(1.3->1.4)
1.用户自定义schema data json串格式如下: { "partner_code": "demo", "app_name": &q ...
- PHP与jquery前后台交互的小程序
1 <!DOCTYPE HTML> <html> <head> <meta charset = "utf-8"> <scrip ...
- paper 73 :HDR(High Dynamic Range Imaging)在摄影中指高动态范围成像
HDR(High Dynamic Range Imaging)在摄影中指高动态范围成像.国内的教程基本语焉不详,找到一篇比较详尽的国外教程翻译出来,希望对大家有帮助.^_^ 原文地址:http://p ...
- 夺命雷公狗—angularjs—10—angularjs里面的内置函数
我们没学一门语言或者框架,几乎里面都有各自的语法和内置函数,当然,强悍的angularjs也不例外,他的方法其实常用的没多少,因为很多都可以用源生jis几乎都能完成一大部分.. <!doctyp ...
- syscolumns表中所有字段的意思
--syscolumns表中所有字段的意思 name sysname --列名或过程参数的名称. id int --该列所属的表对象 ID,或与该参数关联的存储过程 ID. xtype tinyint ...