2019独角兽企业重金招聘Python工程师标准>>>

1.   复制

1.1. 复制简介

MongoDB复制是将数据同步在多个服务器的过程。

复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。

复制还允许您从硬件故障和服务中断中恢复数据。

1.2. 什么是复制

l  保障数据的安全性

l  数据高可用性 (24*7)

l  灾难恢复

l  无需停机维护(如备份,重建索引,压缩)

l  分布式读取数据

1.3. MongoDB复制原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

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

1.4. 复制架构

以上结构图总,客户端总主节点读取数据,在客户端写入数据到主节点是, 主节点与从节点进行数据交互保障数据的一致性。

1.5. 复制特征

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

2.   分片

2.1. 分片简介

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

2.2. 为什么使用分片

  • 复制所有的写入操作到主节点
  • 延迟的敏感数据会在主节点查询
  • 单个副本集限制在12个节点
  • 当请求量巨大时会出现内存不足。
  • 本地磁盘不足
  • 垂直扩展价格昂贵

2.3. 分片架构

上图中主要有如下所述三个主要组件:

Shard:

用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

Config Server:

mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

Query Routers:

前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用

3.   复制+分片配置

3.1. 基础组件

操作系统: CentOS6.5 x64

Mongodb版本: 3.4.4

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.4.tgz

集群

IP

端口号

rs0

192.168.1.90

26001

rs0

192.168.1.9

26001

rs1

192.168.1.90

26002

rs1

192.168.1.9

26002

rs2

192.168.1.90

26003

rs2

192.168.1.9

26003

Configure server: 192.168.1.90:26007、192.168.1.9:26007

Router                : 192.168.1.90:26010、192.168.1.9:26010

3.2. 复制配置

下载软件并解压到指定目录

解压软件

tar xvf mongodb-linux-x86_64-rhel62-3.4.4.tgz

创建安装目录

mkdir –p /data/usr/local/mongodb/

复制可执行文件到安装目录

cp -a mongodb-linux-x86_64-rhel62-3.4.4/bin /data/usr/local/mongodb/

创建mongodb存储目录

mkdir –p /data/mongodb26001mkdir –p /data/mongodb26002mkdir –p /data/mongodb26003mkdir –p /data/mongodb26007mkdir –p /data/mongodb26010

配置文件配置

cat /etc/mongodb26001.confport=26001logpath=/data/mongodb26001/mongod26001.loglogappend=truepidfilepath=/data/mongodb26001/26001.pid dbpath=/data/mongodb26001#bind_ip=mongodb1.example.net,127.0.0.1maxConns=500replSet=rs0shardsvr=true#auth=true#keyFile=/data/usr/local/mongodb/mongodbkey.cert#fork=true#cpu=true#noauth=true

启动

nohup mongod -f /etc/mongodb26001.conf &

初始化

mongo 192.168.1.90:26001rs.initiate()rs.conf()

以上配置在192.168.1.9上重复执行

启动备用实例(192.168.1.9上执行)

nohup mongod -f /etc/mongodb26001.conf &

切换到192.168.1.90上

执行mongo 192.168.1.90:26001

rs.add("192.168.1.9:26001")

验证

rs.status()

集群rs1rs2同上

3.3. 分片配置

添加Config Server

cat /etc/mongodb26007.confport=26007logpath=/data/mongodb26007/mongod26007.loglogappend=truepidfilepath=/data/mongodb26007/26007.pid dbpath=/data/mongodb26007#bind_ip=mongodb7.example.net,127.0.0.1maxConns=500replSet=configReplSetconfigsvr=true#auth=true#keyFile=/data/usr/local/mongodb/mongodbkey.cert#fork=true#cpu=true#noauth=true

192.168.1.9上配置文件相同

启动(两个都启动)

nohup mongod -f /etc/mongodb26002.conf &

初始化配置

rs.initiate({_id: "configReplSet",configsvr: true,members: [{ _id: 0, host: "192.168.1.90:26007" },{ _id: 1, host: "192.168.1.9:26007" }]})

验证

rs.statau()

