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

推荐订阅源

博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
P
Palo Alto Networks Blog
SecWiki News
SecWiki News
S
Secure Thoughts
P
Privacy International News Feed
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Tenable Blog
W
WeLiveSecurity
Application and Cybersecurity Blog
Application and Cybersecurity Blog
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Spread Privacy
Spread Privacy
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero
C
CERT Recently Published Vulnerability Notes
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
Cyberwarzone
Cyberwarzone
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Schneier on Security
L
Lohrmann on Cybersecurity
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Scott Helme
Scott Helme
H
Hacker News: Front Page
博客园 - Franky
月光博客
月光博客
D
DataBreaches.Net
Know Your Adversary
Know Your Adversary
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
O
OpenAI News
N
Netflix TechBlog - Medium
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
博客园 - 叶小钗
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog
人人都是产品经理
人人都是产品经理
I
Intezer
酷 壳 – CoolShell
酷 壳 – CoolShell
云风的 BLOG
云风的 BLOG
IT之家
IT之家
V
Vulnerabilities – Threatpost
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LangChain Blog
Google Online Security Blog
Google Online Security Blog
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - 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 浏览器和服务器通讯方式的不完整总结 观察网站性能 一些关于Linux的笔记 telnet的不完整总结 在Windows下安装pear MySQL的时间类型和时间相关的函数 Windows下通过PEB读取进程的环境变量 关于 在VSCode里使用Xdebug远程调试PHP 在Windows下搭建git服务 关于环境变量的不完整总结 使用shell实现的kv数据库 如何完成以xx管理系统为选题的毕业设计 数字号码资源 各种标记语言 使用PowerShell实现的http服务器 kind相关经验 DNSSEC简介 nginx+ffmpeg+websocket实现的直播例子 使用Tesseract识别字符验证码 使用docker部署nuxt FirstData后台的设置 paypal,firtdata,支付宝的不完整接入指南 微信支付的不完整接入指南 用docker-compose部署lnmp环境 练习
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()