概述
Shard
一个分片包含一个分片集群的一个分片数据子集。集群的碎片一起保存集群的整个数据集。 从MongoDB 3.6开始,分片必须部署为副本集,以提供冗余和高可用性。 用户、客户端或应用程序只能直接连接到一个分片来执行本地管理和维护操作。 在单个分片上执行查询只返回数据的子集。连接到mongos执行集群级操作,包括读或写操作
Config Servers(metadata)
配置服务器存储分片集群的元数据。元数据反映了分片集群中所有数据和组件的状态和组织。元数据包括每个分片上的块列表和定义块的范围。
mongos实例缓存这些数据,并使用它将读写操作路由到正确的分片。mongos会在集群的元数据发生变化时更新缓存,比如Chunk splitting或者添加一个shard。分片还从配置服务器读取块元数据。
配置服务器还存储身份验证配置信息,例如基于角色的访问控制或集群的内部身份验证设置。
MongoDB还使用配置服务器来管理分布式锁。
每个分片集群必须有自己的配置服务器。不要对不同的分片集群使用相同的配置服务器。
Mongos(router)
MongoDB mongos实例将查询和写入操作路由到分片集群中的分片。从应用程序的角度来看,Mongos为分片集群提供了唯一的接口。应用程序从不直接与碎片连接或通信。
mongos通过缓存配置服务器的元数据来跟踪哪个分片上有哪些数据。mongos使用元数据将操作从应用程序和客户端路由到mongod实例。mongos没有持久状态,消耗的系统资源最少。
最常见的做法是在与应用程序服务器相同的系统上运行mongos实例,但也可以在碎片或其他专用资源上维护mongos实例。
一、架构
OS: Centos 7.4
Mongos:10.xxxxx.43:28017
Config Server Replica Set:10.xxxxx.43:28018,10.xxxxx.44:28018,10.xxxxx.48:28018
Shard Replica Sets:10.xxxxx.43:28021,10.xxxxx.44:28021,10.xxxxx.48:28021
二.部署准备
下载mongodb-linux-x86_64-rhel70-6.0.3.tgz
下载地址:https://www.mongodb.com/try/download/community
Shell工具mongosh-1.6.1-x64.msi
下载地址:https://www.mongodb.com/try/download/shell
2.1 所有节点新建主目录
注:目录结构可以自定义
/bd01/mongo
2.2所有节点新建Config Server目录
mkdir -p /bd01/mongo/csdata/{conf,log,data}
目录结构说明:
conf: 配置目录
log: 日志目录
data:数据目录
2.3 所有节点新建Shard 目录
mkdir -p /bd01/mongo/shdata/{conf,log,data}
目录结构说明如2.2
2.4 mongos节点新建mongos目录
/bd01/mongo/mongos/{conf,log}
2.5 上传部署包
将部署包上传至所有节点/bd01/mongo/ 目录下,并解压。
mongo运行包说明:
Config Server和Shard都需要通过 mongod运行
mongos(Router)通过 mongos运行
三、部署Shard集群
3.1 创建配置文件
在所有节点,创建配置文件/bd01/mongo/shdata/conf/mongodb.conf
systemLog: destination: file path: /bd01/mongo/shdata/logs/mongodb.log logAppend: true storage: journal: enabled: true dbPath: /bd01/mongo/shdata/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 0.0.0.0 port: 28021
processManagement: timeZoneInfo: /usr/share/zoneinfo
#security: # keyFile: /bd01/mongo/shdata/mongokeyfile.key # authorization: enabled
replication: oplogSizeMB: 2048 replSetName: sh1 sharding: clusterRole: shardsvr processManagement: fork: true
|
3.2 启动实例
进入/bd01/mongo目录
mongodb-linux-x86_64-rhel70-6.0.3/bin/mongod -f shdata/conf/mongodb.conf(所有节点都要执行)
启动成功后,会有如下提示
3.3初始化副本集
使用mongosh 连接任意一个shard节点(只需在一个节点上执行)
注:mongosh通过<部署准备>中mongosh-1.6.1-x64.msi安装,也可以安装linux版本
mongosh --host <hostname> --port
<port>
初始化
配置解读,相关参数与shard配置文件对应关系:
1._id: 对应的名字为:replSetName
2.Members数组中的id,可以按序定义
3.host: 对应config 的IP和端口
rs.initiate( { _id : "sh1", members: [ { _id : 0, host : "10.xxxx.43:28021" }, { _id : 1, host : "10.xxxx.44:28021" }, { _id : 2, host : "10.xxxx.48:28021" } ] } )
|
返回OK表示初始化成功
可以通过rs.config(),查看副本集状态
四、部署config集群
4.1 创建配置文件
在所有节点,创建配置文件/bd01/mongo/csdata/conf/mongodb.conf
systemLog: destination: file path: /bd01/mongo/csdata/log/mongocs.log logAppend: true storage: journal: enabled: true dbPath: /bd01/mongo/csdata/data directoryPerDB: true #engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true collectionConfig: blockCompressor: zlib indexConfig: prefixCompression: true net: bindIp: 0.0.0.0 port: 28018 replication: oplogSizeMB: 2048 replSetName: configReplSet sharding: clusterRole: configsvr processManagement: fork: true
|
4.2 启动实例
进入/bd01/mongo目录
mongodb-linux-x86_64-rhel70-6.0.3/bin/mongod -f csdata/conf/mongocs.conf(所有节点都要执行)
4.3初始化副本集
使用mongosh 连接任意一个config节点(只需在一个节点上执行)
mongosh --host <hostname> --port
<port>
初始化
配置解读,相关参数与config配置文件对应关系:
1._id: 对应的名字为:replSetName
2.Members数组中的id,可以按序定义
3.host: 对应config 的IP和端口
4.configsvr:对应clusterRole
rs.initiate( { _id: "configReplSet", configsvr: true, members: [ { _id : 0, host : "10.xxxx.43:28018" }, { _id : 1, host : "10.xxxx.44:28018" }, { _id : 2, host : "10.xxxx.48:28018" } ] } )
|
返回OK表示初始化成功
可以通过rs.config(),查看副本集状态
五、部署mongos
5.1 创建配置文件
/bd01/mongo/mongosdata/conf/mongos.conf
configReplSet:对应config配置中replSetName
systemLog: destination: file path: /bd01/mongo/mongosdata/logs/mongos.log logAppend: true net: bindIp: 0.0.0.0 port: 28017 sharding: configDB: configReplSet/10.67.90.43:28018,10.67.90.44:28018,10.67.90.48:28018 processManagement: fork: true |
5.2 启动实例
mongodb-linux-x86_64-rhel70-6.0.3/bin/mongos -f
mongosdata/conf/mongos.conf
5.3 添加shard集群
mongosh --host <hostname> --port
<port>
sh1:对应shard配置文件中的replSetName
sh.addShard("sh1/10.xxxx.43:28021,10.xxxx.44:28021,10.xxxx.48:28021")
通过sh.status()查看集群详情