搭建高可用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

(大致的部署步骤我就仿照大神的步骤来,重点是中间的部署过程)

  1. 准备机器,IP分别设置为: 10.10.2.121、10.10.2.122、10.10.2.123。 
  2. 分别在每台机器上建立mongodb分片对应测试文件夹。
    1. #存放mongodb数据文件
      mkdir-p /data/mongodbtest
    2. #进入mongodb文件夹
      cd/data/mongodbtest
  3. 下载解压mongo,从官网下载mongodb-linux-x86_64-ubuntu1604-3.4.1.tgz
    1. 下载到本地,再上传到服务器,或者直接下载到服务器

    2. 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

  4. 分别在每台机器建立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. 规划5个组件对应的端口号,由于一个机器需要同时部署 mongos、config server 、shard1、shard2、shard3,所以需要用端口进行区分。
    这个端口可以自由定义,在本文 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为22003.
  6. 在每一台服务器分别启动配置服务器。
    1. 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.

  7. 初始化配置副本集
    • 选择启动一台服务器,启动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)
  8. 在每一台服务器分别启动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
  9. 配置各个分片的副本集。
    • 在每个服务器上配置分别设置分片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
  10. 任意登陆一个机器,初始化分片副本集配置

  

  

搭建高可用mongo集群3.4版本的更多相关文章

  1. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  2. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  3. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  4. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

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

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  6. 搭建高可用mongodb集群(一)——配置mongodb

    在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...

  7. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  8. 搭建高可用mongodb集群—— 分片

    从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出 ...

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

    在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

随机推荐

  1. MyEclipse - 解决 MyEclipse build workspace慢,validation javascript更慢的问题

    在这个过程中对.projet文件进行了跟踪比对,总算发现这个Build的时候进行Validation是从哪里定义的了.似乎因为我的项目是基于ExtJS2.0.2的web project,所以会提示打开 ...

  2. php curl详细解析和常见大坑

    1. 拿来先试试手 比如我们以著名的"测试网络是否连接"的网站--百度为例,来尝试下curl <?php // create curl resource $ch = curl ...

  3. 《无所不能的JavaScript编程系列:arguments 参数对象》

    前言:无所不能的JavaScript JavaScript起源于Netscape公司的LiveScript语言,这是一种基于对象和事件驱动的客户端脚本语言,最初的设计是为了检验HTML表单输入的正确性 ...

  4. WEB前端性能优化之二——css优化

    1.把样式表置于顶部 现把样式表放到文档的< head />内部似乎会加快页面的下载速度.这是因为把样式表放到< head />内会使页面有步骤的加载显示.HTML规范清 楚指 ...

  5. HDU 4256 The Famous Clock

    The Famous Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. Spring应用上下文中Bean的生命周期

    Bean装载到Spring应用上下文的生命周期,如图: Bean在Spring容器中从创建到销毁经历了若干个阶段,每一阶段都可以对Spring如何管理Bean进行个性化定制,以下我们通过代码去验证生命 ...

  7. 缓冲流自动把getchar()填充

    #include"stdio.h" #include"conio.h" #include<stdlib.h> int main() { char c ...

  8. 4G最快网速相当于30M宽带

    [导读]据北京移动方面介绍,目前其4G网络的覆盖范围包括:东西北三环.南至两广路以内的地区:清华北大.国贸CBD及园博会等地区. 在4G年内发牌已成定局的背景下,各运营商都在加快布局,北京移动近期就推 ...

  9. 硅谷创业教父Paul Graham:如何获得创业idea

    link:http://kb.cnblogs.com/page/165530/ 英文原文:How to Get Startup Ideas,翻译:Jason Zheng 要想获得创业 idea,请别试 ...

  10. Linux系统(一)文件系统、压缩、打包操作总结

    序言 当前的形势,.Net已经开源,.Net Core 正在跨平台,可见微软巨人在努力,在改变,在进步,在走向春天.从前被微软供作上帝的.Net从业者,如果不打开心扉面向开源,改变自己,那么很可能在不 ...