搭建高可用mongo集群3.4版本
搭建高可用mongo集群3.4版本
说在开始之前:在搭建这个环境之前,已经有了一个师兄搭好的环境,虽然一样很棒,但是没有经过自己的手出来的东西,还是不属于自己,所以摸索着自己搭建一个吧,好巧不巧的是,新的版本中跟以前的版本搭建方式有了一些区别,解决这些问题,颇费了一番周折,在网上查不到有助于解决的信息,索性就开始了撰写自己的第一篇博客,意料之外,情理之中,我知道早晚有一天会开始写,只是不确切的知道什么时候开始,这个时候来了,索性就这样做吧。
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。不过就是因为这些问题Nosql诞生了。
NOSQL有这些优势:
大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制。
高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病。
高性能,Nosql通过简单的key-value方式获取数据,非常快速。还有NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多。
灵活的数据模型,NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。
高可用,NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。比如mongodb通过mongos、mongo分片就可以快速配置出高可用配置。
mongo在应用中有几种常见的模式,单实例、主从模式、副本集模式、分片。这几个方面,有相关博客已经做了很好的介绍和实践,这里就不再赘述了。在此贴上相关链接
1、单实例+主从模式: http://www.lanceyan.com/tech/mongodb/mongodb_cluster_1.html
2、副本集模式: http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html
3、深入副本集内部机制:http://www.lanceyan.com/tech/mongodb_repset2.html
4、分片: http://www.lanceyan.com/tech/arch/mongodb_shard1.html
这些不说,那我们说说什么呢,当然要说新版本新特性,还有,我搭建集群时遇到的坑,这是个漫长的故事。
接下来实战一下如何搭建高可用的mongodb集群:
首先确定各个组件的数量,mongos 3个, config server 3个,数据分3片 shard server 3个,每个shard 有一个副本一个仲裁也就是 3 * 2 = 6 个,总共需要部署15个实例。这些实例可以部署在独立机器也可以部署在一台机器,我们这里测试资源有限,只准备了 3台机器,在同一台机器只要端口不同就可以,看一下物理部署图:

