MongoDB分片集群搭建及扩容

分片集群搭建及扩容

整体架构

环境准备

  1. 3台Linux虚拟机,准备MongoDB环境,配置环境变量。
  2. 一定要版本一致(重点),当前使用 version4.4.9

配置域名解析

在3台虚拟机上执行以下命令,注意替换实际 IP 地址

java 复制代码
echo "192.168.65.97 mongo1 mongo01.com mongo02.com" >> /etc/hosts

echo "192.168.65.190 mongo2 mongo03.com mongo04.com" >> /etc/hosts

echo "192.168.65.200 mongo3 mongo05.com mongo06.com" >> /etc/hosts

准备分片目录

在各服务器上创建数据目录,我们使用 `/data`,请按自己需要修改为其他目录:

在mongo01.com / mongo03.com / mongo05.com 上执行以下命令:

java 复制代码
mkdir -p /data/shard1/db /data/shard1/log /data/config/db /data/config/log

在mongo02.com / mongo04.com / mongo06.com 上执行以下命令:

java 复制代码
mkdir -p /data/shard2/db /data/shard2/log /data/mongos/

创建第一个分片用的复制集

在mongo01.com / mongo03.com / mongo05.com 上执行以下命令:

java 复制代码
mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /data/shard1/db \

--logpath /data/shard1/log/mongod.log --port 27010 --fork \

--shardsvr --wiredTigerCacheSizeGB 1

--shardsvr 声明这是集群的一个分片

--wiredTigerCacheSizeGB 设置内存大小

初始化第一个分片复制集

java 复制代码
# 进入mongo shell

mongo mongo01.com:27010

#shard1复制集节点初始化

rs.initiate({

    _id: "shard1",

    "members" : [

    {

        "_id": 0,

        "host" : "mongo01.com:27010"

    },

    {

        "_id": 1,

        "host" : "mongo03.com:27010"

    },

    {

        "_id": 2,

        "host" : "mongo05.com:27010"

    }

    ]

})

#查看复制集状态

rs.status()

创建 config server 复制集

在mongo01.com / mongo03.com / mongo05.com上执行以下命令:

java 复制代码
mongod --bind_ip 0.0.0.0 --replSet config --dbpath /data/config/db \

--logpath /data/config/log/mongod.log --port 27019 --fork \

--configsvr --wiredTigerCacheSizeGB 1

初始化 config server 复制集

java 复制代码
# 进入mongo shell

mongo mongo01.com:27019

#config复制集节点初始化

rs.initiate({

    _id: "config",

    "members" : [

    {

        "_id": 0,

        "host" : "mongo01.com:27019"

    },

    {

        "_id": 1,

        "host" : "mongo03.com:27019"

    },

    {

        "_id": 2,

        "host" : "mongo05.com:27019"

    }

    ]

})

搭建 mongos

在mongo01.com / mongo03.com / mongo05.com上执行以下命令:

java 复制代码
#启动mongos,指定config复制集

mongos --bind_ip 0.0.0.0 --logpath /data/mongos/mongos.log --port 27017 --fork \

--configdb config/mongo01.com:27019,mongo03.com:27019,mongo05.com:27019

mongos加入第1个分片

java 复制代码
# 连接到mongos

mongo mongo01.com:27017

#添加分片 mongos>sh.addShard("shard1/mongo01.com:27010,mongo03.com:27010,mongo05.com:27010")

#查看mongos状态

mongos>sh.status()

创建分片集合

java 复制代码
连接到mongos, 创建分片集合

mongo mongo01.com:27017

mongos>sh.status()

#为了使集合支持分片,需要先开启database的分片功能

mongos>sh.enableSharding("company")

# 执行shardCollection命令,对集合执行分片初始化

mongos>sh.shardCollection("company.emp", {_id: 'hashed'})

mongos>sh.status()



#插入测试数据

 use company

for (var i = 0; i < 10000; i++) {

    db.emp.insert({i: i});

}

#查询数据分布

db.emp.getShardDistribution()

创建第2个分片的复制集

在mongo02.com / mongo04.com / mongo06.com上执行以下命令:

java 复制代码
mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /data/shard2/db \

--logpath /data/shard2/log/mongod.log --port 27011 --fork \

--shardsvr --wiredTigerCacheSizeGB 1

初始化第二个分片的复制集

java 复制代码
# 进入mongo shell

mongo mongo06.com:27011

#shard2复制集节点初始化

rs.initiate({

    _id: "shard2",

    "members" : [

    {

        "_id": 0,

        "host" : "mongo06.com:27011"

    },

    {

        "_id": 1,

        "host" : "mongo02.com:27011"

    },

    {

        "_id": 2,

        "host" : "mongo04.com:27011"

    }

    ]

})

#查看复制集状态

rs.status()

mongos加入第2个分片

java 复制代码
# 连接到mongos

mongo mongo01.com:27017

#添加分片 mongos>sh.addShard("shard2/mongo02.com:27011,mongo04.com:27011,mongo06.com:27011")

#查看mongos状态

mongos>sh.status()
相关推荐
zhoutongsheng20 分钟前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
WinterKay35 分钟前
【开源】我写了一个轻量级本地数据库浏览工具,支持 MySQL/Redis 只读查询
数据库·mysql·开源
zxrhhm2 小时前
Oracle 索引完整指南
数据库·oracle
程序猿乐锅2 小时前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
Navicat中国3 小时前
使用 Navicat 导入向导导入 Excel 数据时,系统提示导入成功,表中也能看到数据,但行数统计显示为 0,这是什么原因?
数据库·excel·导入
gmaajt3 小时前
Golang怎么做国际化多语言_Golang i18n教程【核心】
jvm·数据库·python
折哥的程序人生 · 物流技术专研4 小时前
从“卡死”到“秒过”:WMS销售数据跨库回填的极限优化之旅
数据库·机器学习·oracle
李可以量化4 小时前
DeepSeek 量化交易实战:用标准化提示词模板实现 AI 辅助交易决策
大数据·数据库·人工智能
maqr_1104 小时前
CSS如何利用Sass定义全局阴影方案_通过变量实现统一CSS风格
jvm·数据库·python
m0_613856294 小时前
uni-app怎么做类似于美团的商家评价星级 uni-app五星评分组件制作【实战】
jvm·数据库·python