【运维】shard-cluster模式

查询路由、配置服务器、分片 其中查询路由为mongos进程 配置服务器(默认端口27019)和分片(27018)都是mongod进程 配置服务器和分片都采取副本集(replica set)来确保可用性和健壮性,每个副本集最少包含三个节点。 查询路由都是单实例运行,没有副本集机制,可根据需要增加实例数量

所有mongod进程和mongos进程要使用同一个keyfile,保证认证可用

https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-hashed-sharding/index.html

1. 配置config server副本集

连接并初始化

2. 配置shard1副本集

同上配置shard2副本集,注意修改副本集名称和ip

3. 配置mongos router实例

连接到mongos

然后将上面创建的分片依次添加进来,添加分片,如果分片也是复制集仅需添加主服务器即可,执行:

操作完成后,可以查看分片集群状态,执行:

会发现每个分片除了添加的主节点外,从节点也自动加入了,后续分片副本集如果发生变化(增删节点)也会自动识别出来。

让数据库使用分片

为分片字段建立索引,片键(分片字段)必须是索引

指定分片集合和片键

4. 测试

插入了n条数据, 用图形化客户端连接,所有的数据都可以看到,和单实例似乎没有区别 登录到每个片区,查看数据分片情况

分片集群对于客户端应用来说是透明的,客户端应用只需将分片集群视为单个mongod实例,所有客户端请求都连接分片集群中的路由(mongos)。

应用只需将原有Mongo配置指向路由即可,如果想要使用多个路由,可以将多个路由地址用逗号连接,类似副本集的配置

5. 问题

  1. springboot怎么使用分片集群?自动使用分片数据库,创建索引,使用片键?

    网上没有找到相关资料,似乎要手动去维护了,要想使用分片集群,要预先设置好

1. 环境准备

提供配置文件conf/mongo.conf公共配置项

在其中任意一个节点上创建基础环境,并拷贝给其他节点

2. Create the Config Server Replica Set

添加额外配置项,如果有必要配置net.port,默认配置中心端口是27019

分别在config server的三个节点上执行,默认configsvr端口27019

连接config server任意一节点并初始化副本集,注意下面用到的_id是上面配置的副本集的name,ip是节点端口号

config-server不用配置管理员

3. Create the Shard Replica Sets

配置文件需要的额外配置项,shard默认端口27018,如果有必要配置net.port

在shard-1区上的三个节点上执行

初始化复制集

同理,重复上述3步骤,扩展shard数量。注意修改复制集名称和ip

4. users

通常,要为分片集群创建用户,请连接到 mongos并添加分片群集用户。

但是,某些维护操作需要直接连接到分片群集中的特定分片(the specific shard)。要执行这些操作,必须直接连接到分片并作为分片本地(Shard-local)管理用户进行身份验证。

Shard-local用户仅存在于the specific shard中,并且只应用于the specific shard的维护和配置。您无法连接到mongos分享本地用户。

为指定分片创建Shard-local管理用户,只在分片副本集的primary节点上创建用户。

创建用户root/123456给超级管理员的权限

可以在每个分片上都创建管理用户

5. Connect a mongos to the Sharded Cluster

mongos节点的额外配置项,端口默认27017,如果有需要自己定义net.port

启动mongos进程,删掉security.authorization, mongos进程不支持这个配置

通过 localhost interface连接mongos任意一个实例

注意,这里因为启动了认证,所以必须运行mongo和mongos进程在相同的物理机上,localhost interface接口可以使用,因为到目前位置还没有为这个部署集群创建任何user,如果第一个user被创建后,localhost interface也将关闭。

创建user administrator,注意第一个用户必须具有userAdminAnyDatabase权限,我这里也给了一个root权限

根据需要可以添加不同角色用户(可选)

例如,为指定的数据库创建指定的username/password管理员账户

添加分片到集群

下面所有的操作,必须连接到mongos并使用全局集群管理员(mongos上创建的管理员)用户进行身份验证。

This is the cluster administrator for the sharded cluster and not the shard-local cluster administrator.

指定副本集里面的任意一个节点就可以

如果添加的分片不是副本集只是一个单一节点,使用如下方式

重复执行知道添加所有的分片

=====================================================================

为数据库启用分片存储

给表(Collection)分片

hash分片和ranged分片

  • hash分片写数据快,数据均衡分布

  • ranged分片数据分布不均衡,查询很快,写数据慢

=====================================================================

添加mongos实例

使用已有的mongos实例的配置文件

启动进程,启动进程即可,不用作任何配置

一定要区分shard-local管理员和mongos管理员的账户认证

shard-local上创建的用户的指定片区的认证

mongos上创建的用户是全局集群的认证

Last updated

Was this helpful?