环境:
CentOS 6.0 x64
md01: 10.0.0.11
md02: 10.0.0.12
md03: 10.0.0.14
md04: 10.0.0.15
md05: 10.0.0.16
md06: 10.0.0.17
设计思路:
md01、md02、md03 做一组复制集
md04、md05、md06 做一组复制集
再把这两组复制集用分片做成 shard1、shard2 用LVS 调用
下载安装mongodb
1 |
|
#添加用户组
1 |
|
各节点hosts文件 添加:
1 |
|
">
副本集配置:
启动各节点:
1 | md01 |
#启动仲裁节点
在md02上
1 | mkdir /elain/data/mongodb/arb |
初始化节点:
md01:(登录其中任何一个节点操作皆可)
1 | > rs.initiate({ |
#验证
1 | PRIMARY> rs.status() |
也可浏览:http://10.0.0.11:28017/_replSet 查看状态
查看副本集状态
1 | >rs.status() |
查看当前主库:
1 | >db.$cmd.findOne({ismaster:1}); |
另一组副本集同理操作即可;这里为省篇幅就不再写出,但切记两复制集名称不可以重复
启动并配置三台Config Server
#md01,03,05上执行
1 | mkdir -p /elain/data/mongodb/config/ |
5、部署并配置三台Routing Server
指定所有的config sever地址参数,chunkSize是分割数据时每块(Chunk)的单位大小
1 | #md02,md04,md06 |
6、命令行添加分片
连接到mongs服务器,并切换到admin
1 | /elain/apps/mongodb/bin/mongo 10.0.0.11:30000/admin |
注:添加复制集elain,其中包含一个服务器md01:27017(还饿别的服务器,如md02、md03),如果md01挂了,mongos会知道它所连接的是一个复制集,并会使用新的主节点(md02或md03)
1 | db.runCommand( { listshards : 1 } ); |
如果列出(sharding)了以上二个你加的shards,表示shards已经配置成功
导入数据:
1 | mongoimport -d elain -c elain --type csv --headerline --file /root/bak/test.csv --host md02:30000 |
注:数据自备,我这里是从生产环境下MYSQL里导出的一些真实数据来做测试
#激活数据库分片
1 | db.runCommand( { enablesharding : "elain" } ); |
1 | mongos> show dbs |
#进入数据库,建立索引,为分片做准备
1 | /elain/apps/mongodb/bin/mongo 10.0.0.12:30000/admin |
1 | use elain; |
查看索引:
1 | mongos> db.elain.find({"client_userid" : 151512}).explain(); |
#添加分片:
1 | use admin; |
#查看分片状态
1 | use elain; |
在分片后新写数据第一次:
1 | mongos> db.elain.stats(); |
分片后新写数据第二次:
1 | mongos> db.elain.stats(); |
分片后新写数据第三次:
1 | mongos> db.elain.stats(); |
分片后新写数据第四次(DOWN 掉md04的mongo服务)
1 | mongos> db.elain.stats(); |
总结:通过以上四次的写数据测试,我们可以看到分片是成功的,每次写数据,shard1、shard2都有数据写入,且,在下面的复制集中DOWN 掉任意一台,不影响整个架构的正常服务。
删除片操作
1 | mongos> db.runCommand({"removeshard" : "10.0.0.11:27011"}); |
再执行,可看到removeshard的挪动进度
1 | mongos> db.runCommand({"removeshard" : "10.0.0.11:27011"}); |
到此结束