搭建高可用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> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
随机推荐
- 源码(08) -- java.util.ListIterator<E>
java.util.ListIterator<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- java 重写的学习
本文全文转自:http://www.cnblogs.com/happyframework/p/3332243.html,非常感谢 Java中的重写规则比较灵活,具体如下: 除了 private 修饰之 ...
- C#中字符和字符串总结
Char类是C#提供的字符类型,String是C#提供的字符串类型. 字符: Char类在C#中表示一个Unicode字符. Char类只定义一个Unicode字符. Char类常用的方法及说明如下: ...
- laravel项目中手机浏览器在线阅读pdf文件-->PDFJS插件
第一步:下载链接:http://mozilla.github.io/pdf.js/getting_started/#download 第二步:将下载的文件放在项目中. 第三步:在项目中想要预览的地方给 ...
- 设置Image渲染模式使用TintColor
通过使用控件Tint Color,例如UIImageView,UIButton等 设置UIImage的渲染模式,使你用一张图片可以渲染成不同颜色,例如设置UIImage的渲染模式:UIImage.re ...
- VSCode从非根目录编译golang程序
1.问题提出 "习惯在项目目录里建src放源码文件,根目录里放配置文件或者别的什么,在交付时直接忽视掉src目录就行了,但vscode好像不能这样愉快的玩耍..."??? 要实现把 ...
- 从0移植uboot (二) _启动流程分析
经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够,首先,此时的uboot并不符合三星芯片对bootloader的格式要求,其次,此时的uboot.bin也没有结合 ...
- IntelliJ IDEA 报错:Error:java: 未结束的字符串文字
构建javaweb项目时,控制台报错: 这个问题是由于编码冲突导致的,在设置中找到File Encodings可以看到 ide采用utf-8编码格式,而项目则是GBK编码方式,由此产生冲突. 解决办法 ...
- javascript小程序——用嵌套循环来输出乘法口诀表
在学习javascript过程中,一开始接触循环语句时一般拿乘法口诀表来练手,这里我将自己的练习贴在这里,希望能给和我一样的初学者些许帮助,也希望大神们能够不吝指教. 首先,来看一下乘法口诀表是什么样 ...
- js中的面向对象入门
什么是对象 我们先来看高程三中是如何对对象进行定义的 "无序属性的集合,其属性可以包括基本值.对象或者函数",对象是一组没有特定顺序的的值.对象的没个属性或方法都有一个俄名字,每个 ...