码迷,mamicode.com
首页 > 数据库 > 详细

MongoDB3.0.1分片部署,国内3.0的部署文档还不是很多(何志雄)。

时间:2015-06-01 22:50:21      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:mongodb   数据库   分片   

一)、分片包括:
1、至少3个config服务器:存储了数据块对分片的映射,用于判断数据存储在那个片上。
2、分发路由器:1个以上的mongos,将用户的读、写请求分发到分片中,该服务器被应用程序访问,应用程序不直接访问分片。
3、2个以上的分片,每个分片是单独的 mongod 或者是 replica set,如果是开发、测试环境,分片可以使独立的mongod而不一定要是副本集。

二)、分片读写原理
应用程序访问mongos(又称为查询路由),mongos向config服务器(又称为配置服务器)查询数据应该属于哪个分片,
         然后shards(分片)向具体的分片读写数据。  
                                每个分片由一个副本集构成。             
              appDriver 
                    |
                mongos\(可以是多个mongos)
                   / \       \config/config/config
                  /   \                 
 shard(replset)  shard(replset) 
三)、生产环境部署注意事项:
1、3台config服务器,需要部署在不同的机器上。
2、2个或以上的复制集组成分片。
3、一个或更多的mongos,部署在应用程序所在的服务器上。

四)、部署:
4.1  IP规划环境:
     1、至少3台Config服务器(需要注意到是Config需要奇数个):
          192.168.62.152:27052
          192.168.62.154:27054
          192.168.62.155:27055
     2、至少1台Mongos服务器,商用环境建议配置多台:
          192.168.62.153:27788    
          192.168.62.155:27799
      3、不低于2个副本集分片:
           分片1:
                    192.168.62.153:17053
                    192.168.62.154:17054
                    192.168.62.155:17055
           分片2:
                    192.168.62.155:17155
                    192.168.62.153:17153
                    192.168.62.152:17152

【总体部署步骤描述】
1、先部署2个分片副本集,无需配置超级管理员和数据库管理员,不要创建任何数据库。
2、步骤3个mongoConfig服务,无需配置超级管理员和数据库管理员。
3、部署2个Mongos路由服务,
4、在mongos服务器上使用./mongo --port 27788的本地例外登录的方式创建超级管理员。
5、在mongos服务器上增加mongoConfig配置服务器。
6、在mongos服务器上添加数据库管理员。
7、在mongos服务器上为数据库创建索引(需要分片的)
6、在mongos服务器上添加2个分片及片键盘。

 
【重要】所有服务器(config/mongs/分片副本集)的mongodb-keyfile的加密串都为,目的是集群服务器之间的通讯需要IJMyg3AL15ek0FWIbIBhVAr9oK/D0DEqxtkCNoyaQyz2wOIN/IcXLLjsZPX0F+6AMM

4.2、部署配置服务器(Mongo Config:存储集群元信息的mongod实例,生成环境至少配置3台以上的服务器,运行在不同的服务器上)
    在155/154/152服务器上,重复以下2个步骤。端口可以不一样。
    安装目录在/soft/configMongoDB目录下。

    1)、在配置服务器上:mkdir -p /data/configdb
    2)、启动配置服务器(不需要建立管理员账号和密码)
            如果不把mongdb命令加入到环境变量中,则到安装包的bin目录下执行:
           在155执行:
                 cd /soft/configMongoDB/bin 
                 ./mongod --configsvr --dbpath /soft/configMongoDB/db --port 27055 --keyFile=/soft/configMongoDB/mongodb-keyfile&
           在154执行:
                 cd /soft/configMongoDB/bin  
                 ./mongod --configsvr --dbpath /soft/configMongoDB/db --port 27054 --keyFile=/soft/configMongoDB/mongodb-keyfile&
           在152执行:
                cd /soft/configMongoDB/bin
                ./mongod --configsvr --dbpath /soft/configMongoDB/db --port 27052 --keyFile=/soft/configMongoDB/mongodb-keyfile&

4.3、部署Mongos服务,用于路由客户端操作到具体的分片上,至少部署不低于一个Mongos服务.
      需要注意的是,所有mongos的配置服务器顺序(192.168.62.152:27052,192.168.62.154:27054,192.168.62.155:27055)必须一致,否则会报错。
      Mongos由于没有数据节点,因此创建管理员的时候,使用 ./mongo --port 27799  在本机上执行才可以。
      Mongos的超级账户和密码与副本集的保持一致,创建超级用户后执行如下命令。

      在153上执行:
        cd /soft/mongosMongo/bin
 ./mongos --configdb 192.168.62.152:27052,192.168.62.154:27054,192.168.62.155:27055 --port 27788 --keyFile=/soft/mongosMongo/mongodb-keyfile&
       
      在155上执行:
        cd /soft/mongosMongo/bin