搭建环境:
操作系统:linux ubuntu16.04.1 server
mongo:mongodb-linux-x86_64-ubuntu1604-3.4.1
(大致的部署步骤我就仿照大神的步骤来,重点是中间的部署过程)
- 准备机器,IP分别设置为: 10.10.2.121、10.10.2.122、10.10.2.123。
- 分别在每台机器上建立mongodb分片对应测试文件夹。
#存放mongodb数据文件mkdir-p/data/mongodbtest#进入mongodb文件夹cd/data/mongodbtest
- 下载解压mongo,从官网下载mongodb-linux-x86_64-ubuntu1604-3.4.1.tgz
下载到本地,再上传到服务器,或者直接下载到服务器
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.8.tgz
2. #解压下载的压缩包到当前文件夹:tart -zxvf mongodb-linux-x86_64-ubuntu1604-3.4.1.tgz
- 分别在每台机器建立mongos 、config 、 shard1 、shard2、shard3 五个目录,因为mongos不存储数据,只需要建立日志文件目录即可。
#建立mongos目录mkdir-p/data/mongodbtest/mongos/log#建立config server 数据文件存放目录mkdir-p/data/mongodbtest/config/data#建立config server 日志文件存放目录mkdir-p/data/mongodbtest/config/log#建立mongos server 日志文件存放目录mkdir-p/data/mongodbtest/mongos/log#建立shard1 数据文件存放目录mkdir-p/data/mongodbtest/shard1/data#建立shard1 日志文件存放目录mkdir-p/data/mongodbtest/shard1/log#建立shard2 数据文件存放目录mkdir-p/data/mongodbtest/shard2/data#建立shard2 日志文件存放目录mkdir-p/data/mongodbtest/shard2/log#建立shard3 数据文件存放目录mkdir-p/data/mongodbtest/shard3/data#建立shard3 日志文件存放目录mkdir-p/data/mongodbtest/shard3/log
- 规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003. - 在每一台服务器分别启动配置服务器。
sudo ./mongodb-linux-x86_64-ubuntu1604-3.4.1/bin/mongod --configsvr --replSet configReplSet --dbpath /data/mongodbwsdc/config/data --port 21000 --logpath /data/mongodbwsdc/config/log/config.log --fork
新版本中,官网强制添加副本集,必须给配置添加副本才可以启动后续mongos服务。这里configReplSet 为自定义副本集名称,接下来启动mongos也会用到该replSetName.
- 初始化配置副本集
- 选择启动一台服务器,启动mongo客户端连接mongod
mongo 10.10.2.121:21000
- #添加配置
config = { _id: "configReplSet", configsvr: true, members: [ { _id : 0, host : "10.10.2.121:21000" }, { _id : 1, host : "10.10.2.122:21000" }, { _id : 2, host : "10.10.2.123:21000" } ] } - #初始化配置
rs.initiate(config)
- 选择启动一台服务器,启动mongo客户端连接mongod
- 在每一台服务器分别启动mongos服务器。
sudo ./mongodb-linux-x86_64-ubuntu1604-3.4.1/bin/mongos --configdb configReplSet/10.10.2.121:21000,10.10.2.122:21000,10.10.2.123:21000 --port 20000 --logpath /data/mongodbwsdc/mongos/log/mongos.log --fork
- 配置各个分片的副本集。
- 在每个服务器上配置分别设置分片1、2、3服务器及副本集shard1、shard2、shard3
sudo ./mongodb-linux-x86_64-ubuntu1604-3.4.1/bin/mongod --shardsvr --replSet shard1 --port 22001 --dbpath /data/mongodbwsdc/shard1/data --logpath /data/mongodbwsdc/shard1/log/shard1.log --fork --nojournal --oplogSize 10 sudo ./mongodb-linux-x86_64-ubuntu1604-3.4.1/bin/mongod --shardsvr --replSet shard2 --port 22002 --dbpath /data/mongodbwsdc/shard2/data --logpath /data/mongodbwsdc/shard2/log/shard2.log --fork --nojournal --oplogSize 10 sudo ./mongodb-linux-x86_64-ubuntu1604-3.4.1/bin/mongod --shardsvr --replSet shard3 --port 22003 --dbpath /data/mongodbwsdc/shard3/data --logpath /data/mongodbwsdc/shard3/log/shard3.log --fork --nojournal --oplogSize 10
- 任意登陆一个机器,初始化分片副本集配置
搭建高可用mongo集群3.4版本的更多相关文章
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- [转]搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- [转]搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用mongodb集群(四)—— 分片
按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...
- 搭建高可用mongodb集群—— 分片
从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出 ...
- 搭建高可用mongodb集群(二)—— 副本集
在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
随机推荐
- SDWebImage源码解读之干货大总结
这是我认为的一些重要的知识点进行的总结. 1.图片编码简介 大家都知道,数据在网络中是以二进制流的形式传播的,那么我们该如何把那些1和0解析成我们需要的数据格式呢? 说的简单一点就是,当文件都使用二进 ...
- JDK1.8源码阅读系列之三:Vector
本篇随笔主要描述的是我阅读 Vector 源码期间的对于 Vector 的一些实现上的个人理解,用于个人备忘,有不对的地方,请指出- 先来看一下 Vector 的继承图: 可以看出,Vector 的直 ...
- MEAN教程3-NPM安装
NPM简介Node只是一个平台,它的功能和API将只是一个最小集.想获得更多的功能,可以使用模块系统来扩展平台.安装.更新和删除Node.js模块最好的方法是使用NPM工具.NPM有如下两个主要特性: ...
- gRPC中Any类型的使用(Java和NodeJs端)
工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...
- 理解javascript this 的绑定过程
在理解this 的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的位置).只有仔细分析调用位置才能回答这个问题:这个this 到底引用的是什么?通常来说,寻找调用位 ...
- UICollectionView 很简单的写个瀑布流
你项目中要用到它吗? 可能会在你的项目中用到这玩意,最近也是要用就简单的写了一个 Demo.没多少代码,就不放Git了,下面会详细点的说说代码的,要还有什么问题的小伙伴可以直接Q我,也可以把Demo发 ...
- mysql优化---订单查询优化:异步分页处理
订单分页查询: 老的代码是顺序执行查询数据和计算总记录数,但是如果条件复杂的话(比如关联子表)查询的时间要超过20s种 public static PagedList<Map<String ...
- git链接GitHub命令及基本操作
Git是一款不错的代码管理工具,下面引用百科的一段话: Git是用于Linux内核开发的版本控制工具.与CVS.Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服 ...
- index_merge引发的死锁排查
概述 前几天排查了一个死锁问题,最开始百思不得其解,因为发生死锁的两个事务是单语句事务,语句类型相同(where属性列相同,仅值不同),而且语句都走了相同的索引,但最终确实发生了死锁.通过定位排查发现 ...
- Linux安装 Mysql
背景 前不久开始学习部署ambari,在安装mysql的时候遇到了点问题,现在从网上找了点部署流程记录下来便于以后安装mysql. Centos 7.2 安装 Mysql 5.7.13 首先要安装yu ...