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

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 快速学习路由节点进行分片操作

开发者学堂课程【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 值的一些哈希,通过哈希值进行分片。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
4月前
|
存储 安全 关系型数据库
PolarDB行列存节点的路由不是通过proxy路由的 是节点内部的路由吗?
PolarDB行列存节点的路由不是通过proxy路由的 是节点内部的路由吗?
19 0
|
5月前
|
NoSQL Cloud Native MongoDB
分片集群中的分片集合
分片集群中的分片集合
|
5月前
|
存储 NoSQL Redis
redis集群查询集群中的值
redis集群查询集群中的值
|
6月前
|
数据处理 数据库
08MyCat - 概念 - 分片节点、分片规则、全局序列号
08MyCat - 概念 - 分片节点、分片规则、全局序列号
22 0
|
6月前
|
算法
29MyCat - 分片规则(固定分片hash算法)
29MyCat - 分片规则(固定分片hash算法)
22 0
|
6月前
38MyCat - 分片规则(自然月分片)
38MyCat - 分片规则(自然月分片)
23 0
|
6月前
28MyCat - 分片规则(分片枚举)
28MyCat - 分片规则(分片枚举)
15 0
|
6月前
36MyCat - 分片规则(一致性hash)
36MyCat - 分片规则(一致性hash)
25 0
|
NoSQL MongoDB 开发者
再增加一个路由节点|学习笔记
快速学习再增加一个路由节点
79 0
|
存储 算法 中间件
MyCat - 分片 - 分片规则 - 固定分片 hash 算法 | 学习笔记
快速学习 MyCat - 分片 - 分片规则 - 固定分片 hash 算法
198 0
MyCat - 分片 - 分片规则 - 固定分片 hash 算法 | 学习笔记