我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mongodb----复制

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mongodb----复制


	mongodb----复制
[数据库教程]

mongodb复制原理
mongodb的复制最少需要两个节点,一个master,用于处理用户的请求,其余都是从节点,负责复制主节点上的数据。

mongodb常见集群环境:一主一从、一主多从。

master记录在其上的所有操作oplog,slave定期轮询master获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下:

技术图片
在上面的架构中,客户端从primary读取数据,在客户端写入数据到primary时,primary与secondary进行数据交互保障数据的一致性。

mongodb的副本有以下特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

环境如下

IP 角色
192.168.171.151 master
192.168.171.153 slave1
192.168.171.154 slave2

配置mongodb群集

#修改配置文件
[[email protected] ~]# mongo --version
MongoDB shell version v4.2.3
[[email protected] ~]# cat /data/mongodb/27017/mongodb.conf 
systemLog:     
 destination: file
 logAppend: true       
 path: /data/mongodb/27017/mongodb.log   
storage:           
 dbPath: /data/mongodb/27017/  
 journal:
   enabled: true
processManagement:    
 fork: true
net:
 port: 27017      
 bindIp: 0.0.0.0     
#添加如下两行
replication
 replSetName:test_cluster                       # 指定复制名称为replication(参与复制的节点指定的此名称必须一致)
#修改完毕后切记重启服务

参与复制的节点配置文件都需要写上面两行配置

初始化集群

