搭建集群
最后更新于:2022-04-02 04:00:00
[TOC]
> [参考](https://www.ibm.com/developerworks/cn/opensource/os-mongodb-sharded-cluster/index.html)
## 概述
接下来我们开始准备部署一个具有 2 个 shard(3 节点副本集)加 1 个 config server(3 节点副本集)加 2 个 mongos 的分片集群
### 创建配置副本集(>=1 台)
```
mongod --port=30000 --configsvr --replSet rep_confsvr --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\shard\config" --bind_ip_all
mongod --port=30001 --configsvr --replSet rep_confsvr --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\shard\config1" --bind_ip_all
mongod --port=30002 --configsvr --replSet rep_confsvr --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\shard\config2" --bind_ip_all
```
选择其中一个连接
```
> mongo --port 30000
rs.initiate(
{
_id: "rep_confsvr",
configsvr: true,
members: [
{ _id : 0, host : "192.168.0.130:30000" },
{ _id : 1, host : "192.168.0.130:30001" },
{ _id : 2, host : "192.168.0.130:30002" },
]
}
)
//后期,添加成员
rs.add("192.168.0.130:30003")
```
### 添加分片服务器(>=1 台)-shard1
```
mongod --port 27002 --shardsvr --replSet shard1 --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\data2" --bind_ip_all
mongod --port 27003 --shardsvr --replSet shard1 --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\data3" --bind_ip_all
mongod --port 27004 --shardsvr --replSet shard1 --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\data4" --bind_ip_all
```
选择其中一个连接
```
> mongo --port 27002
// 初始化
rs.initiate(
{
_id : "shard1",
members: [
{ _id : 0, host : "192.168.0.130:27002" },
{ _id : 1, host : "192.168.0.130:27003" },
{ _id : 2, host : "192.168.0.130:27004" }
]
}
)
//添加成员
// rs.add("192.168.0.130:27005")
//删除成员,在集群启动时也可删除
// rs.remove("192.168.0.130:27005")
```
### 添加分片服务器(>=1 台)-shard2
```
mongod --port 27005 --shardsvr --replSet shard2 --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\data11" --bind_ip_all
mongod --port 27006 --shardsvr --replSet shard2 --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\data12" --bind_ip_all
mongod --port 27007 --shardsvr --replSet shard2 --dbpath "D:\Program Files (x86)\mongodb-win32-x86_64-2012plus-4.2.2\data13" --bind_ip_all
```
选择其中一个连接
```
mongo --port 27005
// 初始化
> rs.initiate(
{
_id : "shard2",
members: [
{ _id : 0, host : "192.168.0.130:27005" },
{ _id : 1, host : "192.168.0.130:27006" },
{ _id : 2, host : "192.168.0.130:27007" }
]
}
)
```
### 创建 mongos路由(可创建多个)
```
mongos --port 30010 --configdb rep_confsvr/192.168.0.130:30000,192.168.0.130:30001,192.168.0.130:30002 --bind_ip_all
```
连接 mongos
```
mongo --port 30010
>sh.addShard("shard1/192.168.0.130:27002,192.168.0.130:27003,192.168.0.130:27004")
> sh.addShard("shard2/192.168.0.130:27005,192.168.0.130:27006,192.168.0.130:27007")
> sh.enableSharding("notice_set") //指定分片数据库
> sh.shardCollection("notice_set.test_shard",{"age": "hashed"}) // 第二参数 {"age":`1} ,表示根据范围
> sh.status() // 查看集群状态
```
### 连接mongodb
连接的端口和ip 为 mongos 的端口与ip
### 在集群中已有数据时,新增分片
```
//检查 balancer 是否开启
mongos> sh.getBalancerState()
// true
//开启balancer
mongos > sh.startBalancer();
mongos > sh.addShard("shard1/192.168.0.130:27002");
```
> 新增分片的数据会自动迁移,原分片数据,需要过一会才能显示正确迁移后数据
## 测试数据
根据范围的测试
```
for (i = 1; i <= 20000; i++) db.test_shard.insert({age:(i%100), name:"user"+i, create_at:new Date()})
```
根据hash的测试
```
for (i = 1; i <= 20000; i++) db.test_shard.insert({age:(i), name:"user"+i, create_at:new Date()})
```
';