mongodb副本集

技术mongodb副本集 mongodb副本集服务器配置
HOSTNAME IP 应用
1-81 172.16.1.81 mongodb-3.6.23
1-82

Mongodb副本集。

服务器配置

主机名和IP应用程序

1-81 172.16.1.81 mongodb-3.6.23

1-82 172.16.1.82 mongodb-3.6.23

1-83 172.16.1.83 mongodb-3.6.23

0副本集数据过程

(1)主节点写入数据,辅助节点通过读取主节点的oplog获取拷贝信息,开始拷贝数据并将拷贝信息写入自身。

的Oplog。如果操作失败,备份节点将停止从当前数据源复制数据。如果备份节点由于某种原因挂起,当重新启动时。

之后,它会自动从oplog的最后一次操作开始同步。同步完成后,它会将信息写入自己的oplog。因为复制操作是先复制数据,再完成复制。

完成后写入oplog,有可能同一个操作会同步成两个副本,但是MongoDB在设计之初就考虑到了这个问题,执行了oplog的同一个操作。

多次执行与执行一次效果相同。简单来说就是:

主节点完成数据操作后,次节点会做出一系列动作来保证数据同步:

1)检查本地库的oplog.rs集合,找出最新的时间戳。

2)检查主节点本地库的oplog.rs集合,找出大于此时间戳的记录。

3)将找到的记录插入到您自己的oplog.rs集合中,并执行这些操作。

(2)副本集的同步与主从同步相同,是一个异步同步过程。不同之处在于副本集具有自动故障转移功能。原则是奴隶一方。

从主端获取日志,然后在自己身上按完整的顺序执行日志中记录的各种操作(这个日志不记录查询操作),这个日志就是。

是本地数据库中的oplog.rs表。默认情况下,该表在64位计算机上相对较大,占磁盘大小的5%。oplog.rs的大小可以在启动时用作参数。

Set' - oplogSize 1000' in m.

(3)请注意,在复制副本集环境中,如果所有辅助节点都关闭,将只剩下主节点,最后主节点将变成辅助节点。

提供服务。

(4)默认情况下,mongodb从主节点读写数据。副本节点上不允许读取和写入,因此需要将副本节点设置为读取。

1配置参数。

# cat/opt/MongoDB/conf/MongoDB . conf EOF

dbpath=/opt/mongodb/data

#数据库文件位置

bind_ip=172.16.1.81

#绑定地址,默认为127.0.0.1,只能本地连接,每个节点的绑定ip不同。

端口=27017

# port,默认为27017,MongoDB的默认服务TCP端口,监听客户端连接。

日志=真

#启用日志文件,默认情况下是启用的。

log path=/opt/MongoDB/log/MongoDB . log

#日志文件位置,日志文件必须存在,否则将报告错误。

pidfilepath=/opt/MongoDB/MongoDB . PID

#后台进程pid文件。

对数=真

#通过追加写入日志。

安静=真实

#这个选项可以过滤掉一些无用的日志信息。如果需要调试,请设置为false。

fork=true

#作为守护进程运行。

# shardsvr=真

#碎片配置

#directoryperdb=false

#是否将数据修改为目录存储模式,默认值为false。

#auth=true

# KeyFile=/opt/MongoDB/conf/MongoDB-KeyFile

#群集私钥的完整路径,仅对复制集体系结构有效,在auth=true时配置。

replSet=mongodb-replset

# mongodb副本集名称。

oplogSize=40960

#设置oplog的大小。节点操作记录存储在本地的oplog中,以便从kula中检索。

#单位mb,磁盘满后循环覆盖。默认值为磁盘大小的5%。

文件结束

2创建集群。

# mongo -主机172.16.1.81 -端口27017

使用管理员

#定义副本集配置变量,其中_ id :“MongoDB-replSet”和mongodb.conf配置参数“replSet”应保持相同。

