1 系统说明
源组件如下:
组件及版本 |
组件功能 |
引入原因 |
Mongodb3.6.2 |
提供高性能的文件式数据存储和检索的分布式平台 |
提供结构化模型数据的持久化和检索功能 |
2 集群扩容
2.1 单机扩容到2个分片
2.1.1 扩容前状态
1.原有的场景为mongodb只有一个副本集,没有运行任何的配置进程mongocfg和控制进程mongos。
2.当从1个节点扩容到2个节点的时候,整个mongodb集群从原先的单个副本集扩展到了分片集群。因此在添加分片的基础上,还需要额外添加配置集群mongocfg的副本集和控制节点mongos。
2.1.2 扩容步骤
1.启动新增分片的副本集
vi ./config/primary.conf
红框处改为新IP
./bin/mongod -f ./config/primary.conf //启动主节点
vi ./config/secondary.conf
红框处改为新IP
./bin/mongod -f ./config/secondary.conf //启动副本节点
vi ./config/arbiterOnly.conf
红框处改为新IP
./bin/mongod -f ./config/arbiter.conf //启动选举节点
2.配置副本集
./bin/mongo IP:27017 //进入主节点,IP为具体IP
config = {_id:"shard1", members: [
{_id: 0, host:"IP:27017", priority:10},
{_id: 1, host:"IP:27018", priority:8},
{_id: 2, host:"IP:27019","arbiterOnly":true}]
};
rs.initiate(config) //初始化副本集
注:单节点扩容与直接创建两分片集群不同之处在于单节点已有数据,操作者可在此时添加数据模拟实际情况。
4.启动config节点
vi ./config/configsvr.conf
红框处改为config副本集实际IP
./bin/mongod -f ./config/configsvr.conf //config节点个数必须大于等于2个
登录另一台服务器
vi ./config/configsvr.conf
红框处改为config副本集实实际IP
./bin/mongod -f ./config/configsvr.conf
5.配置config节点为副本集
./bin/mongo IP:20000 //IP为实际IP
configSvr = {_id:"configSvr",
configsvr:true,
members: [
{_id: 0, host:"IP1:20000",priority:10},
{_id: 1, host:"IP2:20000",priority:8}]
};
rs.initiate(config) //初始化副本集
6.启动mongos节点
vi config/mongos.conf
第一个红框为config节点IP,第二个红框为mongos服务所在服务器IP
./bin/mongos -f ./config/mongos.conf
7.添加分片
./bin/mongo IP:30000 //IP为实际IP
use admin
db.runCommand({addshard:"shard1/IP1:27017,IP1:27018,IP1:27019"})
db.runCommand({addshard:"shard2/IP1:27017,IP2:27018,IP2:27019"})
db.runCommand({listShards:1})
sh.startBalancer()
sh.enableSharding("test")
以下部分脚本中不需要包含,只需要执行到第7步
8.初始化索引
./bin/mongo IP:30000
use face
db.static_human.createIndex({"_id":1})
db.static_human.ensureIndex({"_id":"hashed"}) //此为关键步骤
sh.shardCollection("face.static_human", {"_id":"hashed"})
vi ./config/primary.conf
红框处改为新IP
./bin/mongod -f ./config/primary.conf //启动主节点
vi ./config/secondary.conf
红框处改为新IP
./bin/mongod -f ./config/secondary.conf //启动副本节点
vi ./config/arbiterOnly.conf
红框处改为新IP
./bin/mongod -f ./config/arbiter.conf //启动选举节点
- 配置第三个副本集
/bin/mongo IP:27017 //进入主节点,IP为第二台服务器IP
config = {_id:"shard3", members: [
{_id: 0, host:"IP3:27017", priority:10},
{_id: 1, host:"IP3:27018", priority:8},
{_id: 2, host:"IP3:27019","arbiterOnly":true}]
};
rs.initiate(config) //初始化副本集
- 添加分片
./bin/mongo IP:30000 //IP为实际IP
use admin
db.runCommand({addshard:"shard3/IP3:27017,IP3:27018,IP3:27019"})
- 新增mongocfg
vi ./config/configsvr.conf
第一个红框处改为新IP,第二个红框为前两个mongocfg节点IP
./bin/mongod -f ./config/configsvr.conf //启动config节点
./bin/mongo IP3:20000 //进入config节点shell
configSvr = {_id:"configSvr",
configsvr:true,
members: [
{_id: 0, host:"10.41.11.51:20000",priority:10},
{_id: 1, host:"10.41.11.52:20000",priority:8},
{_id: 2, host:"10.41.11.53:20000"}]
}; //副本集增加新增的mongocfg
rs.reconfig(configSvr, {force: true}) //更新配置
- 更改第一个mongos配置
在IP1的服务器上执行
killall mongos
vi config/mongos.conf //打开IP1上的mongos配置文件
红框为新增的mongocfg节点
./bin/mongos -f config/mongos.conf //启动mongos服务
- 新增mongos
在第二台服务器增加一个Mongos服务
vi config/mongos.conf
第一个红框为mongocfg副本集IP,第二个红框为mongos服务所在IP
./bin/mongos -f config/mongos.conf //启动mongos服务