mongoDB安装

参照:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

配置yum管理包
  • 在路径/etc/yum.repos.d/下创建文件mongodb-org-3.4.repo
    1
    2
    3
    4
    5
    6
    [mongodb-org-3.4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
  • 安装mongo
    1
    yum install -y mongodb-org
  • mongo相关操作
  • 创建用户
    1
    2
    3
    4
    mongo       
    use admin //切换到admin数据库
    db.createUser({user:"root",pwd:"123456",roles:["root"]}) //创建用户
    db.auth("root","123456") //验证用户创建是否成功

高可用性的mongo集群

参照:http://www.lanceyan.com/tech/arch/mongodb_shard1.html

三台服务器分配

按表格分别在各服务器进行目录创建:

  • 192.168.1.91
服务 端口 日志路径 数据路径
mongos 20001 mkdir -p /data/mongodbtest/mongos/log
Config server 21001 mkdir -p /data/mongodbtest/config/log mkdir -p /data/mongodbtest/config/data
Shard server1主节点 22001 mkdir -p /data/mongodbtest/shard1/log mkdir -p /data/mongodbtest/shard1/data
Shard server2副本 22002 mkdir -p /data/mongodbtest/shard2/log mkdir -p /data/mongodbtest/shard2/data
Shard server3仲裁 22003 mkdir -p /data/mongodbtest/shard3/log mkdir -p /data/mongodbtest/shard3/data
  • 192.168.1.92
服务 端口 日志路径 数据路径
mongos 20001 mkdir -p /data/mongodbtest/mongos/log
Config server 21001 mkdir -p /data/mongodbtest/config/log mkdir -p /data/mongodbtest/config/data
Shard server1仲裁 22001 mkdir -p /data/mongodbtest/shard1/log mkdir -p /data/mongodbtest/shard1/data
Shard server2主节点 22002 mkdir -p /data/mongodbtest/shard2/log mkdir -p /data/mongodbtest/shard2/data
Shard server3副本 22003 mkdir -p /data/mongodbtest/shard3/log mkdir -p /data/mongodbtest/shard3/data
  • 192.168.1.93
服务 端口 日志路径 数据路径
mongos 20001 mkdir -p /data/mongodbtest/mongos/log
Config server 21001 mkdir -p /data/mongodbtest/config/log mkdir -p /data/mongodbtest/config/data
Shard server1副本 22001 mkdir -p /data/mongodbtest/shard1/log mkdir -p /data/mongodbtest/shard1/data
Shard server2仲裁 22002 mkdir -p /data/mongodbtest/shard2/log mkdir -p /data/mongodbtest/shard2/data
Shard server3主节点 22003 mkdir -p /data/mongodbtest/shard3/log mkdir -p /data/mongodbtest/shard3/data
启动Config server
  1. 启动Config server

    • 分别配置三台config服务的配置文件,分别在对应config server的conf目录下(/data/mongodbtest/config/conf/)创建mongo_config.conf文件
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      storage:
      dbPath: /data/mongodbtest/config/data
      indexBuildRetry: true
      systemLog:
      destination: file
      path: /data/mongodbtest/config/log/config.log
      net:
      port: 21001
      sharding:
      clusterRole: configsvr
      replication:
      replSetName: docdetection
      processManagement:
      fork: true
    • 通过配置文件分别启动config配置服务
      1
      mongod --config /data/mongodbtest/config/conf/mongo_config.conf
  2. 初始化config复本集

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /usr/bin/mongo  127.0.0.1:21001
    
    #使用admin数据库
    use admin #定义副本集配置
    config ={_id:'docdetection',members:[
    {_id:0,host:'192.168.1.91:21001',priority:3},
    {_id:1,host:'192.168.1.92:21001',priority:2},
    {_id:2,host:'192.168.1.93:21001',priority:1}
    ]
    } #初始化副本集配置
    rs.initiate(config); #初始化结束(注意关闭各服务器防火墙)
    { "ok" : 1 } #查看状态
    rs.status()
    启动Shard server(分片服务)
  3. 启动各分片服务

    • 分别到各服务器上各shard的conf目录下建文件mongo_config.conf。eg:192.168.1.91

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      # shard1
      storage:
      dbPath: /data/mongodbtest/shard1/data
      indexBuildRetry: true
      systemLog:
      destination: file
      path: /data/mongodbtest/shard1/log/shard1.log
      net:
      port: 22001
      sharding:
      clusterRole: shardsvr
      replication:
      replSetName: shard1
      processManagement:
      fork: true # shard2
      storage:
      dbPath: /data/mongodbtest/shard2/data
      indexBuildRetry: true
      systemLog:
      destination: file
      path: /data/mongodbtest/shard2/log/shard2.log
      net:
      port: 22002
      sharding:
      clusterRole: shardsvr
      replication:
      replSetName: shard2
      processManagement:
      fork: true # shard3
      storage:
      dbPath: /data/mongodbtest/shard3/data
      indexBuildRetry: true
      systemLog:
      destination: file
      path: /data/mongodbtest/shard3/log/shard3.log
      net:
      port: 22003
      sharding:
      clusterRole: shardsvr
      replication:
      replSetName: shard3
      processManagement:
      fork: true
    • 通过配置文件分别启动shard分片服务(3*3=9个)

      1
      2
      3
      mongod --config /data/mongodbtest/shard1/conf/mongo_config.conf
      mongod --config /data/mongodbtest/shard2/conf/mongo_config.conf
      mongod --config /data/mongodbtest/shard3/conf/mongo_config.conf
  4. 初始化各分片服务器副本集

    • 设置第一个分片副本集:shard1(保证各副本已启动)注:priority 的值决定主(值大)从关系;arbiterOnly 指定仲裁节点
      大专栏  高可用性的mongo集群搭建">
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      #设置第一个分片副本集,登录其中一个分片服务器
      /usr/bin/mongo 127.0.0.1:22001
      #使用admin数据库
      use admin
      #定义副本集配置
      config = { _id:"shard1", members:[
      {_id:0,host:"192.168.1.91:22001",priority:2},
      {_id:1,host:"192.168.1.92:22001",arbiterOnly:true},
      {_id:2,host:"192.168.1.93:22001",priority:1}
      ]
      }
      #初始化副本集配置
      rs.initiate(config);
    • 设置第二个分片副本集:shard2
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      #设置第二个分片副本集,登录其中一个分片服务器
      /usr/bin/mongo 127.0.0.1:22002
      #使用admin数据库
      use admin
      #定义副本集配置
      config = { _id:"shard2", members:[
      {_id:0,host:"192.168.1.91:22002",priority:1},
      {_id:1,host:"192.168.1.92:22002",priority:2},
      {_id:2,host:"192.168.1.93:22002",arbiterOnly:true}
      ]
      }
      #初始化副本集配置
      rs.initiate(config);
    • 设置第三个分片副本集:shard3
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      #设置第三个分片副本集,登录其中一个分片服务器
      /usr/bin/mongo 127.0.0.1:22003
      #使用admin数据库
      use admin
      #定义副本集配置
      config = { _id:"shard3", members:[
      {_id:0,host:"192.168.1.91:22003",arbiterOnly:true},
      {_id:1,host:"192.168.1.92:22003",priority:1},
      {_id:2,host:"192.168.1.93:22003",priority:2}
      ]
      }
      #初始化副本集配置
      rs.initiate(config);
      启动mongos路由服务
  • 配置mongos服务的配置文件,对应的conf目录下创建mongo_config.conf文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    systemLog:
    destination: file
    path: /data/mongodbtest/mongos/log/mongos.log
    net:
    port: 20001
    sharding:
    configDB: docdetection/192.168.1.91:21001,192.168.1.92:21001,192.168.1.93:21001
    processManagement:
    fork: true
  • 通过配置文件分别启动config配置服务
    1
    mongos --config /data/mongodbtest/mongos/conf/mongo_config.conf
    整合配置、路由、分片服务器

    整合配置服务器、路由服务器,各个分片服务器

  1. 整合配置、路由、分片服务器
    • 目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到 mongos 路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。分别连接三个mongos,添加分片副本集。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      #设置分片配置,登录mongos路由服务器
      /usr/bin/mongo 127.0.0.1:20001 #使用admin数据库
      use admin #串联路由服务器与分片副本集1
      sh.addShard("shard1/192.168.1.91:22001,192.168.1.92:22001,192.168.1.93:22001") #串联路由服务器与分片副本集2
      sh.addShard("shard2/192.168.1.91:22002,192.168.1.92:22002,192.168.1.93:22002") #串联路由服务器与分片副本集3
      sh.addShard("shard3/192.168.1.91:22003,192.168.1.92:22003,192.168.1.93:22003")
  2. 添加创建用户
    • 集群管理员账号(mongos和配置服务器的集群管理员用户是可以通用的)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      #以下是创建集群管理员用户步骤(连接其中一台Mongos服务上执行即可)
      #登录mongos路由服务器
      /usr/bin/mongo 127.0.0.1:20001
      #使用admin数据库
      use admin
      #创建账号及指定权限
      db.createUser({
      user: "adminRoot",
      pwd: "adminbear",
      roles: [
      { role: "root", db: "admin" },
      { role: "clusterAdmin", db: "admin" },
      { role: "userAdmin", db: "admin" }
      ]
      });
    • 数据库用户
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      #登录mongos路由服务器
      /usr/bin/mongo 127.0.0.1:20001
      #以下是为数据库名mongoTest,创建数据库用户
      use mongoTest;
      db.createUser({
      user: "mongoTestUser",
      pwd: "bear",
      roles: [
      { role: "readWrite", db: " mongoTest" }
      ]
      }
      );

      目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。

  3. 创建数据库,让指定数据库分片生效
    1. 建库、表、指定应用分片的库
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      #登录mongos路由服务器
      /usr/bin/mongo 127.0.0.1:20001
      #创建或者使用mongoTest数据库
      use mongoTest;
      #创建mongoTest数据库中的集合
      db.createCollection("table1") #新建集合:table1
      ·
      ·
      ·
      #切换到admin数据库
      use admin
      #指定testdb分片生效,mongoTest为数据库名称
      db.runCommand( { enablesharding :"mongoTest"});
    2. 指定分片的表。两种分片方式: Hashed Shard Key与Ranged Shard Key
      • Hashed Shard Key:它采用字段的索引哈希值作为 shard key 的取值,这样做可以保证数据的均匀分布。在 mongos 和各个 shard 集群之间存在一个哈希值计算方法,所有的数据在迁移时都是根据这个方法来计算数据应当被迁移到什么地方。当 mongos 接收到一条语句时,通常他会把这条语句广播到所有的 shard 上去执行。
      • Ranged Shard Key: 根据 shard key 的取值,它把数据切分成连续的几个区间。取值相近的纪录会放进同一个 shard 服务器。好处是查询连续取值纪录时,查询效率可以得到保证。当数据库查询语句发送到 mongos 中时,mongos 会很快的找到目标 shard,而且不需要将语句发送到所有的 shard 上,一般只需要少量的 shard 就可以完成查询操作。缺点是不能保证数据的平均分配,在数据插入和修改时会产生比较严重的性能瓶颈
        1
        2
        3
        #指定数据库里需要分片的集合和片键,table1为mongoTest数据库中集合名称
        db.runCommand({shardcollection:"mongoTest.table1",key:{"ZZJGDM": "hashed"}}) //Hashed Shard Key
        db.runCommand({shardcollection:"mongoTest.table1",key:{_id:1}})// Ranged Shard Key

高可用性的mongo集群搭建的更多相关文章

  1. Mongo集群搭建

    1.集群角色及架构 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等 mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器 ...

  2. 搭建高可用mongo集群3.4版本

    搭建高可用mongo集群3.4版本 说在开始之前:在搭建这个环境之前,已经有了一个师兄搭好的环境,虽然一样很棒,但是没有经过自己的手出来的东西,还是不属于自己,所以摸索着自己搭建一个吧,好巧不巧的是, ...

  3. Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新Client API的使用要点,高可用性测试,以及各种坑 (转载)

    Kafka 0.9版本对java client的api做出了较大调整,本文主要总结了Kafka 0.9在集群搭建.高可用性.新API方面的相关过程和细节,以及本人在安装调试过程中踩出的各种坑. 关于K ...

  4. 基于Hadoop 2.2.0的高可用性集群搭建步骤(64位)

    内容概要: CentSO_64bit集群搭建, hadoop2.2(64位)编译,安装,配置以及测试步骤 新版亮点: 基于yarn计算框架和高可用性DFS的第一个稳定版本. 注1:官网只提供32位re ...

  5. mongo 集群(副本)搭建过程记录

    最近搭建mongo集群,回忆总结,作以记录.整个过程主要参考以下两篇文章,但是过程并不顺利,有些问题需要记录.https://www.cnblogs.com/dba-devops/p/7130710. ...

  6. MongoDB高可用集群搭建(主从、分片、路由、安全验证)

    目录 一.环境准备 1.部署图 2.模块介绍 3.服务器准备 二.环境变量 1.准备三台集群 2.安装解压 3.配置环境变量 三.集群搭建 1.新建配置目录 2.修改配置文件 3.分发其他节点 4.批 ...

  7. windows下mongodb集群搭建

    本文介绍在windows环境下如何搭建一个高可用性的mongodb集群.系统环境为win7,mongodb版本为3.6.3. 本文采用的是分片+副本集的方式搭建集群,将分别介绍如何使用副本集和分片来提 ...

  8. MongoDB 3.4 高可用集群搭建(二)replica set 副本集

    转自:http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<MongoDB 3.4 高可用集群搭建(一):主从模式&g ...

  9. Mongodb集群搭建的三种方式

    转自:http://blog.csdn.net/luonanqin/article/details/8497860 MongoDB是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key- ...

随机推荐

  1. python logging的输出

    ---恢复内容开始--- python中logging的使用 什么是日志: 日志是一种可以追踪某些软件运行时所发生事件的方法 软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情 ...

  2. 2020/1/27代码审计学习之SQL注入漏洞

    PHP代码审计SQL注入漏洞 0x00 首先明确什么是SQL注入,SQL语句必须掌握. 常见的注入总的来说可以分为两大类:数字型和字符型. 这两类中包含了诸如报错注入,宽字节注入,盲注,二次注入,co ...

  3. ModernCNN

    # 深度卷积神经网络(AlexNet) LeNet: 在大的真实数据集上的表现并不尽如⼈意. 1.神经网络计算复杂. 2.还没有⼤量深⼊研究参数初始化和⾮凸优化算法等诸多领域. 机器学习的特征提取:手 ...

  4. C语言如何获得精确到毫秒的时间

    在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精确到代码块或某个操作运行时所消耗的时间,time命令就不给力了 ...

  5. PAT Basic 1007 素数对猜想 (20) [数学问题-素数]

    题目 让我们定义 dn 为:dn = pn+1 – pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数."素数对猜想"认为"存在⽆穷多对 ...

  6. python库文件下载地址(持续更新)

    numpy https://pypi.org/project/numpy/#files PIL https://pypi.org/simple/pillow/ cv2 https://pypi.tun ...

  7. 面试必问之http以及浏览器相关知识

    /** 1.HTTP以及HTTPS概念 HTTP是超文本传输协议,是一个用于传输超媒体文档的应用层协议,被用于在web浏览器和网站服务器之间,以明文方式传递信息, 不提供任何方式的饿数据加密,因此使用 ...

  8. winEdt打开tex文件报错解决方法

    写论文真的是不断遇到各种困难啊,这个Latex软件就很多,好不容易中个A1区的文章,期刊说更新了新的模板就下载了,忽然发现打开有reading error,看不到一点内容,神奇的是竟然可以运行.这样的 ...

  9. 自由职业平台Upwork申请上市,能给国内猪八戒网带来什么启示?

    当下,在互联网的全面渗入下已经对整个社会的运行机制.大众的生活产生了前所未有的影响.尤其是在工作方面,更是衍生出诸多新兴职业.如,主播.水军.新媒体运营.自媒体人等.值得注意的是,这些职业绝大部分都有 ...

  10. 题解【[BJOI2015]树的同构】

    切了省选题+紫题,来写个题解 这题其实挺水,才120行代码 该题写了我一天(上午1.5h,晚上10min = 一天) hash,对于节点A,\[hashval[A] = \{hashval[i]\ti ...