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

    前言

          搭建一个MongoDB的集群,这个环境只是内网的一个测试环境,分片没有使用副本集,配置并分配好端口后,开启集群的身份验证功能,在开启集群权限时,有些注意事项,在搭建过程中会着重标出。

    一、集群规划

          首先有三台服务器分别为192.168.0.230,192.168.0.232,192.168.0.234。集群规划如下:3个 用来分片,3个 mongos路由服务,3个 config配置服务器。

         注意:保证三台服务器的端口是通的。

    1.1端口分配

          端口号分配情况,所有的分片都使用27017端口,所有的配置都使用20000端口,所有的mongos路由服务都使用30000端口,每个服务器具体信息如下:

    表1-1 端口号分配表

     

    192.168.0.230

    192.168.0.232

    192.168.0.234

    mongos

    30000

    30000

    30000

    config

    20000

    20000

    20000

    sharing

    27017

    27017

    27017

    1.2集群整体规划图

     

    二、集群启动和配置

    2.1 启动集群服务器

    2.1.1 创建数据文件目录

    230服务器分片1  
    # mkdir –p /data/mongodb/config /data/mongodb/shard1_1
    232服务器分片2  
    # mkdir –p /data/mongodb/config  /data/mongodb/shard1_2
    234服务器分片3  
    # mkdir –p /data/mongodb/config  /data/mongodb/shard1_3

    然后按照顺序启动,分片服务器,配置服务器和路由服务器

    2.1.2 启动分片服务

    230服务器:
    mongod --shardsvr --port 27017 --dbpath /data/mongodb/shard1_1 --logpath /data/mongodb/shard1_1/rs0.log --logappend --directoryperdb --fork
    232服务器:
    mongod --shardsvr --port 27017 --dbpath /data/mongodb/shard1_2 --logpath /data/mongodb/shard1_2/rs0.log --logappend --directoryperdb --fork
    234服务器:
    mongod --shardsvr --port 27017 --dbpath /data/mongodb/shard1_3 --logpath /data/mongodb/shard1_3/rs0.log --logappend --directoryperdb --fork

    然后在三台服务器上各自启动配置服务器和路由服务器:

    2.1.3 启动配置服务器

    三台服务器分别执行:

    mongod --configsvr --port 20000 --dbpath /data/mongodb/config --logpath /data/mongodb/config.log --logappend --directoryperdb –fork

    2.1.4 启动路由服务

    三台服务器分别执行:

    mongos --configdb 192.168.0.230:20000, 192.168.0.232:20000, 192.168.0.234:20000 --port=30000 --chunkSize=1 
    --logpath=/data/mongogdb/mongos.log --logappend --fork

    注意:这里指定了—chunkSize分片块大小为1M,默认为64M,是为了能够更快的实现分片。

    2.2 配置集群服务器

    2.2.1 配置分片

          连接到任意服务器的路由服务30000端口,把三个分片服务器添加到集群配置中去:

     添加分片服务器

    # mongo –port 30000
    mongos> use admin
    switched to db admin
    mongos> db.runCommand({"addshard":"192.168.0.230:27017"})
    mongos> db.runCommand({"addshard":"192.168.0.232:27017"})
    mongos> db.runCommand({"addshard":"192.168.0.234:27017"})

    现在执行sh.status()就能看到集群的分片情况。分片环境已经配置完成,但还没开启集合的分片,接下来测试一个集合的分片功能。

    2.2.2 激活并验证分片功能

         集合开启分片之前,需要选择一个片键来指定分片规则,片键的选择直接影响数据分发的效果,关于片键的选择策略,具体问题具体分析,后续会简单整理一下。

    注意:分片片键必须是索引

    激活数据库foo的分片功能,并把其中的bar集合按照timestamp升序片键开启分片,操作如下:

    # mongo –port 30000
    mongos> sh.enableSharding("foo")
    { "ok" : 1 }
    mongos> sh.shardCollection("foo.bar",{"timestamp":1})
    { "collectionsharded" : "foo.bar", "ok" : 1 }

    这时使用sh.status()命令,就可以看到相应的集合已经开启了分片

    mongos> for(var i=1; i<=500000; i++){ db.bar.insert({"inc":i, "timestamp":new Date()}) }

    往数据库中插入50万数据,使用sh.status()查看数据已经均匀分布在各个分片上。

    三、开启集群身份验证

          默认情况下,MongoDB是不启动访问控制的,对于单机模式下,只需在启动mongod服务时添加--auth参数即可。但是在分片集群下只能使用keyfile的方式启动访问控制。

    首先,生成一个keyfile文件,并把这个文件复制到其他服务器上。

    # openssl rand -base64 741 > /data/mongodb/mongodb-keyfile
    # chmod 600 mongodb-keyfile   重要

    注意:在启用访问控制之前,要保证路由服务和每个分片服务器已经存在一个管理员用户,用于添加用户和关闭集群使用。

    添加用户也很简单,分别连到3000和27017端口在admin数据库执行以下命令:

    mongos> use admin
    switched to db admin
    mongos> db.createUser({user:"admin", pwd:"111111", roles:[{role: "root", db: "admin" }]})
    Successfully added user: {
            "user" : "admin",
            "roles" : [
                    {
                            "role" : "root",
                            "db" : "admin"
                    }
            ]
    }

          接下来开启集群的访问控制,这里我讲keyfile文件拷贝到了/data/mongodb/keyfile目录下,在启动每个服务时(分片服务,配置服务,路由服务)添加--keyFile /data/mongodb/keyfile参数即可。

    如启动路由服务时
    mongos
    --configdb 192.168.0.230:20000, 192.168.0.232:20000, 192.168.0.234:20000 --port=30000 --chunkSize=1 --logpath=/data/mongogdb/mongos.log

    --logappend –fork --keyFile /data/mongodb/keyfile

    之后在连接到集群时,操作之前就需要验证用户身份了,其中验证有两种方式:

    一是在连接时进行验证:

    mongo --port 30000 -u "admin" -p "111111" --authenticationDatabase "admin"

    二是在连接后进行验证:

    # mongo --port 30000
    mongos> use admin
    switched to db admin
    mongos>  db.auth("admin", "111111")

    验证成功后就可以进行相应的操作了。

    四、集群中一些问题

    1 关闭集群服务器

         关闭顺序按照路由服务,配置服务,分片服务,分别连接到对应端口的admin数据库,使用db.shutdownServer()关闭服务。如果开启了身份验证,这里就用到了预先建好的admin用户

    2 集群某个服务起不来

          比如配置服务或分片服务启动错误,可能是上次退出不正常,这是可以选择修复数据,也可直接把数据文件中的mongod.lock文件删除。

    3 数据没分片

          首先保证集合开启了分片,然后查看一下config配置数据库中配置的chunkSize是多少,是不是数据不够大,最后查看一下服务器的时间,如果服务器的时间相差比较大,也会导致分片失败,服务器时间差最好保持在30秒以内。

     

     

    作 者:创心coder
    QQ群:361982568
    订阅号:cxcoder
    文章不足之处,还请谅解!本文会不断完善更新,转载请保留出处。如果帮到了您,烦请点赞,以资鼓励。
  • 相关阅读:
    tomcat的OutOfMemoryError内存溢出解决方法
    转:动态table分页(ORCALE)
    转: 根据屏幕分辨率,浏览器调用不同css
    转:只能选择GridView中的一个CheckBox(单选CheckBox)
    转:tomcat安全设置
    Tomcat内存设置详解
    Dos命令删除添加新服务
    卸载oracle 10g
    转:oracle:win7手工卸载oracle数据库11g
    win7 下安装oracle 10 g
  • 原文地址:https://www.cnblogs.com/cwane/p/5428436.html
Copyright © 2011-2022 走看看