添加route节点(mongos

[root@oracle ~]# cat /etc/mongodb26010.confport=26010logpath=/data/mongodb26010/mongod26010.loglogappend=truepidfilepath=/data/mongodb26010/26010.pid #dbpath=/data/mongodb26010#bind_ip=mongodb10.example.net,127.0.0.1maxConns=500configdb=configReplSet/192.168.1.90:26007,192.168.1.9:26007#configdb=configReplSet/mongodb7.example.net:26007,mongodb8.example.net:26008,mongodb9.example.net:26009#chunkSize=1 fork=true#auth=true#keyFile=/data/usr/local/mongodb/mongodbkey.cert#fork=true#cpu=true#noauth=true

启动router

nohup mongos -f /etc/mongodb26010.conf &

添加分片节点

mongo mongodb10.example.net:26010进入mongodb

sh.addShard( "rs0/192.168.1.90:26001,192.168.1.9:26001" )sh.addShard( "rs1/192.168.1.90:26002,192.168.1.9:26002" )sh.addShard( "rs2/192.168.1.90:26003,192.168.1.9:26003" )use testsh.enableSharding('test');sh.shardCollection('test.user',{uid:1})for(i=-100;i<1000;i++){db.user.insert({uid:i,username:'test-'+i});}

验证分片

sh.status()

不明显;

for(i=10000;i<1000000;i++){db.user.insert({uid:i,username:'test-'+i});}

4.   添加分片

1,  复制集配置完毕

2,  配置服务器不用动

3,  往路由服务器里添加分片即可

sh.addShard( "rs3/192.168.1.90:26004,192.168.1.91:26004,192.168.1.9:26004" )for(i=1000001;i<2000000;i++){db.user.insert({uid:i,username:'test-'+i});}

哈希分片

初始值:

移除分片

use admin;db.adminCommand( { listShards: 1 } )

(或者运行 sh.status() 或者 db.printShardingStatus() .)

shards._id 字段列出了每个分片的名字.

db.runCommand({removeShard: "rs0"});

5.   错误处理

5.1. 错误一

"infoMessage" : "could not find member to sync from",

解决办法:

等待,知道复制集同步完成即可

转载于:https://my.oschina.net/guanshanyue1990/blog/1456650

Mongodb3.4.4复制集群+分片配置文档相关推荐

  1. csrediscore访问redis集群_搭建文档 | centos7.6环境下redis5.0.8集群搭建

    " 本文作者:墨篱弦 " 一.做基础配置 a) 首先创建3个空文件 mkdir -p /server/redis_cluster/7001/datamkdir -p /server ...

  2. Mongodb3.4 复制集及分片配置

    2019独角兽企业重金招聘Python工程师标准>>> 复制技术: mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数 ...

  3. StarRocks 集群安装部署文档

    下表为规划的集群组件分配 域名 starrocks1 starrocks2 starrocks3 组件 mysql.FE(follower).BE1.datax-executor.datax FE(l ...

  4. k8s二进制集群部署安装文档

    一.架构拓扑图 版本信息: kubernetes v1.18.20/ etcd-v3.4.21 docker 18.09.9-3.el7 calico/node v3.8.9 安装所需要镜像: har ...

  5. biee 12c linux 安装,oracle biee 12c linux ha 集群安装配置手册.pdf

    oracle biee 12c linux ha 集群安装配置手册 Oracle BIEE 12c Linux 系统集群安装配置文档 仇 辉 2017 年 2 月 1 1 文档控制 编制 日期 作者 ...

  6. Mysql 8 group replication组复制集群单主配置图解

    Mysql 8 MGR集群单主配置图解 声明与简介 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理.本文主要介绍mysql的MGR集群的配置. ...

  7. solrloud集群的配置,zoookeeper+IK分词器+solrcloud,以及集群连接,分片管理

    什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不需要 ...

  8. Mongo集群分片部署实践(4.2版本)

    >使用一台Windows机器模拟集群分片部署,配置方案如下: 3个分片sharding 每一个分片由三个节点构成1主2备的 Replica Sets 3个配置节点Configserver 一个路 ...

  9. Elasticsearch7.x 安装及集群的配置

    简介 首先引用 Elasticsearch (下文简称 ES)官网的一段描述: Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例. 作为 ...

最新文章

  1. php访问获取全部网站状态码,php打开其他网站获取状态码
  2. squid反向代理(实现缓存)加速web
  3. C语言 | 指向指针的指针排序
  4. React开发(252):react项目理解 ant design spining加载中
  5. arm qt5 iconv 问题
  6. 路由算法及路由协议(详解)
  7. python之socket编程
  8. android获取年月日时分秒毫秒,Android获取两个日期其间间隔的天数
  9. erp采购总监个人总结_2018计划工作年终总结和2019目标:助理版、经理版、总监版(二)...
  10. spring-boot 免xml配置直接使用spring
  11. php 精度比较,PHP浮点数精度和比较
  12. SVNQuery–如何创建更新索引并查询
  13. P2P打洞原理(二十二)
  14. 转iOS深拷贝与浅拷贝 附NSSet讲解
  15. html文字自动轮播代码怎么写,图片轮播HTML代码
  16. 联想云计算机终端,联想智能云教室系统 V1.3.20.1109_C201105 最新官网版本
  17. 51单片机系列--led点阵屏显示汉字
  18. 集集自助服务密码重置
  19. 苹果应用审核指南最新
  20. 一文了解线控制动市场格局——7家公司10款产品盘点

热门文章

  1. MySQL之日期时间处理函数_MySQL之日期时间处理函数
  2. liteos内核驱动和linux,移植RTOS必备基础知识
  3. linux向上翻页_linux学习基础篇——文件管理(一)
  4. bios免电池补丁_补丁和权限 处理器漏洞多大这样看
  5. 计算机与材料化学应用背景介绍,计算机在材料工程中的应用.ppt
  6. python一对一_Python - Django - ORM 一对一表结构
  7. amp 调用链_调用链选型之Zipkin,Pinpoint,SkyWalking,CAT
  8. 华中科技大学应用高等工程数学_专业解析【第152期】| 机械电子工程课程设置及研究方向...
  9. 获取目录的大小函数linux,Linux C++获取文件夹大小1(通过lstat实现)
  10. bootcamp空间不足_Bootcamp安装WinXP补丁时C盘空间不足怎么办?