mongoDB(二)mongoDB副本集实战

mongoDB副本集实战

背景

mongoDB单台服务器的特点:

- 数据有丢失风险
- 单台服务器无法做高可用

mongoDB副本集的特点:

- 高可用架构,预防数据丢失
- 多台副本数据保持同步和一致
- mongodb副本集在有问题的时候自动切换

实战准备

副本集环境配置

  • 生产环境至少三台服务器

    机器IP
    主机名
    mongo端口
    配置文件路径
    角色
    192.168.56.11
    centos7-node1
    27017
    /data/mongodb/27017/mongodb.conf

192.168.56.12
centos7-node2
27018
/data/mongodb/27018/mongodb.conf

192.168.56.13
centos7-node3
27019
/data/mongodb/27019/mongodb.conf

[[email protected] ~]# cd /opt/ && wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.17.tgz
[[email protected] ~]# tar xf /opt/mongodb-linux-x86_64-4.0.17.tgz
[[email protected] ~]# mv mongodb-linux-x86_64-4.0.17/ /usr/local/mongodb
[[email protected] ~]# mkdir -pv /data/mongodb/27017
[[email protected] ~]# vim /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: copySet
[[email protected] ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf    #启动服务
[[email protected] ~]# netstat -tanlp | grep mongo   #进程查看
  • 其他节点的配置只需要修改端口即可,然后修改配置文件,日志目录即可,下面是服务启动命令
[[email protected] ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27018/mongodb.conf
[[email protected] ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27019/mongodb.conf 

副本集初始化

需要注意的事项:

  • 随便登录到一个mongdb
[[email protected] 27017]# /usr/local/mongodb/bin/mongo localhost:27017   #登陆到第一台
> config={
 _id: "copySet",members:[
  {_id:0,host:"192.168.56.11:27017"},
  {_id:1,host:"192.168.56.12:27018"},
  {_id:2,host:"192.168.56.13:27019"},
 ]
}
> rs.initiate(config)
> rs.status()

测试副本集的数据同步

  • 插入数据只能从Primary进行,Secondary只能读取数据
copySet:PRIMARY> use test
copySet:PRIMARY> db.myuser.insert({userid:1})
  • 从库查询数据读取: 无异常则ok
copySet:SECONDARY> rs.slaveOk()
copySet:SECONDARY> show dbs
copySet:SECONDARY> use test
copySet:SECONDARY> db.myuser.find()
copySet:SECONDARY> rs.printSlaveReplicationInfo()    #查看从库延时

副本集的自动切换

  • 当primary挂了,会选举其中的一台作为primary
  • 如果集群之剩下一个实例的话,会出异常:(只有一台的话就是)
# 登陆primary,然后停服务
copySet:PRIMARY> use admin
copySet:PRIMARY> db.shutdownServer()

其余两台会选举primary节点

通过优先级指定primary

  • 默认的优先权重都是1
  • 副本集中的primary是选的权重最高的
  • 优先级权重设置如下[在primary节点设置]:
copySet:PRIMARY> conf = rs.config()
copySet:PRIMARY> conf.members[0].priority = 5
copySet:PRIMARY> conf.members[1].priority = 4
copySet:PRIMARY> conf.members[2].priority = 3
copySet:PRIMARY> rs.reconfig(conf)

副本集的伸缩

  • mongoDB副本集的拓展性非常好,往副本集里添加实例和删除实例都很方便
  • 添加副本集数据能够自动同步
  • 准备一个新的机器和副本,设置端口和配置文件是27020,还有副本名称
  • 集群中添加副本集是在primary上操作,步骤如下
[[email protected] ~]# vim /data/mongodb/27020/mongodb.conf
systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/27020/mongodb.log
storage:
  dbPath: /data/mongodb/27020/
  journal:
    enabled: true
processManagement:
  fork: true
net:
  port: 27020
  bindIp: 0.0.0.0
replication:
  replSetName: copySet
[[email protected] ~]# /usr/local/mongodb/bin/mongod -f /data/mongodb/27020/mongodb.conf    #启动新节点
copySet:PRIMARY> rs.add(‘192.168.56.14:27020‘)      #primary节点加入新的节点,然后数据自动同步
copySet:PRIMARY> rs.remove(‘192.168.56.14:27020‘)   #移除secondary

mongoDB的备份和恢复

  • 单台服务器,一定要备份
  • 备份还原工具有:
    • mongodump: 备份
    • mongostore: 还原
  • 副本集的备份要在primary上进行

全量备份与还原

~]# mkdir /data/mongodbbacku
~]# /usr/local/mongodb/bin/mongodump -h 127.0.0.1:27020 -o /data/mongodbbackup/     #备份数据
~]# /usr/local/mongodb/bin/mongorestore -h 127.0.0.1 --port 27021 /data/mongodbbackup/             #还原数据

