【运维】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. 问题
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?