路由节点进行分片操作|学习笔记

简介: 快速学习路由节点进行分片操作

开发者学堂课程【MongoDB精讲课程(下)路由节点进行分片操作学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/727/detail/12986


路由节点进行分片操作

 

内容介绍:

一、 使用命令添加分片

1. 添加分片

2. 开启分片功能

3. 集合分片

 

一、 使用命令添加分片:

1.添加分片:

语法:

sh.addshard("IP:Port)

//把两个分片分别给他加进来,加进来的语法也比较简单,sh.addshard。你的IP包括你的段落号,分片可以是单机的,如果是单机的,直接把IP和段落号带进来。

image.png

//如果使用的是分片,需要使用这种语法,前面是分片的副本集名称。

第一个分片是 myshardrs01,后面跟上三个成员,三个成员分别的IP和段落号。因为加的时候副本集初始化的时候,第一个主节点实际上用的是局网的IP。

//新建一个窗口,连接第一套分片的副本集,第一套分片的副本集是27018,连接一下客户端,

将第一套分片副本集添加进来:

mongos>

sh.addshard("myshardrs01/192.168.0.2:27018.180.76.159.126:27118180.76.159.12627218)

{

"shardAdded":"myshardrs01"

"ok": 1,

"operationTime":Timestamp(15646119704)

SclusterTime":{

"clusterTimeT:Timestamp(1564611970,4)

"signature":{

"hash":BinData(O,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),“keyId":NumberLong(0)

}

}

}

"mincompatibleVersion":5,

"currentversion":6

"clusterid”:Objectid("5d4211b798f3f9a48522c68b)

}

shards:

{ "_id" :"myshardrs01", "host" :

"myshardrs01/180.76.159.126:27018.180.76.159.12627118""state":1}

active mongoses:

"4.0.10”:1

autosplit:

Currentlyenabled:yes

balancer:

Currently enabled: yes

Current1y running: no

Failed balancer rounds in 1ast 5 attempts:0

Migration Results for the 1ast 24hours:

No recent migrations

databases:

{ “_id":"config","primary" : "config","partitioned" : true }

//继续将第二套分片副本集添加进来,一样的语法,一样的 IP。段落号不同:27318.27418.27518

mongos>

sh.addshard("myshardrs02/192.168.0.2:27318180.76.15912627418180.76.159.12627518)

{

"shardAdded":"myshardrs02"

"ok":1,

"operationTime”:Timestamp(15646121475)

shards:

{ "_id" :"myshardrs01", "host" :

"myshardrs01/180.76.159.126:27018,180.76.15912627118","state":1 }

{ "_id" :"myshardrs02"."host" :

"myshardrs02/180.76.159.126:27318,180.76.159.126:27418", "state":1 }

active mongoses:

4.0.10":1

autosplit:

Currentlyenabled:yes

balancer:

Currently enabled: yes

Currently running:no

Failed balancer rounds in 1ast5attempts:0

Migration Results for the 1ast 24 hours:

No recent migrations

databases:

{ "_id" : "config",-"primary" : "config", "partitioned" : true }

提示:如果添加分片失败,需要先手动移除分片,检查添加分片的信息的正确性后,再次添加分片。

移除分片参考(了解):

use admin

db.runcommand({removeshard:"myshardrs02"}) 

注意:如果只剩下最后一个 shard,是无法删除的。移除时会自动转移分片数据,需要一个时间过程。完成后,再次执行删除分片命令才能真正删除。

2.开启分片功能:

//现在分片想要使用,要初始化,首先初始化库名,在调用 shshardCollection,开启分片,最终开启的是集合。要先让某一个库开启分片功能,调用的是enablesharding,后面跟上库名。

//例如,要分片的库是 articledb,要开启 articledb 的分片功能,开启之后,对它具体某一个集合进行分片。

shenableSharding ("库名")、shshardCollection ("库名集合名"{"key":1})

mongos 上的 articledb 数据库配置 sharding

mongos> sh.enablesharding("articledb) I

{

"ok": 1,

"operationTime":Timestamp(1564612296,5),

"SclusterTime":{

"clusterTime": Timestamp(1564612296,5),

"signature":{

"hash":BinData(0"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId":NumberLong(0)

}

}

}

查看分片状态:

mongos> sh.status()

---sharding Status--- sharding version: {

"_id": 1,

"mincompatibleversion”:5.

"currentversion":6.

"clusterid":objectid("5d4211b798f3f9a48522p68b")

}

shards:

{ "_id":"myshardrs01","host":

"myshardrs01/180.76.159.126:27018,180.76.159.126:27118","state":1 }

{ "id":"myshardrs02", "host":

myshardrs02/180.76.159.126:27318180.76.159.12627418", “state": 1 }

active mongoses:

"4.0.10":1

autosplit:

Currentlyenabled:yes

balancer:

Currently enabled: yes

Currentlyrunning: no

Failed balancer rounds in ast5attempts:0

Migration Results for the 1ast 24 hours:

No recent migrations

databases:

{ "_id":"articledb","primary" :"myshardrs02", "partitioned": true,

"version":{ "uuid":UUID("788c9a3b-bb6a-4cc2-a597-974694772986"),"7astMod":1}}

{ “_id":"config", "primary" :"config","partitioned": true }

config.system.sessions

shard key:{ "_id":1 }

unique:false

balancing: true

chunks:

myshardrs01

{"id":{ "$minkey":1}->> {"_id":{"Smaxkey" :1 }}

on :myshardrs01 Timestamp(10)

3.集合分片

对集合分片,你必须使用 shshardCollection() 方法指定集合和分片键。

语法:

sh.shardcollection(namespacekeyunique)

参数:

Parameter

Type

Description

namespace

string

(分片)共享的目标集合的命名空间,格式:<database><co1lection>

key

document

用作分片键的索引规范文档。shard 键决定 MongoDB 如何在 shard 之间分发文档。除非集合为空,否则索引必须在shardcollection命令之前存在。如果集合为空,则 MongoDB 在对集合进行分片之前创建索引,前提是支持分片键 的索引不存在。简单的说:由包含字段和该字段的索引遍历方向的文档组成。

unique

boolean

当值为true情况下,片键字段上会限制为确保是唯一索引。哈希策略片键不支持唯一索引。默认是false。

对集合进行分片时,你需要选择一个片键(ShardKey)shardkey是每条记录都必须包含的,且建立了索引的单个字段或复合字段,MongoDB按照片键将数据划分到不同的数据块中,并将数据块均衡地分布到所有分片中为了按照片键划分数据块MongoDB使用基于哈希的分片方式(随机平均分配)或者基于范围的分片方式(数值大小分配)。

用什么字段当片键都可以,如:nickname作为片键,但一定是必填字段。

//第一个参数 namespace 是命名空间,命名空间是分片的数据,数据库.和集合就是命名空间,代表要对哪个库的哪个集合进行分片。第二个Key是索引规则,就是片键(ShardKey),片键的意思就是根据某一个字段或者某一个复合字段来分片。分片有一定的规则,根据字段。第三个参数 unique 不常用,为了提升性能。

//主要看前两个字段。一个是 namespacenamespace 是数据库.集合。一个是 key,片键就是前面你的字段,你要用哪个字段进行分片。

分片规则一:哈希策略

对于基于哈希的分片,MongoDB 计算一个字段的哈希值,并用这个哈希值来创建数据块.

在使用基于哈希分片的系统中拥有相近片键的文档很可能不会存储在同一个数据块中,因此数据的分离性更好一些.

使用 nickname 作为片键,根据其值的哈希值进行数据分片

mongos> sh.shardco1lection("articledb.comment",{"nickname":"hashed"})

{

"collectionsharded":"articledb.comment",

"co1lectionUUID”:UUID(“ddea6ed8-ee61-4693-bd16-196acc3a45e8")

"ok":1,

"operationTime":Timestamp(1564612840,28)

"SclusterTime":{

"clusterTime":Timestamp(1564612840,28),

"signature":{

"hash":BinData(O."AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId":NumberLong(0)

}

}

}

//哈希规则相对来说应用的较多,如果要用 shardco1lection 这个语法,首先命名空间是 articledb,集合是 comment

comment 这个集合进行分片,分片规则是通过 nickname这个字段,nickname 字段的策略是哈希规则。

哈希规则就是通过计算这个字段时要存储的 nickname 值的一些哈希,通过哈希值进行分片。

相关文章
|
Ubuntu Docker 容器
Ubuntu 挂载新磁盘
Ubuntu 挂载新磁盘
1041 0
|
存储 SQL 人工智能
新年将至,为大家推荐一款开源AI红包封面制作神器AiCover!
新年将至,为大家推荐一款开源AI红包封面制作神器AiCover!
425 2
|
Java 开发工具 Android开发
【 uniapp 】打包Android的apk(原生APP-云打包),及发布测试
【 uniapp 】打包Android的apk(原生APP-云打包),及发布测试
【 uniapp 】打包Android的apk(原生APP-云打包),及发布测试
|
小程序
小程序页面顶部标题栏、导航栏navigationBar如何隐藏、变透明?
小程序页面顶部标题栏、导航栏navigationBar如何隐藏、变透明?
|
10月前
|
弹性计算 人工智能 应用服务中间件
一键部署开源DeepSeek并集成到企业微信
DeepSeek近期发布了两款先进AI模型V3和R1,分别适用于通用应用和推理任务。由于官方API流量过大,建议通过阿里云的计算巢进行私有化部署,以确保稳定使用。用户无需编写代码即可完成部署,并可通过AppFlow轻松集成到钉钉、企业微信等渠道。具体步骤包括选择适合的机器资源、配置安全组、创建企业微信应用及连接流,最后完成API接收消息配置和测试应用。整个过程简单快捷,帮助用户快速搭建专属AI服务。
1891 7
一键部署开源DeepSeek并集成到企业微信
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
5112 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
机器学习/深度学习 算法 数据可视化
统计建模——模型——python为例
统计建模——模型——python为例
872 0
|
分布式计算 DataWorks 安全
DataWorks产品使用合集之如何使用GROUP_CONCAT方法
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
idea没有Maven运行界面怎么办
idea没有Maven运行界面怎么办
|
人工智能 开发者
Kimi Chat:国内AI新星,20万字超长文本处理的突破者
【2月更文挑战第12天】Kimi Chat:国内AI新星,20万字超长文本处理的突破者
3312 2
Kimi Chat:国内AI新星,20万字超长文本处理的突破者