./mongos --configdb 192.168.62.152:27052,192.168.62.154:27054,192.168.62.155:27055 --port 27799 --keyFile=/soft/mongosMongo/mongodb-keyfile&

4.4、向集群中添加分片(一个分片可以单独的monod服务,或者一个副本集,在生产环境中应该使用副本集,进行读写分离,故障失效转移)
        本案例使用2个副本集,实现分片。
        副本集的部署,请参考上文,需要注意的是如果在1-2台机器上部署整个环境,每个Mogod实例的数据目录不要在同一个地方。
        在副本集中,只需要在master机器建立超级管理员(估计也能省略此步骤),不需要建立具体数据库的管理,等到加入分片成功后,
        到mongos服务器上建立具体的管理员和索引。

     4.4.1启动分片副本集1,分片名称:shard1
                    在153、154、155上执行:
                    cd /soft/shardMongo/bin
                    ./mongod -shardsvr --auth --replSet shard1 --config /soft/shardMongo/mongodb.conf
                   在Master机器上执行副本集
                     config={"_id" : "shard1","version" : 1,"members" : [{ "_id" : 1,"host":"192.168.62.153:17053"},{ "_id" : 2,"host":"192.168.62.154:17054"},{"_id":3,"host":"192.168.62.155:17055"}]}
                   rs.initiate(config)
            
    4.4.2 启动分片副本集2,分片名称:shard2
                  在155/153/152上执行
                  cd /soft/shard2Mongo/bin
                  ./mongod -shardsvr --auth --replSet shard2 --config /soft/shard2Mongo/mongodb.conf
                 在Master机器上执行副本集
      config={"_id" : "shard2","version" : 1,"members" : [{ "_id" : 1,"host":"192.168.62.155:17155"},{ "_id" : 2,"host":"192.168.62.153:17153"},{"_id":3,"host":"192.168.62.152:17152"}]}
                   rs.initiate(config)

4.5、添加分片到Mongos。选择选择其中一台Mongos,连接后执行命令
         ./mongo 192.168.62.153:27788
         use admin
         db.auth("superAdmin","admin123")
         4.5.1、添加分片1:   sh.addShard("shard1/192.168.62.153:17053")  格式:分片名称/该分片中的至少一台Mongod实例。
         添加成功显示:{ "shardAdded" : "shard1", "ok" : 1 }
          ps:如果只是纯粹添加一台单机的mongd实例,直接执行sh.addShard("192.168.62.153:17053")
         4.5.2、添加分片2: sh.addShard("shard2/192.168.62.155:17155") 
            如果提示错误:
           "can‘t add shard shard2/192.168.62.155:17155 because a local database ‘hezx‘ exists in another              shard1:shard1/192.168.62.153:17053,192.168.62.154:17054,192.168.62.155:17055
           那么此时需要在shard1和shard2的master上去删除hezx数据库,然后在添加分片成功后,在mongos服务器上上操作创建数据库。

             在另外一台mongos服务器上也和如上命令一并操作。
   
4.5、对某个数据库开启分片
    sh.enableSharding("hezx")

4.6、创建片键(片键需要是索引,如果集合中有数据,需要手动敲创建索引命令,如果没有建立索引,创建的过程中会自动建立)
       原因是,片键要求是索引,且如果是复合索引就必须是索引的开头。如果集合中没有数据,此时会自动创建索引。
     sh.shardCollection("hezx.message", { "to": 1 } )
     说明:为hezx库的message集合创建以to为键片,可以是组合键。

至此,MongoDB的分片已经部署完毕。分片的相关命令如下:
1、sh.status(),查看分片的状态。有哪些分片,哪些数据库被分片了,片键是什么。
2、db.message.stats(),选择某个表,执行该命令,可以看到该表的分片情况,占用多大,数据多少。

MongoDB3.0.1分片部署,国内3.0的部署文档还不是很多(何志雄)。

标签:mongodb   数据库   分片   

原文地址:http://blog.csdn.net/tzszhzx/article/details/46314513

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!