原文地址:https://blog.51cto.com/13812615/2484716

时间: 2024-08-23 14:24:47

mongoDB(二)mongoDB副本集实战的相关文章

搭建高可用mongodb集群(二)—— 副本集

http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 这篇文章看完这些问题就可以搞定了.NoSQL的产生就是为了解决大数据量.高扩展性.高

【六】MongoDB管理之副本集

一.复制介绍 所谓的复制就是在多个主机之间同步数据的过程. 1.数据冗余及可用性 复制技术提供数据冗余及可用性,在不同的数据库服务器上使用多个数据副本,复制技术防止单个数据库服务器出现数据故障而出现数据丢失.通过设置从库,你能在上面进行灾难切换.数据备份.报表服务等.在某些应用场景下,你还能提高读的能力,客户端通过将读和写请求分发到不同的服务器上面. 2.MongoDB复制技术 副本集是一组共享相同数据集的mongod实例.当所有写请求发向主库,而其他从库从主库上应用这些操作,以保证所有成员数据

mongoDB主从和副本集群配置

mongoDB主从和副本集群配置 Mongodb是时下流行的NoSql数据库(MongoDB是一个基于分布式文件存储的数据库),它的存储方式是文档式存储,并不是Key-Value形式.   优势: 快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右.) 很高的可扩展性–轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了) 他有一个很好的 replication 模式 (replica sets) 有很完善的Java API 他的存储格

【转】搭建高可用mongodb集群(二)—— 副本集

在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 这篇文章看完这些问题就可以搞定了.NoSQL的产生就是为了解决大数据量.高扩展性.高性能.灵活数据模型.高可用性.但是光通过主从模式的架构远远达不到上面几点,由此MongoDB设计了副本集和分片的功能

Docker搭建MongoDB 4.0副本集

环境: 系统版本:CentOS 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker-ce: 18.06 MongoDB: 4.0.3 宿主机IP:192.168.1.1 MongoDB1端口:30001 MongoDB2端口:30002 MongoDB3端口:30003 一.安装docker.docker-compose wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker

NoSQL -- Mongodb 安装 使用 副本集 备份恢复

Mongodb 是由c++编写的基于分布式文件存储的开源数据库系统,介于关系数据库和非关系数据库之间,支持查询语言很强大.高负载情况下,添加多个节点保证服务器性能,旨在为web应用提供可扩展的高性能存储:mongodb将数据存储为一个文档,由键值对(key=>value)组成,类似json对象. 官网:https://www.mongodb.com/ 应用: CERN,著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB: Craiglist,上使用MongoDB的存档数

MongoDB 3.0副本集搭建

环境配置 MongoDB安装 下载yum源配置 wget https://repo.mongodb.org/yum/redhat/mongodb-org-3.0.repo  mv mongodb-org-3.0.repo  /etc/yum.repos.d/ 安装mongodb yum -y install mongodb-org 修改mongodb配置文件 # 修改监听地址为0.0.0.0 net:   port: 27017   bindIp: 0.0.0.0 # 修改副本集配置 repli

mongodb安装和副本集的搭建

CentOS 编译安装 Mongodb Centos 7.0 + Mongodb 2.6.6 (实测 笔记 ) 环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso安装步骤: 1.安装基本软件包 [[email protected] ~]# yum install vim wget lsof gcc gcc-c++ bzip2 -y [[email protected] ~]# yum in

MongoDB shell 2 副本集方法

rs.initiate()   rs.addArb()   rs.help()   rs.printReplicationInfo() 查看到副本集操作日志 rs.remove() 减少副本集节点 rs.freeze() “冻结”mongodb实例 rs.status() 查看副本集状态 db.printSlaveReplicationInfo 查看复制集的同步状态 rs.add() 增加副本集节点 rs.stepDown() 将当前主库“降级” rs.slaveOk()   rs.conf()