mongo分片架构搭建

分片架构是在复制集基础之上形成的

分片架构,一般都是两台机器一个片

仲裁无所谓,每个片的仲裁都可以同时放在一台机器上

config需要一台单独的机器

mongos(路由)是一个客户端的路由,放在应用服务器上就可以了

 

生产中至少:主从4台,config1+仲裁1=6

一个复制集叫做一个分片,一个分片被称之为一个复制集

客户端是看不见分片的

路由管分配,然后通过路由找config,然后检索数据

硬件的配置:

mongodb的主从,必须是SSD或者pciessd硬盘,而且mongodb非常消耗内存,所以一般内存最少都得是128G或者256G(最低标配也得是64G

仲裁, 是无所谓的

config,最好也是和主从一样的硬件需求,因为需要查询(mongodb的更新很慢,但是查询是非常快的,因为它是文档型的)

分片架构=复制集架构*2+arbiter+config+mongos

config是什么?

config里面记录着数据的分布,知道哪个片中包含什么样的数据,所以config至关重要,需要单独放在一台机器上,而且可能不止一个config

运行机制:应用服务器通过路由查找config,确定数据在哪个分片上,然后再检索数据

 

分片架构搭建:

1、在mongodb复制集架构的基础之上再搭建一套复制集,如何做?参考mongodb复制集搭建文档

主机名+IP地址:

node1192.168.2.241

node2192.168.4.242

--注:这里将241做主,242做从,arbiter(仲裁)放在241上面

--注:需要注意的几点:

1、编辑配置文件的时候,端口号和shard是不一样的

2、配置复制集的时候IP和端口号也是不一样的

2、配置服务器config搭建(实验将config放在了239上,生产中要单放一个机器上)

mkdir -p /export/mongodb/config

echo $keystring >/export/mongodb/key/config

chmod 600 /export/mongodb/key/*

[root@node1 bin]# /export/mongodb/bin/mongod --configsvr --port 40011 --keyFile /export/mongodb/key/config --dbpath /export/mongodb/config  --logpath /export/mongodb/log/config.log --logappend --fork

--注:这里面的40011config的端口号

3、配置mongos路由服务器:(239上)

[root@node1 bin]# echo 123456 > /export/mongodb/key/mongos

[root@node1 bin]# chmod 600 /export/mongodb/key/*

[root@node1 bin]# /export/mongodb/bin/mongos --keyFile /export/mongodb/key/mongos --configdb 192.168.2.239:40011 --port 30011 --logpath /export/mongodb/log/mongos.log --logappend --fork

--注:这里面的30011是路由的端口号

--注:路由是不需要记录数据的,所以不需要指定data路径;config是需要

4、配置分片

需要进入到登录mongos路由服务器上面进行分片

配置分片,需要使用admin库(必须在admin上执行添加分片的操作)

db.runCommand({addshard:"shard1/192.168.2.239:20011,192.168.2.240:20011,192.168.2.239:20012"});

db.runCommand({addshard:"shard2/192.168.2.241:20021,192.168.2.242:20021,192.168.2.241:20022"});

 

查看分片信息:db.runCommand({listshards:1});

仲裁节点不会列出来

 

 

开启mongodb的分片

mongos> db.runCommand({enablesharding:"test"})

 

指定哪个集合要分片,片键

mongos> db.runCommand({shardcollection:"test.t1",key:{x:1}})

5、模拟测试

插入1万的数据(数据量越大,分片越平均)

mongos> for (var i=1;i<1000000;i++) db.t1.insert({name:"mongo",x:i})

查看分片状态:

mongos> db.printShardingStatus()

--注:这里面有所有的分片,哪个后面有true,哪个就表示分片成功了

mongos,路由,是看全局数据的,比如说因为我这里将mongos放在了239上,登录mongos,查看一下全局一共有多少的数据

241————分片上查看均衡的数据量

240————分片上查看均衡的数据量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值