config={ _ id : ' MongoDB-repl set ',members:[{_id:0,host : ' 172 . 16 . 1 . 81:27017 ' },{_id:1,host : ' 172 . 16 . 1 . 82:27017 ' },{_id:2,host : ' 1770

#初始化副本集配置。

rs.initiate(配置)

#查看集群配置。

rs.conf()

#检查集群节点的状态。

rs.status()

注:

成功配置复制副本后,172.16.1.81是复制副本的主节点,172.16.1.82/83是复制副本的辅助节点。

健康:1 1 1正常,0表示异常。

状态:1小值是主节点,大值是次节点。

#从库中设置延迟。

cfg=rs.conf()

cfg.members[2].优先级=0

cfg.members[2].隐藏的

= true
cfg.members[2].slaveDelay = 3600
rs.reconfig(cfg)
注:
这里将id为2的172.16.1.83节点作为延迟从库,延迟时间为3600s。
cfg.members[2].priority = 0 表示延迟从库永远不会变为主节点。
3 添加认证
(1) 创建管理用户(在主节点上操作)
# mongo --host 172.16.1.81 --port 27017
use admin
db.createUser({user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
exit
(2) 分发认证key(在主节点上操作)
# openssl rand -base64 741 /opt/mongodb/conf/mongodb-keyfile
# chmod 600 /opt/mongodb/conf/mongodb-keyfile
# chown mongodb:mongodb /opt/mongodb/conf/mongodb-keyfile
# scp -p /opt/mongodb/conf/mongodb-keyfile root@172.16.1.82:/opt/mongodb/conf/
# scp -p /opt/mongodb/conf/mongodb-keyfile root@172.16.1.83:/opt/mongodb/conf/
# ssh -p 22 root@172.16.1.82 "chown mongodb:mongodb /opt/mongodb/conf/mongodb-keyfile"
# ssh -p 22 root@172.16.1.83 "chown mongodb:mongodb /opt/mongodb/conf/mongodb-keyfile"
(3) 修改配置文件(在三个节点上分别操作)
# cat /opt/mongodb/conf/mongodb.conf EOF
auth=true
keyFile=/opt/mongodb/conf/mongodb-keyfile
EOF
(4) 重启mongodb服务(依次重启三个节点)
# systemctl restart mongodb.service
# systemctl status mongodb.service
(5) 测试
# 主节点
# mongo --host 172.16.1.81 --port 27017 -uroot -p'123456' admin
use master_slave_test
function add(){var i = 0;for(;i7;i++){db.persons.insert({"name":"master_slave_test"+i})}}
add()
db.persons.find()
# 从节点
# mongo --host 172.16.1.82 --port 27017 -uroot -p'123456' admin
db.getMongo().setSecondaryOk()
use master_slave_test
db.persons.find()
# mongo --host 172.16.1.83 --port 27017 -uroot -p'123456' admin
db.getMongo().setSecondaryOk()
use master_slave_test
db.persons.find()
注:
# mongodb默认是从主节点读写数据的,副本节点上不允许读写,需要设置副本节点可以读
mongodb-replset:SECONDARY db.getMongo().setSecondaryOk() = mongodb-replset:SECONDARY rs.secondaryOk()
4 副本集的工作流程
(1) mongodb的oplog.rs表记录日志是默认开启的,大小为磁盘的5%。
(2) 在MongoDB副本集中,主节点负责处理客户端的读写请求,备份节点则负责映射主节点的数据。备份节点的工作原理过程可以大
致描述为,备份节点定期轮询主节点上的数据操作,然后对自己的数据副本进行这些操作,从而保证跟主节点的数据同步。至于主节
点上的所有数据库状态改变的操作,都会存放在一张特定的系统表中。备份节点则是根据这些数据进行自己的数据更新。
(3) oplog
上面提到的数据库状态改变的操作称为oplog(operation log,主节点操作记录)。oplog存储在local数据库的"oplog.rs"表中。
副本集中备份节点异步的从主节点同步oplog,然后重新执行它记录的操作,以此达到了数据同步的作用。关于oplog有几个注意的
地方:
1) oplog只记录改变数据库状态的操作。
2) 存储在oplog中的操作并不是和主节点执行的操作完全一样,例如"$inc"操作就会转化为"$set"操作。
3) oplog存储在固定集合中(capped collection),当oplog的数量超过oplogSize,新的操作就会覆盖就的操作。
(4) 数据同步
在副本集中,有两种数据同步方式:
1) initial sync(初始化): 这个过程发生在当副本集中创建一个新的数据库或其中某个节点刚从宕机中恢复,或者向副本集中添
加新的成员的时候,默认的副本集中的节点会从离它最近的节点复制oplog来同步数据,这个最近的节点可以是primary也可以是拥
有最新oplog副本的secondary节点。该操作一般会重新初始化备份节点,开销较大。
2) replication(复制): 在初始化后这个操作会一直持续的进行着,以保持各个secondary节点之间的数据同步。
(5) initial sync
当遇到无法同步的问题时,只能使用以下两种方式进行initial sync了
1) 第一种方式就是停止该节点,然后删除目录中的文件,重新启动该节点。这样这个节点就会执行initial sync。
注意: 通过这种方式sync的时间是根据数据量大小的,如果数据量过大,sync时间就会很长,同时会有很多网络传输,可能会影响
其他节点的工作。
2) 第二种方式是停止该节点,然后删除目录中的文件,找一个比较新的节点,然后把该节点目录中的文件拷贝到要sync的节点目录
中。
3) 通过上面两种方式中的一种,都可以重新恢复宕机的节点。
(6) 副本集管理
1) 查看oplog的信息通过"db.printReplicationInfo()"命令可以查看oplog的信息,字段说明:
configured oplog size # oplog 文件大小
log length start to end # oplog 日志的启用时间段
oplog first event time # 第一个事务日志的产生时间
oplog last event time # 最后一个事务日志的产生时间
now: # 现在的时间
2) 查看slave状态通过"db.printSlaveReplicationInfo()"可以查看slave的同步状态当插入一条新的数据,然后重新检查
slave状态时,就会发现sync时间更新了。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/48868.html

