Mongodb 副本集+分片
mongodb的分片功能是建立在副本集之上的,所以首先我们尝试着配置副本集。
docker启动3个已经安装好mongo的镜像
# docker run -idt --name mongodb_01 mongodb_master:v2 /bin/bash
# docker run -idt --name mongodb_02 mongodb_master:v2 /bin/bash
# docker run -idt --name mongodb_03 mongodb_master:v2 /bin/bash
查看容器ip
# docker inspect mongodb_01 | grep IP
3个容器的ip为
172.17.0.4,172.17.0.5,172.17.0.6
进入容器,分别建立mongodb的数据和日志文件夹,编辑配置文件
# docker exec -it mongodb_01 /bin/bash
# mkdir -p /opt/mongodb/rs0/data
# mkdir -p /opt/mongodb/rs0/log
# vi /usr/local/mongdb/conf/rs0.conf
dbpath=/opt/mongodb/rs0/data #数据目录
logpath=/opt/mongodb/rs0/log/rs0.log #日志目录
pidfilepath=/opt/mongodb/rs0/log/rs0.pid #pid
logappend=true
replSet=rs0 #副本集名称
bind_ip=172.17.0.4 #容器对应的ip
port=27617
fork=true
maxConns=2000
//启动容器
# mongod -f /usr/local/mongdb/conf/rs0.conf
3个容器的mongodb全部启动后,随便连接一个mongodb
# mongo --host 172.17.0.4 --port
> rs.initiate() //初始化副本集
> rs.conf()//确认更改
> rs.add({host:"172.17.0.5:27518", priority: }) //将另外两个mongo服务加入副本集
> rs.conf() //确认更改
> rs.status() //查看副本及状态
priority代表副本集的优先级,数值越大优先级越高,可以通过rs.status()查看当前副本集的状态,stateStr表示副本及的身份,可以看到172.17.0.5目前的身份是PRIMARY
,另外两个都是SECONDARY,这时我们停止172.17.0.5的mongo服务,过一段时间再看,0.4和0.6中其中一台节点就会变成PRIMARY
,再开启0.5上的mongo服务,又会回复成原来的状态
"members" : [
{
"_id" : ,
"name" : "172.17.0.6:27619",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2018-10-13T04:57:35Z"),
"syncingTo" : "172.17.0.4:27617",
"syncSourceHost" : "172.17.0.4:27617",
"syncSourceId" : ,
"infoMessage" : "",
"configVersion" : ,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : ,
"name" : "172.17.0.5:27618",
"health" : ,
"state" : ,
"stateStr" : "PRIMARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDurable" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2018-10-13T04:57:35Z"),
"optimeDurableDate" : ISODate("2018-10-13T04:57:35Z"),
"lastHeartbeat" : ISODate("2018-10-13T04:57:38.894Z"),
"lastHeartbeatRecv" : ISODate("2018-10-13T04:57:38.892Z"),
"pingMs" : NumberLong(),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -,
"infoMessage" : "",
"electionTime" : Timestamp(, ),
"electionDate" : ISODate("2018-10-10T03:38:47Z"),
"configVersion" :
},
{
"_id" : ,
"name" : "172.17.0.4:27617",
"health" : ,
"state" : ,
"stateStr" : "SECONDARY",
"uptime" : ,
"optime" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDurable" : {
"ts" : Timestamp(, ),
"t" : NumberLong()
},
"optimeDate" : ISODate("2018-10-13T04:57:35Z"),
"optimeDurableDate" : ISODate("2018-10-13T04:57:35Z"),
"lastHeartbeat" : ISODate("2018-10-13T04:57:38.893Z"),
"lastHeartbeatRecv" : ISODate("2018-10-13T04:57:38.893Z"),
"pingMs" : NumberLong(),
"lastHeartbeatMessage" : "",
"syncingTo" : "172.17.0.5:27618",
"syncSourceHost" : "172.17.0.5:27618",
"syncSourceId" : ,
"infoMessage" : "",
"configVersion" :
}
],
了解了副本集的配置,接下来进行分片的配置
分片即是通过某种算法,将数据分散到不同的片区上,但这样同时会产生一个问题,如果某一个片区出现问题则整个数据都会变的不可用。
所以,需要将分散到不同片区上的数据再以副本集的形式存放,这样在分片的同时也就具备了容错的能力,概念上其实和RAID很相似。
mongodb的分片配置包含以下几个角色:
Config Server:配置分片信息
Shard:实际存储分片数据的地方
mongos:分片的路由,也是前端实际连接的实例
这里盗一张网上的图:

依然用之前的3个镜像,建立需要的文件夹
conf对应Config Server的文件夹
mongos 对应 mongos的文件夹
shard这里我们分为3片,分别对应 shard1,shard2,shard3
# mkdir -p /opt/mongodb/conf/data
# mkdir -p /opt/mongodb/conf/log
# mkdir -p /opt/mongodb/mongos/data
# mkdir -p /opt/mongodb/mongos/log
# mkdir -p /opt/mongodb/shard1/data
# mkdir -p /opt/mongodb/shard1/log
# mkdir -p /opt/mongodb/shard2/data
# mkdir -p /opt/mongodb/shard2/log
# mkdir -p /opt/mongodb/shard3/data
# mkdir -p /opt/mongodb/shard3/log
编辑每个角色的配置文件
Config Server
# vi /usr/local/mongdb/conf/conf.conf
dbpath=/opt/mongodb/conf/data
logpath=/opt/mongodb/conf/log/conf.log
pidfilepath=/opt/mongodb/conf/log/conf.pid
logappend=true replSet=configs
bind_ip=172.17.0.6
port= fork=true maxConns=
configsvr=true #Config Server服务器增加此行
mongos
# vi /usr/local/mongdb/conf/mongos.conf
logpath=/opt/mongodb/mongos/log/mongos.log
pidfilepath=/opt/mongodb/conf/log/mongos.pid
logappend=true bind_ip=172.17.0.6
port= fork=true maxConns= configdb=configs/172.17.0.4:,172.17.0.5:,172.17.0.6:27019 #Config Server的地址
shard
# vi /usr/local/mongdb/conf/shard1.conf
pidfilepath = /opt/mongodb/shard1/log/shard1.pid
dbpath = /opt/mongodb/shard1/data
logpath = /opt/mongodb/shard1/log/shard1.log
logappend = true bind_ip = 172.17.0.6
port =
fork = true replSet=shard1 shardsvr = true
maxConns=
配置好后,分别启动Config Server,shard1,shard2,shard3的 mong实例
按照上面介绍的配置副本集方法,分别给Config server,shard1,shard2,shard3配置副本集
最后启动mongos实例,注意命令是mongos 不是mongod
# mongos -f /usr/local/mongodb/conf/mongos.conf
连接mongos实例启用分片
# mongo --host 172.17.0.6:
>sh.addShard("shard1/172.17.0.4:27117,172.17.0.5:27118,172.17.0.6:27119")
>sh.addShard("shard1/172.17.0.4:27217,172.17.0.5:27218,172.17.0.6:27219")
>sh.addShard("shard1/172.17.0.4:27317,172.17.0.5:27318,172.17.0.6:27319") >db.runCommand( { enablesharding :"testshard"}); //数据库启用分片
>db.runCommand( { shardcollection : "testshard.test",key : {id: "hashed"} } ) //表启用分片,并指定片键
到这里,mongodb的分片集群就配置完成了。可以在不同的镜像中启用mongos和keepalived配合实现高可用。
Mongodb 副本集+分片的更多相关文章
- MongoDB 副本集+分片 认证方式搭建
MongoDB 副本集+分片 认证方式搭建 参考资料: https://www.cnblogs.com/ityouknow/p/7344005.htmlhttps://jorwen-fang.itey ...
- mongoDB副本集+分片集群
首先搭建一个副本集(三台机器) 主,从,仲裁 然后搭建分片shard1,在每台机子上启用shard1(这里就写一个分片吧!!如果写多了怕初学者会混乱,先写一个.然后可以按照同样的方法写第二个,第三个) ...
- mongodb 副本集+分片集群搭建
数据分片节点#192.168.114.26mongod --shardsvr --replSet rsguo --port 2011 --dbpath=/data/mongodb/guo --logp ...
- Mongodb 副本集分片(一)---初始化mongodb安装启动
写在前面:mongodb是nosql非关系型数据库中,比较受欢迎的产品.在数据持久化及与关系型数据库的关联上也做的比较好,目前各大公司在存放二进制文件(图片.视频等)中应用也比较广泛.其遵循的key- ...
- C# 连接mongodb副本集+分片读写分离及学习资料
一.副本集配置 搭建完毕,1台主实例.1台从实例.1台仲裁实例.mongodb建议副本集中的机器数量为奇数,即至少需要3台实例 二.副本集连接字符串 1.读 mongodb://secondary.c ...
- Mongodb 副本集分片(二)---mongodb副本集部署脚本详解
分享下,最近做的一主一从一仲裁的示例,如有需要,大家可以扩展成一主两从一仲裁. 大家可以看到 我的集群名字沿用了默认的neunnm,如果是其他的话 大家注意修改. 需要辅助文件hosts.con ...
- 搭建mongodb集群(副本集+分片)
搭建mongodb集群(副本集+分片) 转载自:http://blog.csdn.net/bluejoe2000/article/details/41323051 完整的搭建mongodb集群(副本集 ...
- Mongodb主从复制/ 副本集/分片集群介绍
前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...
- Mongodb副本集+分片集群环境部署记录
前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...
随机推荐
- clam简单使用
clam简单使用: 0,首先,要全局安装Nodejs,不再赘述.clam依赖node使用 1,打开 cmd 2,全局安装clam:npm -g install clam 3,切换到目的盘下,新建一个空 ...
- 函数语法:JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度(转载)
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- Problem B: Battle Royale(简单几何)
题目链接: B - Battle Royale Gym - 102021B 题目大意:给你两个坐标,表示起点和终点,然后给你两个圆,第一个圆包含两个圆,然后问你起点到终点的最短距离(不经过第二个圆 ...
- Subsequence(序列自动机模板题)
题目链接:https://nanti.jisuanke.com/t/38232 题目大意:给你一个字符串,然后再给你m个字符串,然后问你在第一个字符串中不连续的子串能不能构成输入的子串. 具体思路:构 ...
- C# - 代码重构
隐藏更多 只暴露集合中供人使用的单一功能,将关于集合的更多功能隐藏掉. 旧版本 public class Animal{ private List<string> LanguageL ...
- 网络学习day02_OSI七层模型及数据的传输过程
title: 2018.9.2 OSI七层模型及数据的传输过程 tags: 计算机网络, OSI七层模型, 数据传输, 数据解封装 --- OSI七层模型和TCP/IP五层模型 OSI七层模型 我们说 ...
- Windows 快捷键总结
一.日常用法 1.Win + R 运行命令窗,cmd等必备,令人进入注册表,也需要通过运行命令窗,如注册表示运行 Regedit 命令,组策略使用 gpedit.msc 命令等. 2.Win + E ...
- 第三周 数据分析之概要 Pandas库入门
Pandas库介绍: Pandas库引用:Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于NumPy实现,常与NumPy和 ...
- OpenCV3编程入门读书笔记5-边缘检测
一.边缘检测的一般步骤 1.滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能. 2.增强 增强边缘的基础是确定图像各 ...
- TortoiseGit安装使用简单教程
一.简介 TortoiseGit是Tortoise基于git的可视化管理工具.本文即将介绍这个工具的安装和简单使用教程(本文均是基于Windows 64位操作系统). git的管理工具有很多.Tort ...