# 登录到mongodb数据库中,进行以下操作
> use admin
switched to db admin
# 定义变量,下面ID就是配置文件中指定的副本集名称,members是一个数组,指定的是参与复制的所有节点监听地址及端口
> config = {_id:"test_cluster",members:[
...   {_id:0,host:"192.168.171.151:27017"},
...   {_id:1,host:"192.168.171.153:27017"},
...   {_id:2,host:"192.168.171.154:27017"}]
... }
# 引用变量config,初始化集群
> rs.initiate(config)  # 此指令必须在admin库中进行配置
> rs.initiate(config)
{
    "ok" : 1,     # 返回ok的值为1,则表示配置成功
# 群集配置成功后,命令提示符也会发生变化
test_cluster:SECONDARY>      # 一开始所有节点都是secondary
test_cluster:PRIMARY>          # 经过选举后,会选出primary,也就是主节点

配置secondary可读
配置复制后,默认secondary会复制当前primary的数据,并且secondary是不允许进行读写操作的。

当副本集初始化完成后,还需要在secondary上声明自己是从节点,才能查看数据。如下:

test_cluster:SECONDARY> rs.slaveOk()

集群状态相关查询

查看secondary延迟情况

test_cluster:PRIMARY> rs.printSlaveReplicationInfo()
source: 192.168.171.153:27017
    syncedTo: Tue Mar 24 2020 18:45:51 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary    # 这里显示延迟的秒数
source: 192.168.171.154:27017
    syncedTo: Tue Mar 24 2020 18:45:51 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary

查看副本集状态

test_cluster:SECONDARY> rs.status()

验证数据复制

# 登录到primary节点插入数据
test_cluster:PRIMARY> use mytest
test_cluster:PRIMARY> db.myuser.insert({name:"zhangsan",age:25})
test_cluster:PRIMARY> db.myuser.find()
{ "_id" : ObjectId("5e79e68b6c86e8d2435675c2"), "name" : "zhangsan", "age" : 25 }
# seconday节点进行查询验证
test_cluster:SECONDARY> use mytest
test_cluster:SECONDARY> db.myuser.find()
{ "_id" : ObjectId("5e79e68b6c86e8d2435675c2"), "name" : "zhangsan", "age" : 25 }

副本集的优先级
MongoDB 副本集的中,Secondary 会不断检测 Primary 的健康状况,一旦 Primary 故障,各 Secondary会根据优先级来选举一个新的Primary。在没有指定优先级的情况下,各实例的优先级为1,在优先级一样的情况下,无法预料到底哪个secondary会成为primary。
获取副本集的配置信息,各实例的优先级默认为1

test_cluster:PRIMARY> conf = rs.config()     # 将查询状态的指令定义为变量方便调用
# 定义各节点的优先级
test_cluster:PRIMARY> conf.members[0].priority = 10
10
test_cluster:PRIMARY> conf.members[1].priority = 5
5
test_cluster:PRIMARY> conf.members[2].priority = 2
2
test_cluster:PRIMARY> rs.reconfig(conf)       # 刷新配置
test_cluster:PRIMARY> rs.config().members      # 查看各实例当前的优先级

测试mongodb自动故障转移
在上面的优先级配置阶段,设置的当前primary的优先级为10,所以primary的角色没有发生改变,那么如果当前primary节点宕机呢?会不会按照我们的配置,将id为1的节点提升为primary(它的优先级为5,比另一个节点的优先级2要高)。

# 在primary节点停掉该实例
test_cluster:PRIMARY> use admin
test_cluster:PRIMARY> db.shutdownServer()
# 到优先级为2的节点,敲下回车,会发现命令提示符已经变了,如下:
test_cluster:SECONDARY> 
test_cluster:PRIMARY>

副本集的伸缩
新增一个mongodb,监听地址为:192.168.171.151:28018,配置文件参考前几个节点的配置文件(注意配置文件中的副本集名称要保持一致)。
MongoDB 副本集里添加实例和移除实例都非常方便,往 MongoDB 副本集添加实例数据能够自动同步,无需人工干预添加实例。数据是自动同步,rs.add 的优先权重默认是 1

# 增加节点
test_cluster:PRIMARY> use admin
test_cluster:PRIMARY> rs.add("192.168.171.151:28018")  # 添加新节点
# 删除节点(不可删除primary节点)
test_cluster:PRIMARY> rs.remove("192.168.171.151:28018")

注:副本集经过添加删除后顺序会乱,设置权重需要注意。

mongodb的数据备份与恢复

备份指令

>mongodump -h dbhost -d dbname -o dbdirectory

各指令解释如下:

-h:MongDB 所在服务器地址,例如:127.0.0.1,也可以指定端口号:127.0.0.1:27017
-d:需要备份的数据库实例,例如:mytest
-o:备份的数据存放位置,例如:/data/mongobackup/,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个备份的db名称的目录,这个目录里面存放该数据库实例的备份数据。

实例:

# 备份mytest集合
[[email protected] mongodb]# mongodump -h 192.168.171.151:27017 -d mytest -o /data/mongobackup
# 查看备份文件
[[email protected] mongobackup]# pwd
/data/mongobackup
[[email protected] mongobackup]# ls mytest/
myuser.bson  myuser.metadata.json

恢复数据库
命令格式如下:

>mongorestore -h dbhost -d dbname 存放备份数据的目录

各项指令解释如下:

-h:MongoDB 所在服务器地址
-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如 mytest

实例:

# 进入mytest删除这个库(但需要有这个库的备份)
test_cluster:PRIMARY> use mytest
test_cluster:PRIMARY> db.dropDatabase()
# 到本地进行数据库恢复
[[email protected] ~]# mongorestore -h 192.168.171.151:27017 -d lv_test /data/mongobackup/mytest

mongodb----复制

原文地址:https://blog.51cto.com/14227204/2517153

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mongodb----复制

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mongodb----复制

mongodb复制原理mongodb的复制最少需要两个节点,一个master,用于处理用户的请求,其余都是从节点,负责复制主节点上的数据。mongodb常见集群环境:一主一从、一主多从。master记录在其上的所有操作oplog,slave定期轮询master
mongodb----复制
2020-06-04

MongoDB复制集RS(ReplicationSet)

MongoDB复制集RS(ReplicationSet) 1.基本原理      基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种))如果发生主库宕机,复制集内部会进行投票选举,选择一个
MongoDB复制集RS(ReplicationSet)
2022-03-31

mongodb如何复制数据

MongoDB提供了多种方式来复制数据:1. **复制集(Replica Set)**:复制集是MongoDB中最常用的复制方式。它是一组MongoDB实例的集合,其中包含一个主节点(Primary)和多个从节点(Secondary)。主节
2023-09-06

MongoDB复制集与故障恢复机制是什么

MongoDB复制集是一组维护相同数据集的MongoDB实例。其中有一个主节点(primary)负责处理所有的写操作,其他节点是从节点(secondary),负责复制主节点上的数据并处理读操作。复制集还包括一个仲裁节点(arbiter),用
MongoDB复制集与故障恢复机制是什么
2024-05-07

mongoDB复制集修改 oplog 大小

ctiy:PRIMARY> use localswitched to db localctiy:PRIMARY> db.oplog.rs.stats().maxSize //查看大小NumberLong("53687091200") //这里为50G
mongoDB复制集修改 oplog 大小
2019-07-06

编程热搜

目录