复制集

  • 主从节点,主节点负责读和写,从节点只有读取功能。
  • 从节点备份数据,主节点故障后,从节点替换主节点。
  • 每个节点都会向其他节点发送心跳,默认每隔2秒一次,超过10秒超时(默认)。
  • 复制集中最多50个节点。

选举

  • 候选节点发起选举,每个节点投票比自己更同步的节点
  • 得到超过半数选票的节点会当选为主节点
  • 复制集中最多可以有7个投票节点
  • 触发条件:心跳超时、复制集初始化、新节点加入复制集
  • 没有数据的节点可以投票,不能成为主节点

同一台服务器,使用docker创建复制集

# 创建network docker内部使用,是应为在同一天服务器上才用的,不同服务器可用不设置
docker network create mynetwork# 查询使用的应用
docker network ls# 运行三个节点
docker run --net mynetwork --name mongol -v /mymongo/data1:/data/db -p 27017:27017 -d mongo:4 --replSet myset --port 27017
docker run --net mynetwork --name mongo2 -v /mymongo/data1:/data/db -p 27018:27018 -d mongo:4 --replSet myset --port 27018
docker run --net mynetwork --name mongo3 -v /mymongo/data1:/data/db -p 27019:27019 -d mongo:4 --replSet myset --port 27019# 创建复制集
docker exec -it mongo1 mongo
> rs.initiate({_id: "myset",members: [{_id: 0,host : "mongo1: 27017"},{_id: 1,host : "mongo2: 27018"},{_id: 2,host : "mongo3: 27019"}]}
)# 查看状态
> rs.status()

非docker添加方式

  • 使用下面配置启动 3个mongodb数据库(port使用27001,27002,27003)
vim mongodb.conf
# 添加下面内容
dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
port = 27001  #端口
fork = true  #以守护程序的方式启用,即在后台运行
bind_ip=192.168.204.81  #指定内网访问ip   0.0.0.0允许远程访问
replSet=rs0  #复制集名称auth = true #开启用户验证才能访问
keyFile=/usr/local/mongodb/.keyFile   #集群使用相互验证(和上面auth配合使用)
  • 集群验证初始化(keyFile,需要要把这个拷贝到上面三台服务器对应的 mongodb文件路径下)
# 到需要生成的地方
cd /usr/local/mongodb/
touch .keyFile
chmod 600 .keyFile
# 生成key
openssl rand -base64 102 > .keyFile
# 服务器启动mongodb
./mongod -f mongodb.conf
  • 进入27001 初始化副本配置
# 进入mongodb
mongo 192.168.204.81:27001/admin# 填写副本成员信息
config = {"_id":"rs0","members":[{"_id":0,host:"192.168.204.81:27001"},{"_id":1,host:"192.168.204.81:27002"},{"_id":2,host:"192.168.204.81:27003"}]
}
# 执行初始化
rs.initiate(config)
# 查看执行结果
rs.status()
  • 副本集简单维护
# 添加新节点
rs.add("ip:port")
# 删除节点
rs.remove("ip:port")
# 主节点降级
rs.stepDown(整数),意思是在整数秒内降级

授权(操作权限)

# 可用提供的权限
read    可读取非系统集合
readWrite    读写当前数据库中非系统集合
dbAdmin    管理当前数据库
userAdmin    管理当前数据库中的用户和角色
userAdminAnyDatabase    最高权限账号角色
read/readWrite/dbAdmin/userAdminAnyDatabase    对所有数据库执行操作(只在admin数据库中提供)

模板

# 授权方式(在哪里 == 做什么)
# 赋予集合的查询和更新权限
{resource: {db: "test", collection: ""},actions: ["find","update"]}# 赋予集群的关闭权限
{resource: {cluster: true}, actions: ["shutdown"]}

例子

# 创建一个只能读取test数据库的用户
db.createUser({user: "myUserAdmin",pwd: "password",roles: [{role: "read",db: "test"}]
})# 创建一个只能读取指定集合accounts的用户
use test;
db.createUser({user: "myUserAdmin",privleges: [resource: {db: "test", collection: "accounts"},actions: ["find"]],roles: []
})# 角色权限可以继承
use test;
db.createUser({user: "grayCat",pwd: "password",roles: ["myUserAdmin"]
})

故障诊断

监控数据库状态

mongostat --host localhost --port 27017 -o "command,dirty,used,vsize,res,conn,time"
cat /data/db/mongo.conf
net:maxIncomingConnections: 200   # 最大连接数
storage:dbPath: /data/dbwiredTiger:engineConfig:cacheSizeGB: 0.25    # 内存使用限制

open files 文件描述器(也影响连接数),mongo 内部文档访问会暂用连接,这里提供给外部访问的连接数也就小于2000

其他文章里的分片

https://www.jianshu.com/p/af77d3b45556

参数

参数说明

insert

每秒插入量

query

每秒查询量

update

每秒更新量

delete

每秒删除量

conn

当前连接数

qr|qw

客户端查询排队长度(读|写)最好为0,如果有堆积,数据库处理慢。

ar|aw

