MongoDB分片集群搭建

----前言

mongodb分片

一般用得比较少,需要较多的服务器,还有三种的角色

一般把mongodb的副本集应用得好就足够用了,可搭建多套mongodb复本集

mongodb分片技术

mongodb副本集可以解决数据备份、读性能的问题,但由于mongodb副本集是每份数据都一模一样的,无法解决数据量过大问题

mongodb分片技术能够把数据分成两份存储,假如shijiange.myuser里面有1亿条数据,分片能够实现5千万左右存储在data1,5千万左右存储在data2

data1、data2需要使用副本集的形式,预防数据丢失

mongodb分片集群三种角色介绍

router角色        #mongodb的路由,提供入口,使得分片集群对外透明。router不存储数据

configsvr角色        #mongodb的配置角色,存储元数据信息。分片集群后端有多份存储,读取数据该去哪个存储上读取,依赖于配置角色。配置角色建议使用副本集

shardsvr角色        #mongodb的存储角色,存储真正的数据,建议使用副本集

依赖关系

当用户通过router角色插入数据时,需要从configsvr知道这份数据插入到哪个节点,然后执行插入动作插入数据到sharedsvr

当用户通过router角色获取数据时,需要从configsvr知道这份数据是存储在哪个节点,然后再去sharedsvr获取数据

mongodb分片集群的搭建说明

使用同一份mongodb二进制文件

修改对应的配置就能实现分片集群的搭建

--第一步,分片集群搭建-configsvr

mongodb分片集群实战环境搭建说明

configsvr        #使用28017,28018,28019三个端口来搭建

router                    #使用27017,27018,27019三个端口来搭建

shardsvr        #使用29017,29018,29019,29020四个端口来搭建,两个端口一个集群,生产环境肯定是要三个端口

资源有限,就三台服务器,我的分配情况是

mongodb配置角色的搭建,配置文件路径/data/mongodb-fenpiancluster/28017,另外两节点改下路径、端口、IP

systemLog:

  destination: file

  logAppend: true

  path: /data/mongodb-fenpiancluster/28017/mongodb.log

storage:

  dbPath: /data/mongodb-fenpiancluster/28017

  journal:

    enabled: true

processManagement:

  fork: true

net:

  port: 28017

  bindIp: 127.0.0.1,192.167.100.181

replication:

  replSetName: zmhconf

sharding:

  clusterRole: configsvr

mongodb配置服务集群的启动跟单例的启动方式一致,都是使用mongod

分片集群的配置角色副本集搭建

config = { _id:"zmhconf",

  configsvr: true,

  members:[

    {_id:0,host:"192.167.100.181:28017"},

    {_id:1,host:"192.167.100.182:28018"},

    {_id:2,host:"192.167.100.183:28019"}

  ]

}

rs.initiate(config)

验证是否搭建成功

/usr/local/mongodb/bin/mongo 192.167.100.181:28017

rs.status()

--第二步,分片集群搭建-router

router说明

mongodb中的router角色只负责提供一个入口,不存储任何的数据

router角色的搭建,配置文件/data/mongodb-fenpiancluster/27017/mongodb.conf

systemLog:

  destination: file

  logAppend: true

  path: /data/mongodb-fenpiancluster/27017/mongodb.log

processManagement:

  fork: true

net:

  port: 27017

  bindIp: 192.167.100.181

sharding:

  configDB: zmhconf/192.167.100.181:28017,192.167.100.182:28018,192.167.100.183:28019

router最重要的配置

指定configsvr的地址,使用副本集id+ip端口的方式指定

配置多个router,任何一个都能正常的获取数据

router的启动

     /usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27017/mongodb.conf

/usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27018/mongodb.conf

/usr/local/mongodb/bin/mongos -f /data/mongodb-fenpiancluster/27019/mongodb.conf

router的验证

需要等到数据角色搭建完才能够进行验证

--第三步,分片集群搭建-sharedsvr