(0)

相关推荐

  • 电脑手机互传文件,怎样通过电脑给手机发送文件

    技术电脑手机互传文件,怎样通过电脑给手机发送文件通过电脑给手机发送文件电脑手机互传文件,可以通过电脑QQ传到我到手机设备中,然后在从手机QQ下载到自己的手机就行了,具体的方法如下: 1、首先在电脑上的QQ页面点击【我的设

    生活 2021年10月24日
  • Spring Cloud 超时和重试机制是什么

    技术Spring Cloud 超时和重试机制是什么这篇文章给大家介绍Spring Cloud 超时和重试机制是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。本文基于Spring Cloud Gr

    攻略 2021年10月20日
  • 如何理解mysql的锁机制

    技术如何理解mysql的锁机制本篇文章为大家展示了如何理解mysql的锁机制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 锁0.1 锁机制当前MySQL已经支持 ISAM, M

    攻略 2021年11月16日
  • Java关键字和保留字是什么

    技术Java关键字和保留字是什么这篇文章主要讲解了“Java关键字和保留字是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java关键字和保留字是什么”吧!  1、访

    攻略 2021年11月4日
  • Spring5路径匹配器PathPattern有什么用

    技术Spring5路径匹配器PathPattern有什么用这篇文章主要为大家展示了“Spring5路径匹配器PathPattern有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并

    攻略 2021年11月24日
  • 如何看iphone里的数据分析(怎么能看懂iphone的数据分析)

    技术如何进行iPhone步行数据的分析这期内容当中小编将会给大家带来有关如何进行iPhone步行数据的分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我将展示如何利用 pandas

    攻略 2021年12月20日