mongodb分片集群设计方案

1. 设计思想:分片集群(sharding cluster),每个分片就是一个集群,每个集群就是一个分片。
Shard Server:  mongod 实例,用于存储实际的数据块,一个shard server角色可由三台机器组成一个replica set承担,保障数据完整性。
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server:  mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
2. 分片架构图:
 
 
3. 分片集群架构示例图
 
 
4. 分片集群扩展示例图
 
 
5. 主机配置表
 
 
 1. 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1;
 2. 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2;
 3. 分别在3台机器运行一个mongod实例(称为mongod shard31,mongod shard32,mongod shard33)组织replica set3,作为cluster的shard3;
 4. 每台机器运行一个mongod实例,作为3个config server;
 5. 每台机器运行一个mongs进程,用于客户端连接。
 
6. 主机操作步骤 
6.1 安装软件 
6.1.1 分别在三台主机安装mongodb 
 a. 安装mongodb
 cd /usr/local/mongo
 tar zxvf mongodb-linux-x86_64-2.0.2.tar
 b. 创建数据分片目录
 server1:
 mkdir -p /data/data/mongodb/shard11
 mkdir -p /data/data/mongodb/shard21
 mkdir -p /data/data/mongodb/shard31
 mkdir -p /data/log
 mkdir -p /data/data/mongodb/config
 
 server2:
 mkdir -p /data/data/mongodb/shard12
 mkdir -p /data/data/mongodb/shard22
 mkdir -p /data/data/mongodb/shard32
 mkdir -p /data/log
 mkdir -p /data/data/mongodb/config
 
 server3:
 mkdir -p /data/data/mongodb/shard13
 mkdir -p /data/data/mongodb/shard23
 mkdir -p /data/data/mongodb/shard33
 mkdir -p /data/log
 mkdir -p /data/data/mongodb/config
6.2 配置replica set 
6.2.1 配置shard1的replica set 
 server1:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard1 --port 29017 --dbpath=/data/data/mongodb/shard11 --logpath=/data/log/shard11.log --logappend --fork
 
 server2:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard1 --port 29017 --dbpath=/data/data/mongodb/shard12 --logpath=/data/log/shard12.log --logappend --fork
 
 server3:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard1 --port 29017 --dbpath=/data/data/mongodb/shard13 --logpath=/data/log/shard13.log --logappend --fork
6.2.2 初始化shard1的replica set 
 连接任意一个mongo实例,如server1
 cd /usr/local/mongo/bin
 ./mongo --port 29017
 config={_id : 'shard1',members : [{_id : 0, host : '172.16.8.131:29017'},{_id : 1, host : '172.16.8.132:29017'},{_id : 2, host : '172.16.8.133:29017'}]}
 rs.initiate(config)
 rs.status()
6.2.3 配置shard2的replica set 
 server1:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard2 --port 29018 --dbpath=/data/data/mongodb/shard21 --logpath=/data/log/shard21.log --logappend --fork
 
 server2:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard2 --port 29018 --dbpath=/data/data/mongodb/shard22 --logpath=/data/log/shard22.log --logappend --fork
 
 server3:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard2 --port 29018 --dbpath=/data/data/mongodb/shard23 --logpath=/data/log/shard23.log --logappend --fork
6.2.4 初始化shard2的replica set 
 连接任意一个mongo实例,如server1
 cd /usr/local/mongo/bin
 ./mongo --port 29018
 config={_id : 'shard2',members : [{_id : 0, host : '172.16.8.131:29018'},{_id : 1, host : '172.16.8.132:29018'},{_id : 2, host : '172.16.8.133:29018'}]}
 rs.initiate(config)
 rs.status()
6.2.5 配置shard3的replica set 
 server1:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard3 --port 29019 --dbpath=/data/data/mongodb/shard31 --logpath=/data/log/shard31.log --logappend --fork
 
 server2:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard3 --port 29019 --dbpath=/data/data/mongodb/shard32 --logpath=/data/log/shard32.log --logappend --fork
 
 server3:
 cd /usr/local/mongo/bin
 /usr/local/mongo/bin/mongod --shardsvr --replSet shard3 --port 29019 --dbpath=/data/data/mongodb/shard33 --logpath=/data/log/shard33.log --logappend --fork
6.2.6 初始化shard3的replica set 
 连接任意一个mongo实例,如server1
 cd /usr/local/mongo/bin
 ./mongo --port 29019
 config={_id : 'shard3',members : [{_id : 0, host : '172.16.8.131:29019'},{_id : 1, host : '172.16.8.132:29019'},{_id : 2, host : '172.16.8.133:29019'}]}
 rs.initiate(config)
 rs.status()
6.3 配置config server 
 server1:
 /usr/local/mongo/bin/mongod --configsvr --dbpath=/data/data/mongodb/config --port 20000 --logpath=/data/log/config.log --logappend --fork
 
 server2:
 /usr/local/mongo/bin/mongod --configsvr --dbpath=/data/data/mongodb/config --port 20000 --logpath=/data/log/config.log --logappend --fork
 
 server3:
 /usr/local/mongo/bin/mongod --configsvr --dbpath=/data/data/mongodb/config --port 20000 --logpath=/data/log/config.log --logappend --fork
6.4 配置mongos server 
 server1:
 /usr/local/mongo/bin/mongos --configdb 172.16.8.131:20000,172.16.8.132:20000,172.16.8.133:20000 -port 30000 -chunkSize 5 --logpath=/data/log/mongos.log --logappend --fork
 
 server2:
 /usr/local/mongo/bin/mongos --configdb 172.16.8.131:20000,172.16.8.132:20000,172.16.8.133:20000 -port 30000 -chunkSize 5 --logpath=/data/log/mongos.log --logappend --fork
 
 server3:
 /usr/local/mongo/bin/mongos --configdb 172.16.8.131:20000,172.16.8.132:20000,172.16.8.133:20000 -port 30000 -chunkSize 5 --logpath=/data/log/mongos.log --logappend --fork
6.5 配置分片集群 
6.5.1 连接任意一个mongos实例,如server1,并切换到admin 
 cd /usr/local/mongo/bin
 ./mongo 172.16.8.131:30000/admin
 db
 admin
6.5.2 加入shards 
 db.runCommand({ addshard : "shard1/172.16.8.131:29017,172.16.8.132:29017,172.16.8.133:29017", name:"shard1", maxsize:20480});
 db.runCommand({ addshard : "shard2/172.16.8.131:29018,172.16.8.132:29018,172.16.8.133:29018", name:"shard2", maxsize:20480});
 db.runCommand({ addshard : "shard3/172.16.8.131:29019,172.16.8.132:29019,172.16.8.133:29019", name:"shard3", maxsize:20480});
6.5.3 Listing shards 
 db.runCommand({listshards : 1})
 如果列出了以上三个你加的shards,表示shards已经配置成功
6.5.4激活数据库分片 
 db.runCommand({enablesharding : "201"});
 通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard;
 一旦激活数据库分片,数据库中不同的collection将被存放在不同的shard上;
 但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作。
6.5.6 配置collection分片 
 db.runCommand({"shardcollection":"201.customer_user_mst", key:{"name":1}})
 a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)
 b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值