数据角色

分片集群的数据角色里面存储着真正的数据,所以数据角色一定得使用副本集

多个数据角色

mongodb的数据角色搭建,配置文件/data/mongodb-fenpiancluster/29017/mongodb.conf,另外三台也这么写,由于资源不足,把zmhdata2的副本集都放在了192.167.100.183上。

systemLog:

  destination: file

  logAppend: true

  path: /data/mongodb-fenpiancluster/29017/mongodb.log

storage:

  dbPath: /data/mongodb-fenpiancluster/29017

  journal:

    enabled: true

processManagement:

  fork: true

net:

  port: 29017

  bindIp: 192.167.100.181

replication:

  replSetName: zmhdata1

sharding:

  clusterRole: shardsvr

systemLog:

  destination: file

  logAppend: true

  path: /data/mongodb-fenpiancluster/29019/mongodb.log

storage:

  dbPath: /data/mongodb-fenpiancluster/29019

  journal:

    enabled: true

processManagement:

  fork: true

net:

  port: 29019

  bindIp: 192.167.100.183

replication:

  replSetName: zmhdata2

sharding:

  clusterRole: shardsvr

数据服务两个集群说明

29017、29018数据角色zmhdata1

29019、29020数据角色zmhdata2

在各自节点分别启动四个数据实例

/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29017/mongodb.log

/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29018/mongodb.log

/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29019/mongodb.log

/usr/local/mongodb/bin/mongod -f /data/mongodb-fenpiancluster/29020/mongodb.log

在各自副本集的节点上写入节点信息(任意找一个副本集内的节点操作):

数据角色zmhdata1

config = { _id:"zmhdata1",

  members:[

    {_id:0,host:"192.167.100.181:29017"},

    {_id:1,host:"192.167.100.182:29018"}

  ]

}

rs.initiate(config)

数据角色zmhdata2

config = { _id:"zmhdata2",

  members:[

    {_id:0,host:"192.167.100.183:29019"},

    {_id:1,host:"192.167.100.183:29020"}

  ]

}

rs.initiate(config)

--第四步,分片集群添加数据节点

分片集群添加数据角色,连接到路由角色里面配置,数据角色为副本集的方式

/usr/local/mongodb/bin/mongo 192.167.100.181:27017         

sh.addShard("zmhdata1/192.167.100.181:29017,192.167.100.182:29018")

sh.addShard("zmhdata2/192.167.100.183:29019,192.167.100.183:29020")

sh.status()

默认添加数据没有分片存储,操作都是在路由角色里面

use shijiange

for(i=1; i<=500;i++){

  db.myuser.insert( {name:'mytest'+i, age:i} )

}

db.dropDatabase()        #验证完后删除

经验证发现,新建的数据会随机分配到一个分片中,而不会均分到所有分片。

