Mongodb异地部署(本地读写)

分片作用:

l 复制所有的写入操作到主节点

l 延迟的敏感数据会在主节点查询

l 单个副本集限制在12个节点

l 当请求量巨大时会出现内存不足。

l 本地磁盘不足

l 垂直扩展价格昂贵

MongoDB副本集:

搭配方式使用一主多从模式

一个分片内有一个主节点和多个从节点,数据写入通过mongos(路由)访问主节点并写入,且只能通过主节点写入。客户端需要读取分片内容时,可以通过全部节点读取,所以主节点可读可写,从节点只能读文件。

通过Zones(区域)方式实现数据的本地读写,将数据集合(数据库的表)分片,指定之分给一个分片,也就是一个区域,只允许该分片或该区域的节点对数据进行读写,实现过程如下:

给集合添加分片索引(两种方法 哈希和索引唯一),使用索引唯一方式,随机指定一个分片为索引,需要使用索引迁移,将索引重新指定给对应分片。

两个问题:

对数据建立索引时,如果不是在对应分片上,需要再对集合进行索引迁移,集合在迁移到指定分片之前的数据会留在第一次指定的分片上,不影响对应分片上的数据读写。例如,现在集合“水果”中有“香蕉、苹果、葡萄”,需要将该集合索引到成都分片上,但是随机索引到了上海,现在我们在上海的分片上是可以查询到集合“水果”内容为“香蕉、苹果、葡萄”,现在将索引迁移到成都,并在集合中插入“火龙果”,这时在成都上查询该集合的结果时“香蕉、苹果、葡萄、火龙果”,而在上海分片上查到的还是之前状态的集合内容“香蕉、苹果、葡萄”。可直接在上海分片上删除该集合。

如果在上海分片中删除集合“水果”,在路由中这看不到该集合,只能在成都分片(索引的分片)查询到。路由对该表的查询和写入不会受到影响

分片主节点挂掉,其他从节点会随机升级一个主节点。原主节点恢复后会变成从节点继续工作。

五节点mongodb集群部署

五个节点公网IP

文中IP请更换为自己不同节点的IP

部署过程的部分操作已经写成脚本:

https://download.csdn.net/download/charles_zhang_/11832579

开始部署mongodb(确保各服务器之间的27001、27002、27003、27004、27005、27017、27018端口开启状态),分别在五台服务器创建mongodb文件路径:

mkdir -p /home/mongodb/data/shard{1,2,3,4,5}
​
mkdir -p /home/mongodb/conf
​
mkdir -p /home/mongodb/data/config
​
mkdir -p /home/mongodb/log/
​
touch  /home/mongodb/log/config.log
​
touch  /home/mongodb/log/mongos.log
​
touch  /home/mongodb/log/shard{1,2,3,4,5}.log

系统没有mongodb时安装:

安装mongodb

创建yum源文件:

cat >/etc/yum.repos.d/mongodb-org-4.0.repo <<EOF
​
[mngodb-org]
​
name=MongoDB Repository
​
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/
​
gpgcheck=0
​
enabled=1
​
EOF

安装之前先更新所有包 :

yum update

安装命令:

yum -y install mongodb-org

启动mongodb :systemctl start mongod.service
​
设置mongodb开启自启动:systemctl enable mongod
​
停止mongodb :systemctl stop mongod.service
​
查看mongodb的状态:systemctl status mongod.service

配置服务器部署(五台同时)

cat >/home/mongodb/conf/config.conf<<EOF
​
dbpath=/home/mongodb/data/config
​
logpath=/home/mongodb/log/config.log
​
port=27018
​
logappend=true
​
fork=true
​
maxConns=5000
​
replSet=configs
​
configsvr=true
​
bind_ip=0.0.0.0
​
EOF

分片服务部署(五个服务器同步):

