惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
Google DeepMind News
Google DeepMind News
G
Google Developers Blog
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
Jina AI
Jina AI
宝玉的分享
宝玉的分享
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
V
V2EX
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
Last Week in AI
Last Week in AI
B
Blog
博客园 - 叶小钗
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
A
About on SuperTechFans
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog

f2h2h1's blog

使用yii3实现一个微框架 claw养殖技术 计算机网络基础知识 定时任务 ACME的使用经验 magento2加上varnish缓存 开发Magento2的模块 在magento2中使用persisted-query socket编程 一些开发笔记 一段CSDN文章主要内容的油猴脚本 电子邮件的不完整总结 git的笔记 在Windows下配置PHP服务器 终端,控制台和外壳 PHP各种运行方式的不完整总结 把网页导出成PDF 和颜色相关的笔记 HTTP认证方式的不完整总结 SEO的经验 密码学入门简明指南 文件的上传和下载 用纯CSS3实现的滑动按钮 在VSCode里调试PHP Linux的GUI 关于字符编码的一些坑 nc的使用和原理 在Windows下安装Magento2 对JS原型链的理解 使用docker-compose部署magento2
mongodb分片
2020-06-19 · via f2h2h1's blog

这篇文章最后更新的时间在六个月之前,文章所叙述的内容可能已经失效,请谨慎参考!

MongoDB集群规划表

节点 主机 端口 副本集
路由服务器0 Router 27017
配置集节点0 ConfigServer1 27018 cfg
配置集节点1 ConfigServer2 27019 cfg
分片0节点0 rs0_0 27020 rs0
分片0节点1 rs0_1 27021 rs0
分片0节点2 rs0_2 27022 rs0
分片1节点0 rs1_0 27023 rs1
分片1节点1 rs1_1 27024 rs1
分片1节点2 rs1_2 27025 rs1

一个路由服务器 两个配置节点,一主一副本 两个分片,两个分片都是三个节点,一主二副本

集群部署的步骤

0.新建一些必要的文件和文件夹

日志文件,pid文件,以及存放数据的文件夹

rm -r -f /data/log && \
rm -r -f /data/pid && \
rm -r -f /data/mydb && \
mkdir /data/log && \
mkdir /data/pid && \
mkdir /data/mydb && \
mkdir /data/mydb/config0 && \
mkdir /data/mydb/config1 && \
mkdir /data/mydb/rs0_0 && \
mkdir /data/mydb/rs0_1 && \
mkdir /data/mydb/rs0_2 && \
mkdir /data/mydb/rs1_0 && \
mkdir /data/mydb/rs1_1 && \
mkdir /data/mydb/rs1_2 && \
touch /data/log/config0.log && \
touch /data/log/config1.log && \
touch /data/log/rs0_0.log && \
touch /data/log/rs0_1.log && \
touch /data/log/rs0_2.log && \
touch /data/log/rs1_0.log && \
touch /data/log/rs1_1.log && \
touch /data/log/rs1_2.log && \
touch /data/log/mongos.log && \
touch /data/pid/config0.pid && \
touch /data/pid/config1.pid && \
touch /data/pid/rs0_0.pid && \
touch /data/pid/rs0_1.pid && \
touch /data/pid/rs0_2.pid && \
touch /data/pid/rs1_0.pid && \
touch /data/pid/rs1_1.pid && \
touch /data/pid/rs1_2.pid && \
touch /data/pid/mongos.pid

1.部署配置节点

启动两个配置节点

mongod --configsvr --replSet "cfg" --bind_ip_all --port 27018 --fork --logpath /data/log/config0.log --logappend --pidfilepath /data/pid/config0.pid --dbpath /data/mydb/config0

mongod --configsvr --replSet "cfg" --bind_ip_all --port 27019 --fork --logpath /data/log/config1.log --logappend --pidfilepath /data/pid/config1.pid --dbpath /data/mydb/config1

进入第一个配置节点

mongo --port 27018

把配置节点加入副本集

rs.initiate( {
   _id: "cfg",
   configsvr: true,
   members: [
      { _id: 0, host: "127.0.0.1:27018" },
      { _id: 1, host: "127.0.0.1:27019" }
   ]
} )
  • 配置副本集最好有三个以上,一般配置副本集不需要仲裁服务器

2.部署分片节点

启动第一个分片的副本集

mongod --shardsvr --replSet "rs0" --bind_ip_all --port 27020 --fork --logpath /data/log/rs0_0.log --logappend --pidfilepath /data/pid/rs0_0.pid --dbpath /data/mydb/rs0_0

mongod --shardsvr --replSet "rs0" --bind_ip_all --port 27021 --fork --logpath /data/log/rs0_1.log --logappend --pidfilepath /data/pid/rs0_1.pid --dbpath /data/mydb/rs0_1

mongod --shardsvr --replSet "rs0" --bind_ip_all --port 27022 --fork --logpath /data/log/rs0_2.log --logappend --pidfilepath /data/pid/rs0_2.pid --dbpath /data/mydb/rs0_2

进入第一个分片的副本集的第一个节点

mongo --port 27020

把分片节点加入副本集

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "127.0.0.1:27020" },
      { _id: 1, host: "127.0.0.1:27021" },
      { _id: 2, host: "127.0.0.1:27022" }
   ]
})

启动第二个分片的副本集

mongod --shardsvr --replSet "rs1" --bind_ip_all --port 27023 --fork --logpath /data/log/rs1_0.log --logappend --pidfilepath /data/pid/rs1_0.pid --dbpath /data/mydb/rs1_0

mongod --shardsvr --replSet "rs1" --bind_ip_all --port 27024 --fork --logpath /data/log/rs1_1.log --logappend --pidfilepath /data/pid/rs1_1.pid --dbpath /data/mydb/rs1_1

mongod --shardsvr --replSet "rs1" --bind_ip_all --port 27025 --fork --logpath /data/log/rs1_2.log --logappend --pidfilepath /data/pid/rs1_2.pid --dbpath /data/mydb/rs1_2

进入第二个分片的副本集的第一个节点

mongo --port 27023

把分片节点加入副本集

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "127.0.0.1:27023" },
      { _id: 1, host: "127.0.0.1:27024" },
      { _id: 2, host: "127.0.0.1:27025" }
   ]
})
  • 副本集里应该至少有一个仲裁服务器

3.部署路由节点

启动路由节点

mongos --configdb cfg/127.0.0.1:27018,127.0.0.1:27019 --bind_ip_all --port 27017 --fork --logpath /data/log/mongos.log --logappend --pidfilepath /data/pid/mongos.pid

进入路由节点

mongo --port 27017

把两个分片加入到路由里

sh.addShard("rs0/127.0.0.1:27020,127.0.0.1:27021,127.0.0.1:27022")
sh.addShard("rs1/127.0.0.1:27023,127.0.0.1:27024,127.0.0.1:27025")

创建分片集合

sh.enableSharding('需要分片的库名')
sh.shardCollection('需要分片的库名.需要分片集合名', {'片键':'hashed'})
  • 如果有多个路由,只需要配置一个即可

一些常用的命令

查看集群状态

sh.status()

查看分片状态

db.stats()

查看是否为主节点

db.isMaster()