搭建高可用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> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...
随机推荐
- Kettle(Pentaho)实现web方式远程执行job或transformation
一.背景 公司在用kettle做数据etl,每做完一个job或transformation发布上线想要立即执行看数据效果的话每次都是找运维同学登陆服务器打开kettle找到对应的文件点击执行,整个过程 ...
- Bezier(贝塞尔)曲线简介
在计算机图形学中,Bezier曲线被广泛用于对平滑的曲线进行建模,对其有适当的了解是必要的.一条Bezier曲线由一系列控制点定义,称为曲线的阶数,由此可知,使用两个控制点()可以定义一条一阶Bezi ...
- TCP&UDP
TCP(传输控制协议) 建立连接,形成传输数据的通道 在连接中进行大数据传输(数据大小不受限制) 通过三次握手完成连接,是可靠协议,安全送达(三次握手向服务器发送请求,响应请求回复,发送数据) 必须建 ...
- Java 异步 IO
新的异步功能的关键点,它们是Channel 类的一些子集,Channel 在处理IO操作的时候需要被切换成一个后台进程.一些需要访问较大,耗时的操作,或是其它的类似实例,可以考虑应用此功能. ...
- nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战
前天在玩OLED时想完成一直想弄得一个东西,就是简单的单片机游戏.因为STM32和nRF51822的内存足够,所以就用缓存数组的方法来显示图像(我也不知道术语是啥,反正就是在内存中建立一个128X64 ...
- 修改WebView
http://jwdev.cn/2015/09/28/use-javascript-to-delete-web-element/
- 由Spring框架中的单例模式想到的
单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例 注:Spring源码的版本4.3.4 Spring依赖注入Bean实例默认 ...
- poj1611
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 35918 Accepted: 17458 De ...
- [bzoj1070][SCOI2007]修车——费用流
题目大意: 传送门 题解: 本题和(POJ3686)[http://poj.org/problem?id=3686]一题一模一样,而且还是数据缩小以后的弱化版QAQ,<挑战程序设计竞赛>一 ...
- 【录教程必备】推荐几款屏幕录制工具(可录制GIF)
我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊.刚设计出来网站的动画效果怎么样啊.某某电影里面的一个镜头多么经典啊.打得大快人心的NBA绝杀瞬间是怎么回事 ...