zoukankan      html  css  js  c++  java
  • mongodb sharding集群搭建

    创建虚拟机,如果是使用copy的方式安装系统,记得修改机器名,否则所有的机器名称都一样,会造成安装失败

    同时关闭掉防火墙,将所有的机器的时间调成一致,master和slave的heartbeat间隔不能超过三秒,否则造成启动mongos失败,这个可以查看mongos日志

    使用MongoDB 3.02或者后续版本的安装包在D:mongodb下安装. 如果你是自己通过源代码编译获得的MongoDB的相关程序, 你需要建立D:mongodbin,并把mongod.exe, mongo.exe, mongos.exe拷贝到它下面(PS:为了支持NG全文索引搜索,需要使用编译的v3.0.6版本二进制文件替换mongod.exe,mongo.exe,mongos.exe).

    集群监控工具https://cloud.mongodb.com  试用期有30天(个人觉得这个监控工具还是比较好用的)

    安装步骤看起来很多,其实很简单,就是步骤多了点,多点耐心就好

     1.1.1        准备工作

    我们将分别在上述三台机器上分别创建相应目录

    将mongodb.zip解压到D:mongodb下

    创建D:mongodbclustershard1 目录,在其下创建data, log子目录;

    创建完成后的目录清单:

    D:mongodbclustershard1data

    D:mongodbclustershard1log

    D:mongodbin

          在192.168.33.92, 192.168.33.93 和192.168.33.94上, 在D:mongodbclustershard1下创建config.conf文本文件,在文件中放入以下内容,注意缩进只能用空格而不能用tab:

    systemLog:

       destination: file

       path: d:mongodbclustershard1logshard1.log

       logAppend: true

       logRotate: rename

    storage:

       dbPath: d:mongodbclustershard1data

       journal:

          enabled: true

       directoryPerDB: true

       engine: mmapv1

    replication:

       oplogSizeMB: 10000

       replSetName: shard1

    sharding:

       clusterRole: shardsvr

    net:

       port: 22001

    到此,准备工作完成.

    1.1.2        配置replica

            在三台机器上通过command line分别启动三个成员实例.

    在解压后的D:mongodb文件夹按住shift然后右键 然后点open command window here 打开dos窗口

    d:mongodbinmongod --config d:mongodbclustershard1config.conf

     

    1.1.3       初始化replica set并添加replica set成员, :

    使用mongo shell(mongo.exe)或者其他工具登录到192.168.33.92:22001.

    D:Devsoftwaremongo-masterin>mongo 192.168.33.92:22001   //此命令必须在非arbiter 机器上执行

    2015-04-29T11:37:58.375-

    MongoDB shell version: 3.1.2-pre-

    connecting to: 192.168.33.92:22001/test

    > use admin

    > cfg = { _id:"shard1", members:[

                         {_id:0,host:"192.168.33.92:22001",priority:1000},

                         {_id:1,host:"192.168.33.93:22001",priority:999},

                          {_id:2,host:"192.168.33.94:22001",priority : 800, arbiterOnly: true} 

                    ]

             }

     > rs.initiate(cfg);   //此命令必须在非arbiter 机器上执行

    2        配置config server:

            Config  Server是一个特殊的mongod实例, 也是一个数据库, 用来保存cluster的分片信息元数据.  Config Server与 cluster中其他的作为数据库服务器的mongod实例没有直接联系, 它里面存储的都是chunk存储和迁移的信息.

     我们将分别在上述三台机器上分别创建相应目录

    在192.168.33.92, 192.168.33.93, 192.168.33.94进行如下操作

    创建D:mongodbclusterconfigsvr 目录,在其下创建data, log子目录;

    创建完成后的目录清单:

    D:mongodbclusterconfigsvrdata

    D:mongodbclusterconfigsvrlog

    确认mongod.exe在D:mongodbin目录下, 如果你是采用的安装包安装到D:mongodb目录, mongod.exe应该已经在D:mongodbin了

    2.1        编辑配置文件:

    在192.168.33.92, 192.168.33.93 , 192.168.33.94上, 在D:mongodbcluster configsvr下创建config.conf文本文件,在文件中放入以下内容,注意缩进只能用空格而不能用tab:

    3.0版本:

    systemLog:

       destination: file

       path: d:mongodbclusterconfigsvrlogconfigsvr.log

       logAppend: true

       logRotate: rename

    storage:

       dbPath: d:mongodbclusterconfigsvrdata

       journal:

          enabled: true

       directoryPerDB: true

       engine: mmapv1

    sharding:

       clusterRole: configsvr

    net:

       port: 21110

    2.2       启动三个config server

    在三台机器上通过command line使用如下命令分别启动三个成员的mongo config server实例:

    d:mongodbinmongod --config d:mongodbcluster configsvrconfig.conf

    2.3        配置mongos

    Mongos实例是应用程序访问cluster的入口.  Mongos也可以配置多个来增加系统容错. 如果使用多个mongos, 所有mongos的config server配置项必须完全相同.

    本文档中,我们将使用三个mongos实例, 分别置于192.168.33.92:21100, 192.168.33.93:21100 和192.168.33.94:21100

    2.4       创建目录

    我们将分别在上述三台机器上分别创建相应目录

    在192.168.33.92, 192.168.33.93 , 192.168.33.94进行如下操作

    创建D:mongodbclustermongos 目录,在其下创建 log子目录;

    创建完成后的目录清单:

    D:mongodbcluster mongos log

    确认mongos.exe在D:mongodbin目录下,如果你是采用的安装包安装到D:mongodb目录, mongos应该已经在D:mongodbin了

    2.5       编辑配置文件:

    在192.168.33.92, 192.168.33.93 , 192.168.33.94 上, 在D:mongodbcluster mongos下创建config.conf文本文件,在文件中放入以下内容,注意缩进只能用空格而不能用tab:

    对于版本3.0:

    #YAML format

    systemLog:

        destination: file

        path: D:mongodbclustermongoslogmongos.log

        logAppend: true

        logRotate: rename

    sharding:

        configDB: 192.168.33.92:21110,192.168.33.93:21110,192.168.33.94:21110

    net:

    port: 21100

    2.6       启动三个mongos

    在三台机器上通过command line使用如下命令分别启动mongos实例.

    在192.168.33.92, 192.168.33.93 , 192.168.33.94:

    d:mongodbinmongos --config d:mongodbcluster mongosconfig.conf

    3         添加shard节点到cluster中

    现在虽然各个应用 (3个shard1 replica set成员,  3 个config server, 3 个mongos) 都在运行,但是cluster还是空的,没有一个数据库server加进来. 也就是说, shard1和 还没有加进 cluster中.

    如果使用mongo shell登录到任何一个mongos, 运行sh.status()命令,你会看到如下结果:

    D:Devsoftwaremongo-masterin>mongo 192.168.33.92:21100

    2015-05-01T10:47:30.337-0400

    MongoDB shell version: 3.1.2-pre-

    connecting to: 192.168.33.92:21100/test

    mongos> show dbs

    admin   (empty)

    config  (empty)

    mongos> sh.status()

    --- Sharding Status ---

      sharding version: {

            "_id" : 1,

            "minCompatibleVersion" : 5,

            "currentVersion" : 6,

            "clusterId" : ObjectId("5542e946bfcdf8ecc8ae22da")

    }

      shards:

      balancer:

            Currently enabled:  yes

            Currently running:  no

            Failed balancer rounds in last 5 attempts:  0

            Migration Results for the last 24 hours:

                    No recent migrations

      databases:

            {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }

    mongos>

    以上结果中shards为空,表示我们没有任何shard.下面我们把shard1添加到cluster中来.

    添加shard1到cluster中

    可以使用mongo shell登录任意一个mongos 完成shard添加操作. 这里我们登录192.168.33.92:21100.

    sh.addShard( "shard1/192.168.33.92:22001" ).  Replica set中的任意一个成员都可以在这里作为种子.

    Mongos会自动识别, 搜索并添加所有输入该replica set中的所有成员

    至此, cluster 已经建立完成.

    3.2        添加新的shard并加入到cluster中

    到现在为止我们的cluster中实际上只有一个节点. 一个replica set对于cluster来说算一个节点.因为任意时刻, 只有replica set中的primary可以接受写操作. 所以为了发挥cluster

    的作用,我们需要添加多个replica set,这样mongos就可以并行读写多个replica set了.

    参照Replica set deployment文档建立你想要的新的replica set并把它按照本文档前面的步骤加入到cluster中来. 在本文档的测试中, 我们加入了shard2,和shard3两个replica set. 

    如果一个collection已经被分片(执行过shardCollection命令), 添加新的shard的操作会触发数据的迁移.

    在3台机器的部署中,我们把shard1的primary放在192.168.33.92:22001, shard2的primary 放在192.168.33.93:22002, shard3的primary放在192.168.33.94:22003.这样三台机器可以并行写入.

    如果mongodb中有以下错误log  :access control is not enabled and no --bind_ip has been specified.

    就是机器的防火墙没有关闭。

  • 相关阅读:
    PLC 控制系统资源
    .net core 控制台程序生成EXE
    EF Core 日志跟踪sql语句
    Oracle 设置自启动
    数据库批量插入数据
    字符串面试题系列之六:在字符串中删除特定的字符
    字符串面试题系列之五:删除字符串空格
    字符串面试题系列之四:字符串匹配二
    字符串面试题系列之三:左旋转字符串
    字符串面试题系列之二:连续最长数字串
  • 原文地址:https://www.cnblogs.com/luo-mao/p/5872314.html
Copyright © 2011-2022 走看看