MongoDB分片部署(windows)

ops/2024/9/24 8:13:42/

OS:win10

MongoDB:4.4.24

分片架构

从图中可以看出,分片集群中主要由三个部分组成,即分片服务器( Shard )、路由服务器
Mongos )以及配置服务器( Config Server )组成。其中,分片服务器有三个,即 Shard1
Shard2 Shard3 ;路由服务器有两个,即 Mongos1 Mongos2 ;配置服务器有三个,即主、副、副。
主要有如下所述三个主要组件:
Shard: 用于存储实际的数据块,实际生产环境中一个shard server 角色可由几台机器组个一个 replica set 承担,防止主机单点故障
Config Server: mongod实例,存储了整个 ClusterMetadata ,其中包括 chunk 信息。
Query Routers: 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

部署分片集群

部署shard

步骤一:环境准备

分片节点(实例)端口路径
1shard11(主)4006

dbpath:D:\shard1\shard11\data

logpath:D:\shard1\shard11\log

shard12(从)4007

dbpath:D:\shard1\shard12\data

logpath:D:\shard1\shard12\log

2shard21(主)4008

dbpath:D:\shard2\shard21\data

logpath:D:\shard2\shard21\log

shard22(从)4009

dbpath:D:\shard2\shard22\data

logpath:D:\shard2\shard22\log

每一个分片都应该安装 MongoDB 实例,需要将 bin 文件复制到每个分片中, 并且创建data 文件以及 log 文件存放数据库数据和日志数据

步骤二 启动分片服务(实例)

启动分片集群1(shard11和shard12)

shard11

然后进入数据库bin目录中,启动cmd

\bin>mongod --shardsvr --replSet shard1 -port 4006 -dbpath D:\shard1\shard11\data -logpath D:\shard1\shard11\log\shard11.log
--shardsvr 为分片声明
当命令一直保持运行状态则说明服务运行成功,此服务为一次性服务,不要关闭此窗口,最小化即可。
shard12:

再次进入数据库bin目录中,启动cmd

bin>mongod --shardsvr --replSet shard1 -port 4007 -dbpath D:\shard1\shard12\data -logpath D:\shard1\shard12\log\shard12.log

启动分片集群2(shard21和shard22)

shard21

\bin>mongod --shardsvr --replSet shard2 -port 4008 -dbpath D:\shard2\shard21\data -logpath D:\shard2\shard21\log\shard21.log

shard22

\bin>mongod --shardsvr --replSet shard2 -port 4009 -dbpath D:\shard2\shard22\data -logpath D:\shard2\shard22\log\shard22.log

tips:

电脑版本比较高,所以的 cmd 需要使用管理员身份运行
启动服务均为一次性服务,关闭 cmd 即为关闭服务,所以在未完成前,请勿关闭
实例均未添加至系统环境变量,请在 bin 目录下启动
虽然窗口很多,操作不太友好,但是在 win 系统下,还是多有耐心一点, linux会简单一些

步骤三:配置分片(shard)集群

进入到shard1集群任何一个节点中

use adminconfig={_id:"shard1",members:[
... {_id:0,host:"localhost:4006",priority:2},
... {_id:1,host:"localhost:4007",priority:1}
... ]}rs.initate(config)

进入到shard2集群任何一个节点中

use adminconfig={_id:"shard2",members:[
... {_id:0,host:"localhost:4008",priority:2},
... {_id:1,host:"localhost:4009",priority:1}
... ]}rs.initate(config)

至此,shard集群配置好了。

部署config server

步骤一:环境准备

值得注意的是:在 MongoDB 3 版本后 config 服务必须配置为从 副本集 ,所以直接用前面设置好了的副 本启动即可
config实例端口数据路径日志路径
config1(主)4002D:\config\config1\dataD:\config\config1\log
config2(从)4003D:\config\config2\dataD:\config\config2\log

老样子,每个文件夹添加datalog

步骤二:启动config server

启动config1

进入到bin目录中,启动cmd

\bin>mongod --configsvr --replSet confset -port 4002 -dbpath D:\config\config1\data -logpath D:\config\config1\log\conf1.log
--configsvr 这里我们完全可以像启动普通 mongodb 服务一样启动,不需要添加 —shardsvr configsvr 参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以。

启动config2

\bin>mongod --configsvr --replSet confset -port 4003 -dbpath D:\config\config2\data -logpath D:\config\config2\log\conf2.log

不要关闭 cmd 窗口,最小化即可 ]