cat >/home/mongodb/conf/shard1.conf<<EOF
​
dbpath=/home/mongodb/data/shard1
​
logpath=/home/mongodb/log/shard1.log
​
port=27001
​
logappend=true
​
fork=true
​
maxConns=5000
​
storageEngine=mmapv1
​
shardsvr=true
​
replSet=shard1
​
bind_ip=0.0.0.0
​
EOF
​​
cat >/home/mongodb/conf/shard2.conf<<EOF
​
dbpath=/home/mongodb/data/shard2
​
logpath=/home/mongodb/log/shard2.log
​
port=27002
​
logappend=true
​
fork=true
​
maxConns=5000
​
storageEngine=mmapv1
​
shardsvr=true
​
replSet=shard2
​
bind_ip=0.0.0.0
​
EOF
​​
cat >/home/mongodb/conf/shard3.conf<<EOF
​
dbpath=/home/mongodb/data/shard3
​
logpath=/home/mongodb/log/shard3.log
​
port=27003
​
logappend=true
​
fork=true
​
maxConns=5000
​
storageEngine=mmapv1
​
shardsvr=true
​
replSet=shard3
​
bind_ip=0.0.0.0
​
EOF
​​
cat >/home/mongodb/conf/shard4.conf<<EOF
​
dbpath=/home/mongodb/data/shard4
​
logpath=/home/mongodb/log/shard4.log
​
port=27004
​
logappend=true
​
fork=true
​
maxConns=5000
​
storageEngine=mmapv1
​
shardsvr=true
​
replSet=shard4
​
bind_ip=0.0.0.0
​
EOF
​​
cat >/home/mongodb/conf/shard5.conf<<EOF
​
dbpath=/home/mongodb/data/shard5
​
logpath=/home/mongodb/log/shard5.log
​
port=27005
​
logappend=true
​
fork=true
​
maxConns=5000
​
storageEngine=mmapv1
​
shardsvr=true
​
replSet=shard5
​
bind_ip=0.0.0.0
​
EOF

路由服务部署(5台服务器执行相同操作):

cat >/home/mongodb/conf/mongos.conf<<EOF
​
logpath=/home/mongodb/log/mongos.log
​
logappend = true
​
port = 27017
​
fork = true
​
configdb = configs/124.251.74.76:27018,211.148.19.220:27018,47.103.118.8:27018,122.128.107.99:27018,47.103.117.111:27018
​
maxConns=20000
​
bind_ip=0.0.0.0
​
EOF

正式环境部署时需要使用使用上面的启动格式 -v参数的添加是将本地的文件映射到docker镜像中,配置、log、data文件需要写在本地(使用k8s时)

docker run -d -e "container=docker" --privileged=true -v /home/vm_mongodb-2/etc/mongod.conf:/etc/mongod.conf -v /home/vm_mongodb-2/var/lib/mongo/:/var/lib/mongo/ -v /home/vm_mongodb-2/var/log/mongodb/:/var/log/mongodb/ --name mongodb-2 -h mongodb-2 --network host mongodb:init /usr/sbin/init

登录(任意一台即可)配置设置复制集:

mongod -f /home/mongodb/conf/config.conf
​
mongo --port 27018
​
use admin
​
config={_id:"configs",members:[{_id:0,host:"122.128.107.99:27018"},{_id:1,host:"211.148.19.220:27018"}, {_id:2,host:"47.103.118.8:27018"},{_id:3,host:"124.251.74.76:27018"},{_id:4,host:"47.103.117.111:27018"}]}
​
rs.initiate(config)
​
rs.status()

<!--错误:"No host described in new configuration 1 for replica set configs maps to this node"-->

<!--说明端口不通或者端口没有开放-->

--><!--

<!--如果端口状态为"stateStr" : "STARTUP"-->

<!--STARTUP:刚加入到复制集中,配置还未加载-->

<!--STARTUP2:配置已加载完,初始化状态-->

<!--RECOVERING:正在恢复,不适用读-->

<!--ARBITER: 仲裁者-->

<!--DOWN:节点不可到达-->

<!--UNKNOWN:未获取其他节点状态而不知是什么状态,一般发生在只有两个成员的架构-->

<!--REMOVED:移除复制集-->

<!--ROLLBACK:数据回滚,在回滚结束时,转移到RECOVERING或SECONDARY状态-->

<!--FATAL:出错。查看日志grep “replSet FATAL”找出错原因,重新做同步-->

<!--PRIMARY:主节点-->

<!--SECONDARY:备份节点-->

启动分片:

mongod -f /home/mongodb/conf/shard1.conf
​
mongod -f /home/mongodb/conf/shard2.conf
​
mongod -f /home/mongodb/conf/shard3.conf
​
mongod -f /home/mongodb/conf/shard4.conf
​
mongod -f /home/mongodb/conf/shard5.conf
​

将分片配置为复制集(五个节点同步)

登录分片,配置复制集(可在任意一台服务器登录配置):

