基于docker的Mongodb部署文档 文件映射方式
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部署文档 文件映射方式相关推荐
- 完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档
完整企业官网源码,前端基于Vue+ElementUI,后台基于基于core3 webapi,含数据库文件,含详情安装部署文档 完整代码下载地址:完整企业官网源码 某工程管理有限公司企业官网 前端 新版 ...
- Docker部署文档
Docker部署文档 目录 Docker部署文档 1 一.什么是Docker 3 1.1Docker简介 3 1.2对比传统虚拟机总结 4 1.3Docker通常用于如下场景: 5 1.4基本概念 5 ...
- 云发布的Docker部署文档
云发布的Docker部署文档 文章目录 云发布的Docker部署文档 1.服务器安装 Docker 2.修改后端微服务的配置 2.1 修改 MySQL 的配置 2.2 修改 Redis 的配置 2.3 ...
- linux上搭载was应用上传中文文件,受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明...
本文档的主要内容详细介绍的是受支持的Linux操作系统和WAS ND 9.0安装部署文档的资料说明. 从was9.0开始支持的最低版本的red hat Linux系统为6.6且仅支持64位操作系统 计 ...
- IM开源项目OpenIM部署文档-从准备工作到nginx配置
IM开源项目OpenIM部署文档-从准备工作到nginx配置 2022-11-14 22:27·OpenIM 一.准备工作 运行环境 linux系统即可, Ubuntu 7.5.0-3ubuntu1~ ...
- Yapi 可视化接口管理平台部署文档
一[yabi介绍] 1.1 官网 github:https://github.com/ymfe/yapi Yapi 可视化接口管理平台 Yapi 是高效.易用.功能强大的 api 管理平台,旨在为开发 ...
- 蜜聊-密聊IM即时通讯部署文档搭建教程
哇呼服务端安装部署文档 共92页 需要的私聊我哦 目录 哇呼服务端安装部署文档 目录 端口说明 一.部署方式一直接安装 1) Linux系统下直接安装IM相关服务 1. 安装MongoDB 2. ...
- loganalyzer部署文档-(第一部分)
loganalyzer部署文档 环境准备: 简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从 ...
- 基于GitBook框架搭建技术文档平台
源宝导读:为了向用户更好的传递ERP开放平台的价值与技术知识,我们基于GitBook框架搭建了一个文档中心站点,本文将介绍此站点的设计与实现过程. 一.项目架构图 因为文档会涉及到很多的产品线,所以目 ...
- 华为云鲲鹏服务器部署文档--java微服务
华为云鲲鹏服务器部署文档 河南中电高科计算机技术有限公司 2020.5.9 适用于java微服务技术栈. CentOS 7.6 64bit ISO 适用于鲲鹏服务器arm架构的CentOS 7.6.1 ...
最新文章
- 一文帮你梳理清楚:奇异值分解和矩阵分解 | 技术头条
- Spherical Harmonics Lighting的代码实现(基于OpenGL)
- iview标签页的点击方法_18页PPT:6个高手常用的自我介绍套路,很是得人心,学习...
- 2、IDEA以新窗口的形式打开多个项目
- nssl1232-函数【数论,欧拉函数,莫比乌斯反演】
- 去哪里找与计算机相关的外文,找计算机相关的外文翻译
- 使用主题来自动包装控件样式
- 这游戏全服只有一个玩家,硬是坚挺了18年,官方竟还推新版本?
- 目标管理体系:OKR
- AAAI 2021论文:利用深度元学习对城市销量进行预测
- CSS如何设置div半透明效果
- 域名、dns、服务器、IP、主机名(写的好)
- Android日历控件
- 下载jupyterlab中的文件夹
- Pascal triangle 帕斯卡三角形 杨辉三角形 二项式定理
- Chapter 2 认识游戏
- Java+webdriver的自动化测试框架搭建
- Missing Marketing Icon. iOS Apps must include a 1024x1024px Marketing Icon in PNG format. Apps that
- 解决电脑C盘空间不足,发现微信和qq文件占用了大量内存
- 想哪写哪_随笔20191203