步骤三:配置config server集群

进入任何一个配置服务器的节点初始化配置服务器的群集

 use adminconfig={_id:"confset",configsvr:true,members:[
... {_id:0,host:"localhost:4002"},
... {_id:1,host:"localhost:4003"}
... ]}rs.initiate(config)

部署路由服务器 Route Process

可以创建专门的文件夹存放日志

在进入 数据库 bin 目录中 启动 cmd


D:\MongoDB\bin>mongos --configdb confset/localhost:4002,localhost:4003 -logpath D:\mongos\log\mongos.log -port 4000
mongos mongos 就是一个路由服务器,它会根据管理员设置的 片键 将数据分摊到自己管理的
mongod 集群,数据和片的对应关系以及相应的配置信息保存在 "config 服务器 " 上。

配置分片信息

bin 目录下使用 MongoDB Shell 登录到 mongos ,添加 Shard 节点

mongos> sh.addShard("shard1/localhost:4006,localhost:4007")

mongos> sh.addShard("shard2/localhost:4008,localhost:4009")

测试分片

登入路由(4000) 端口
指定要分片的数据库
mongos> sh.enableSharding("test")
指定数据库里需要分片的集合和片键,片键根据实际情况选择
mongos> sh.shardCollection("test.c2",{"id":"hashed"})

上述指令指定分片集合为c2,分片字段为“id”,分片形式是哈希分片,若改成“1”则为范围分片

如果集合已经包含数据,则必须在分片集合之前创建一个支持分片键的索引,如果集合为空,则
mongodb 将创建索引。

插入数据验证

mongos> for(var i=1;i<=10000;i++){
... db.c2.save({id:i,name:"a"+i});}

robo 3T查看分片集

连接两个 shard 端口查看分片情况,若两个片段不同,则说明分片成功!!


http://www.ppmy.cn/ops/12441.html

相关文章

ES6的Set与Map

在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象&#xff0c;而在ES6中新增了另外两种数据结构&#xff1a;Set、Map。 一、什么是Set&#xff1f; Set是ES6新增的数据结构&#xff0c;类似数组&#xff0c;但是它的元素成员是唯一的。 Set的使用&am…

.NET StackExchange.Redis 操作redis

下面是一个简单的示例&#xff0c;展示了如何使用 C# 中的 StackExchange.Redis 库与 Redis 进行交互&#xff0c;包括字符串&#xff08;String&#xff09;、哈希&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;和有序集合…

数据结构--排序

排序&#xff1a;就是重新排列表中的数据 排序算法&#xff1a;分两种 内部排序和外部排序 内部排序&#xff1a;排序期间元素全部存放在内存中的排序&#xff0c; 外部排序&#xff1a;排序期间元素无法同时存放在内存中&#xff0c;必须在排序的过程中根据要求不断地在内、…

Linux——界面和用户

本篇文章所写的都是基于centos 7 64位&#xff08;通过虚拟机运行&#xff09;。 一、Linux的界面 Linux操作系统提供了多种用户界面&#xff0c;主要分为图形用户界面&#xff08;GUI&#xff09;和命令行界面&#xff08;CLI&#xff09;。 1、图形用户界面(GUI)&#xff…

陈文自媒体:快手影视100万播放量,涨粉2万+

干过抖音快手的老铁都知道&#xff0c;这些平台竟然出现100万以上&#xff0c;1000万&#xff0c;甚至一个亿的作品&#xff0c;但是这玩意有前提&#xff0c;那就是你的号要做的足够久&#xff0c;运营能力要足够强&#xff0c;内容要足够优秀。 昨天我稍微看了一下工作室的前…

HTTPS和HTTP有什么区别,如何启用HTTPS

HTTP和HTTPS是两个非常重要的概念。它们分别代表了“超文本传输协议”和“安全超文本传输协议”。虽然它们的名字非常相似&#xff0c;但它们之间却存在着一些关键性的区别。本文将详细解析这两种协议的不同之处&#xff0c;并介绍如何申请HTTPS。 HTTP详解 HTTP是一种用于分…

计算机网络——应用层协议(1)

在这篇文章初识网络中&#xff0c;我介绍了关于计算机网络的相关知识&#xff0c;以及在这两篇文章中Socket编程和Socket编程——tcp&#xff0c;介绍了使用套接字在两种协议下的网络间通信方式。本篇文章中我将会进一步介绍网络中网络协议的部分&#xff0c;而这将会从应用层开…

【OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…