mongo --port 27001
​
use admin
​
rs.initiate({_id:"shard1",members:[{_id:0,host:"124.251.74.76:27001"},{_id:1,host:"211.148.19.220:27001"}, {_id:2,host:"47.103.118.8:27001"},{_id:3,host:"122.128.107.99:27001"},{_id:4,host:"47.103.117.111:27001"}]})
​​
mongo --port 27002
​
use admin
​
rs.initiate({_id:"shard2",members:[{_id:0,host:"211.148.19.220:27002"},{_id:1,host:"124.251.74.76:27002"}, {_id:2,host:"47.103.118.8:27002"},{_id:3,host:"122.128.107.99:27002"},{_id:4,host:"47.103.117.111:27002"}]})
​
​
mongo --port 27003
​
use admin
​
rs.initiate({_id:"shard3",members:[{_id:0,host:"47.103.118.8:27003"},{_id:1,host:"124.251.74.76:27003"},{_id:2,host:"211.148.19.220:27003"},{_id:3,host:"122.128.107.99:27003"}, {_id:4,host:"47.103.117.111:27003"}]})
​
​
mongo --port 27004
​
use admin
​
rs.initiate({_id:"shard4",members:[{_id:0,host:"122.128.107.99:27004"},{_id:1,host:"124.251.74.76:27004"},{_id:2,host:"211.148.19.220:27004"},{_id:3,host:"47.103.118.8:27004"},{_id:4,host:"47.103.117.111:27004"}]})
​​
mongo --port 27005
​
use admin
​
rs.initiate({_id:"shard5",members:[{_id:0,host:"47.103.117.111:27005"},{_id:1,host:"211.148.19.220:27005"}, {_id:2,host:"47.103.118.8:27005"},{_id:3,host:"124.251.74.76:27005"},{_id:4,host:"122.128.107.99:27005"}]})
​
启动mongoes
​
mongos -f /home/mongodb/conf/mongos.conf
​
启动分片功能
​
连接mongo:
​
mongo --port 27017
​
use admin
​
sh.addShard("shard1/124.251.74.76:27001,211.148.19.220:27001,47.103.118.8:27001,122.128.107.99:27001,47.103.117.111:27001")
​
sh.addShard("shard2/211.148.19.220:27002,124.251.74.76:27002,47.103.118.8:27002,122.128.107.99:27002,47.103.117.111:27002")
​
sh.addShard("shard3/47.103.118.8:27003,124.251.74.76:27003,211.148.19.220:27003,122.128.107.99:27003,47.103.117.111:27003")
​
sh.addShard("shard4/122.128.107.99:27004,124.251.74.76:27004,211.148.19.220:27004,47.103.118.8:27004,47.103.117.111:27004")
​
sh.addShard("shard5/47.103.117.111:27005,124.251.74.76:27005,211.148.19.220:27005,47.103.118.8:27005,122.128.107.99:27005")
​
sh.status()

之后登录mongos验证分片和配置

mongo --port 27017
​
usemongo
​
db.mongod1.insert({_id:1,name:"香蕉",price:13})
​
db.mongod2.insert({_id:1,name:"葡萄",price:13})
​
db.mongod3.insert({_id:1,name:"苹果",price:13})
​
db.mongod4.insert({_id:1,name:"李子",price:13})
​
db.mongod5.insert({_id:1,name:"梨",price:13})

关闭平衡器

sh.stopBalancer()

查看平衡器状态

sh.isBalancerRunning()

首先允许数据库可以被分片

sh.enableSharding("dbname")

为分片的集合配置shard key

db.mongodb1.createIndex({ _id:1})  #唯一索引
​
db.mongodb2.createIndex({ _id:1})
​
db.mongodb3.createIndex({ _id:1})
​
db.mongodb4.createIndex({ _id:1})
​
db.mongodb5.createIndex({ _id:1})

对集合进行分片

sh.shardCollection("mongo.mongodb1",{"_id":1})
​
sh.shardCollection("mongo.mongodb2",{"_id":1})
​
sh.shardCollection("mongo.mongodb3",{"_id":1})
​
sh.shardCollection("mongo.mongodb4",{"_id":1})
​
sh.shardCollection("mongo.mongodb5",{"_id":1})
​
可以通过sh.status()查看分片情况

迁移数据块(chunks) (迁移到指定分片或区域中)在迁移过程中不可以进行数据写入,否则会导致机器卡死 :

db.adminCommand( { moveChunk : "mongo.mongodb1",find : {_id : 1},to : "shard1" } )
​
db.adminCommand( { moveChunk : "mongo.mongodb2",find : {_id : 1},to : "shard2" } )
​
db.adminCommand( { moveChunk : "mongo.mongodb3",find : {_id : 1},to : "shard3" } )
​
db.adminCommand( { moveChunk : "mongo.mongodb4",find : {_id : 1},to : "shard4" } )
​
db.adminCommand( { moveChunk : "mongo.mongodb5",find : {_id : 1},to : "shard5" } )

在使用sh.status()确认分片情况

(可选)设置chunk的大小(默认为64M):

db.settings.save( { _id:"chunksize", value: <sizeInMB> } )

(可选)可以为分片添加tag :

sh.addShardTag("shard1","sh")

(可选)合并数据块

db.runCommand( { mergeChunks: "mydb.mongod",
​
bounds: [ { "_id": 30 },
​
{ "_id":32} ]
​
} )

配置过程:

通过改动priority的值来实现(默认的优先级是1(0-100)。priority的值设的越大,就优先成为主)

PRIMARY> config=rs.conf()
​
PRIMARY>config.members[1].priority = **3**PRIMARY> rs.reconfig(config)

参考 设置优先级:https://blog.csdn.net/weixin_34082695/article/details/93544809

基于docker的Mongodb部署文档 文件映射方式相关推荐

  1. 完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档

    完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档 完整代码下载地址:完整企业官网源码 某工程管理有限公司企业官网 前端 新版 ...

  2. Docker部署文档

    Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...

  3. 云发布的Docker部署文档

    云发布的Docker部署文档 文章目录 云发布的Docker部署文档 1.服务器安装 Docker 2.修改后端微服务的配置 2.1 修改 MySQL 的配置 2.2 修改 Redis 的配置 2.3 ...

  4. linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...

    本文档的主要内容详细介绍的是受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明. 从was9.0开始支持的最低版本的red hat Linux系统为6.6且仅支持64位操作系统 计 ...

  5. IM开源项目OpenIM部署文档-从准备工作到nginx配置

    IM开源项目OpenIM部署文档-从准备工作到nginx配置 2022-11-14 22:27·OpenIM 一.准备工作 运行环境 linux系统即可, Ubuntu 7.5.0-3ubuntu1~ ...

  6. Yapi 可视化接口管理平台部署文档

    一[yabi介绍] 1.1 官网 github:https://github.com/ymfe/yapi Yapi 可视化接口管理平台 Yapi 是高效.易用.功能强大的 api 管理平台,旨在为开发 ...

  7. 蜜聊-密聊IM即时通讯部署文档搭建教程

    哇呼服务端安装部署文档 共92页  需要的私聊我哦  目录 哇呼服务端安装部署文档 目录 端口说明 一.部署方式一直接安装 1) Linux系统下直接安装IM相关服务 1. 安装MongoDB 2. ...

  8. loganalyzer部署文档-(第一部分)

    loganalyzer部署文档 环境准备: 简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从 ...

  9. 基于GitBook框架搭建技术文档平台

    源宝导读:为了向用户更好的传递ERP开放平台的价值与技术知识,我们基于GitBook框架搭建了一个文档中心站点,本文将介绍此站点的设计与实现过程. 一.项目架构图 因为文档会涉及到很多的产品线,所以目 ...

  10. 华为云鲲鹏服务器部署文档--java微服务

    华为云鲲鹏服务器部署文档 河南中电高科计算机技术有限公司 2020.5.9 适用于java微服务技术栈. CentOS 7.6 64bit ISO 适用于鲲鹏服务器arm架构的CentOS 7.6.1 ...

最新文章

  1. 一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条
  2. Spherical Harmonics Lighting的代码实现(基于OpenGL)
  3. iview标签页的点击方法_18页PPT:6个高手常用的自我介绍套路,很是得人心,学习...
  4. 2、IDEA以新窗口的形式打开多个项目
  5. nssl1232-函数【数论,欧拉函数,莫比乌斯反演】
  6. 去哪里找与计算机相关的外文,找计算机相关的外文翻译
  7. 使用主题来自动包装控件样式
  8. 这游戏全服只有一个玩家,硬是坚挺了18年,官方竟还推新版本?
  9. 目标管理体系:OKR
  10. AAAI 2021论文:利用深度元学习对城市销量进行预测
  11. CSS如何设置div半透明效果
  12. 域名、dns、服务器、IP、主机名(写的好)
  13. Android日历控件
  14. 下载jupyterlab中的文件夹
  15. Pascal triangle 帕斯卡三角形 杨辉三角形 二项式定理
  16. Chapter 2 认识游戏
  17. Java+webdriver的自动化测试框架搭建
  18. Missing Marketing Icon. iOS Apps must include a 1024x1024px Marketing Icon in PNG format. Apps that
  19. 解决电脑C盘空间不足,发现微信和qq文件占用了大量内存
  20. 想哪写哪_随笔20191203

热门文章

  1. 集装箱装柜计算机器在线,装箱大师在线计算教程
  2. Zalo电脑版多开软件
  3. 震旦ad369s_震旦ad369s打印机驱动(震旦ad369s驱动程序) 安装版
  4. 【原创】Linux 菜鸟入门记录 常用命令 常用软件
  5. Reza Zafarani经典教材-《社交媒体挖掘》PDF+随书课件打包分享
  6. 合并报表软件系统推荐
  7. stm32用tft-lcd 显示自定义大小的字体
  8. Url重写——伪静态实现
  9. 5G全息展示系统黑科技助力进博会,微美全息引领AR+AI全息通讯直播应用
  10. 【Kotlin -- 知识点】学习资料