针对某个数据库的某个表使用hash分片存储,分片存储就会同一个colloection分配两个数据角色(MongoDB的分片是基于集合的,就算有分片集群不等于数据会自动分片,需要实现分片表首先需要启用数据库分片

use admin

db.runCommand( { enablesharding :"shijiange"});

db.runCommand( { shardcollection : "shijiange.myuser",key : {_id: "hashed"} } )

或者也可以这样的语句来启用分片:

 mongos> sh.enableSharding("shijiange")

 mongos> sh.shardCollection("shijiange.myuser",{_id: "hashed"});

插入数据校验,分布在两个数据角色上

use shijiange

for(i=1; i<=500;i++){

  db.myuser.insert( {name:'mytest'+i, age:i} )

}

配置角色如果挂掉一台会不会有影响

验证mongos多个入口是否能够正常使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178038.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成本2元开发游戏,最快3分钟完成!全程都是AI智能体“打工”,大模型加持的那种

金磊 发自 凹非寺 量子位 | 公众号 QbitAI 家人们&#xff0c;OpenAI前脚刚发布自定义GPT&#xff0c;让人人都能搞开发&#xff1b;后脚国内一家大模型初创公司也搞了个产品&#xff0c;堪称重新定义开发——让AI智能体们协作起来&#xff01; 只需一句话&#xff0c;最快3分…

算法萌新闯力扣:找出字符串中第一个匹配项点下标

力扣热题&#xff1a;找出字符串中第一个匹配项点下标 开篇 这道题个人感觉非常不错&#xff0c;虽然是简单题&#xff0c;但可以巩固几个大家平时容易忘记的有关字符串的知识点&#xff0c;我在做题时也掉进去了。 题目链接&#xff1a;28.找出字符串中第一个匹配项点下标 …

Shopee可以绑定大陆银行卡吗?Shopee收款方式选哪种?——站斧浏览器

shopee可以绑定大陆银行卡吗&#xff1f; 对于中国大陆的卖家而言&#xff0c;他们希望能够在Shopee上绑定自己的大陆银行卡&#xff0c;方便进行交易和收款。然而&#xff0c;目前的情况是Shopee并不支持直接绑定大陆银行卡。这主要是因为Shopee在中国大陆并不是主要运营的电…

Linux 读写权限的配置

文章目录 Linux文件权限详解 一、文件权限二、修改文件访问权限的方法三、UMASK值四、三种特殊权限suid、sgid、sticky&#xff08;sticky权限工作环境中相对常用&#xff09;五、ACL访问控制列表六、文件权限操作的常用命令 Linux文件权限详解 Linux系统中不仅是对用户与组根…

ssm823基于ssm的心理预约咨询管理系统的设计与实现+vue

ssm823基于ssm的心理预约咨询管理系统的设计与实现vue 交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

黑马程序员微服务 第五天课程 分布式搜索引擎2

分布式搜索引擎02 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用DSL和Res…

Postman+Newman+Jenkins实现接口测试持续集成

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 1.新建一个项目 2.设置自定义工作空间 3.执行windows的批处理命令 4.执行系统的Groovy脚本 5.生成的HTML的报告集成到Jenkin…

测试用例的书写方式以及测试模板大全

一个优秀的测试用例&#xff0c;应该包含以下信息&#xff1a; 1 &#xff09; 软件或项目的名称 2 &#xff09; 软件或项目的版本&#xff08;内部版本号&#xff09; 3 &#xff09; 功能模块名 4 &#xff09; 测试用例的简单描述&#xff0c;即该用例执行的目的或方法…

为忙碌的软件工程师精心准备的编码面试准备材料,超过 100,000 人受益!

这是一个针对技术面试准备的手册。它收集了大量的面试问题和答案&#xff0c;涵盖了算法、系统设计、前端等主题&#xff0c;并且还在不断更新和完善中。 这个项目是“Tech Interview Handbook”&#xff0c;解决了求职者在技术面试中遇到的各种难题&#xff0c;帮助他们更好地…

【git】远程远程仓库命令操作详解

这篇文章主要是针对git的命令行操作进行讲解&#xff0c;工具操作的基础也是命令行&#xff0c;如果基本命令操作都不理解&#xff0c;就算是会工具操作&#xff0c;真正遇到问题还是一脸懵逼 如果需要查看本地仓库的详细操作可以看我上篇文件 【git】git本地仓库命令操作详解…

Axure9 基本操作(二)

1. 文本框、文本域 文本框&#xff1a;快速实现提示文字与不同类型文字显示的效果。 2. 下拉列表、列表框 下拉列表&#xff1a;快速实现下拉框及默认显示项的效果。 3. 复选框、单选按钮 4.

springboot单体项目部署

配置类 检查跨域配置类 检查黑白名单是否有问题&#xff0c;是否需要更改 配置文件 检查端口 查看端口是否为需要搭建的端口 检查数据源 查看数据库是否为线上数据库 配置页面 注意&#xff1a;如果是单体项目的话&#xff0c;前端页面是和后端整合在一起的&#xff0…