活跃客户端数量(读|写)

time

当前时间

root@6003b155ebbc:/usr/bin# ./mongostat -h 127.0.0.1 --port 27017
insert query update delete getmore command dirty used flushes vsize  res qrw arw net_in net_out conn                time*0    *0      1     *0       0     2|0  0.5% 9.1%       0 2.07G 991M 0|0 1|0   493b   64.8k   59 Aug  5 17:43:24.772*0     8      3     *0       0     3|0  0.5% 9.1%       0 2.07G 991M 0|0 1|0  4.29k    189k   59 Aug  5 17:43:25.773*0     3     *0     *0       0     3|0  0.5% 9.1%       0 2.07G 991M 0|0 1|0   433b   69.7k   59 Aug  5 17:43:26.771*0     1     *0     *0       0     4|0  0.5% 9.1%       0 2.07G 991M 0|0 1|0   360b   65.4k   59 Aug  5 17:43:27.771
^C2020-08-05T17:43:28.740+0000 signal 'interrupt' received; forcefully terminating
root@6003b155ebbc:/usr/bin# 

mongodb--复制集和故障诊断(笔记)相关推荐

  1. MongoDB 复制集和分片的理解

    对mongo副本集和分片的理解 mongo的副本集: mongo的副本集是相对于单个mongod服务器或者进程来说的,由多个mongod进程/节点(一般为奇数)组成: 每个节点上都有一份完整的数据备份 ...

  2. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  3. MongoDB复制集原理和配置

    MongoDB高手课_MongoDB_NoSQL-极客时间极客时间推出的MongoDB高手课是帮助互联网从业者学习MongoDB.NoSQL的在线课程,极客时间是面向IT领域的知识服务产品,致力于帮助 ...

  4. MongoDB复制集(Replication Sets)介绍

    近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中.我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支 ...

  5. MongoDB复制集与Raft协议异同点分析

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.日志复制流程: a.raft leader节点在接收client请求后,先将请求写到日志中,再将日志通过 ...

  6. 配置MongoDB复制集

    什么是复制集? 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复. 复制集的优势如下: 让数据更安全 高数据可用性 ...

  7. MongoDB复制选举原理及复制集管理

    一.MongoDB复制集的选举原理 复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog日志同步应用到其他从节点的过程. 复制集的节点是通过选 ...

  8. MongoDB复制集技术

    为什么使用MongogDB复制集技术? mysql中:一主一从,一主多从结构存在的问题 1. fileover(故障转移)a) 选主投票b) 切换 2. 是否对就用透明化 3. 数据补偿的问题a) 两 ...

  9. Raft与MongoDB复制集协议比较

    在一文搞懂raft算法一文中,从raft论文出发,详细介绍了raft的工作流程以及对特殊情况的处理.但算法.协议这种偏抽象的东西,仅仅看论文还是比较难以掌握的,需要看看在工业界的具体实现.本文关注Mo ...

  10. MongoDB 复制集的选举原理

    复制的原理         复制时基于啊哦做日志 oplog , 相当于 MySQL 中的二进制日志,只记录发生改变的记录.复制是将主节点的oplog 日志同步并应用到其他从节点的过程. 选举的原理 ...

最新文章

  1. golang存储密码
  2. Java中String类中compareTo( )方法
  3. springboot 后台模板_spring boot实战
  4. java1.8输出语句_[【小白学Java——干货】1.初学Java,认识语法、变量与输出语句...
  5. DPDK跟踪库:trace library
  6. angular 关闭当前页_angular刷新当前页 angularjs页面不刷新的解决办法 - 电脑常识 - 服务器之家...
  7. android studio 新建的项目无法绘制界面
  8. linux命令cd 什么意思,Linux命令 cd ./.是什么意思
  9. 微信小程序画布canvas制作海报图片清晰度过低
  10. 企业必须面对云计算时代
  11. html5 表单 重置,css修改input表单默认样式重置与自定义大全
  12. 微信小程序video默认不播放且显示视频第一帧
  13. 【ansys workbench】1.零件分析基本思路讲解
  14. 干货满满 | 不容错过的数据科学入门数学指南
  15. 学习 Python 之 SymbolicPython库
  16. IOS 文本操作笔记——CHARACTERSET
  17. verilog基础——always、initial
  18. 函数分离常数法 oracle,函数值域之《分离常数法》正确打开方式
  19. 20160411_使用老毛桃破解电脑密码
  20. 计算机组成原理-第一章(1)-概述

热门文章

  1. vue 分布式微服务_分布式微服务架构选项
  2. IntelliJ IDEA Live Temlates功能使用举例介绍
  3. 天猫不是不想自建物流
  4. 我的职业能力测试结果
  5. 无法连接共享打印机,报错0x0000011b
  6. MaNGOS数据库安装注意事项
  7. 开源一个自己用go语言加mangos-go消息中间件制作的文件同步工具
  8. WIN7 背景设置浅绿色 保护眼睛
  9. 2G/3G核心网演进与网络结构
  10. 小福利,带你使用scrapy框架爬取苏宁图书海量信息