mongoDB 集群模式记录
replica set
(复制集)
-
replica set
是一组存储了相同数据的 mongod 实例 - 包含数个数据节点和一个仲裁节点(可选,不超过1个)
- 数据节点其中有1个主节点、其他的为副节点
- 写请求全部走主节点;缺省情况下,读请求也走主节点,通过配置,可以使副节点接收读请求
- 仲裁节点不存储数据,其作用是主持选举
- 建议:一个
replica set
部署奇数个数据节点 或 偶数个数据节点+1个仲裁节点 - 一个
replica set
建议的最小部署单元是3个节点 - 一个
replica set
最多包含50个成员,最多包含7个有投票权的成员
sharded cluster
(分片集群)
Sharding 提供了对数据进行分布式存储的办法。
一个 sharded Cluster
包括以下组件:
-
shard
:分片数据,每个shard
都能以replica set
的形式部署 -
mongos
:查询路由(客户端通过 mongos 访问集群) -
config servers
:存储着元数据和集群的配置信息,必须以replica set
的形式部署
集群安装
系统配置
- 关闭透明巨页,具体参考官网文档
- 修改
Max processes
设置,具体参考 soft rlimits too low. - 按系统版本下载对应的 mongo 发布包
部署步骤
部署 config server
config server
必须以 replica set
的形式部署。
此处测试用,在 host1
上部署三个 config server
实例,分别监听 27017,27018,27019 端口。
启动三个实例后,执行 mongo 连上任意一个:
在 mongo shell 里执行:
rs.initiate(
{
_id : "configset",
members: [
{ _id : 0, host : "host1:27017" },
{ _id : 1, host : "host1:27018" },
{ _id : 2, host : "host1:27019" }
]
}
)
这里的 _id 为 config server
的 replica set
的名称。
成功返回后执行
rs.status()
可以观察 replica set
的状态,一主二从说明选主成功。
创建 Shard Replica Sets
在 host1、host2、host3 上部署一个 replica set
(1上一个仲裁节点、2上一个数据节点,3上一个数据节点)
执行 mongo 连上任意一个:
在 mongo shell 里执行:
rs.initiate(
{
_id : "shard1",
members: [
{ _id : 0, host : "host2:27017" },
{ _id : 1, host : "host3:27017" },
{ _id : 2, host : "host1:27020", arbiterOnly : true }
]
}
)
之后可以执行 rs.status()
观察 replica set
的状态,一主一从一仲裁说明选主成功。
部署 mongos
在 host4 上部署4个 mongos 实例,分别监听 27017,27018,27019,27020 端口。
执行 mongo 连上任意一个:
sh.addShard( "shard1/host2:27017")
sh.addShard( "shard1/host3:27017")
sh.addShard( "shard1/host1:27020")
客户端连接 mongo 集群
按前述结构部署集群时,客户端只需连接 mongos,无需关心后部的详情。
构建的 mongoConnectionString 如下:
mongodb://host4:27017,host4:27018,host4:27019,host4:27020/dbname
如需开启读写分离,设置 readPreference
参数即可, 如下:
mongodb://host4:27017,host4:27018,host4:27019,host4:27020/dbname?readPreference=secondaryPreferred
监控工具
Ops Manager
- 官方出品,企业版自带,社区版自行下载
- 监控功能免费,其余需要付费
Nosql client
- 用法类似(Ops Manager),配置更简单
附录
1. 配置服务器 配置参考
sharding:
clusterRole: configsvr
replication:
replSetName: configset
systemLog:
destination: file
path: "/path/to/log/mongod.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongo.pid"
net:
port: 27017
storage:
dbPath: "/path/to/data/"
2. 分片数据节点 配置参考
sharding:
clusterRole: shardsvr
replication:
replSetName: shardset1
systemLog:
destination: file
path: "/path/to/log/mongod.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongo.pid"
net:
port: 27017
storage:
dbPath: "/path/to/log/data/"
3. 分片仲裁节点 配置参考
sharding:
clusterRole: shardsvr
replication:
replSetName: shard1
systemLog:
destination: file
path: "/path/to/log/mongod.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongo.pid"
net:
port: 27017
storage:
dbPath: "/path/to/data/"
journal:
enabled: false
4. 查询路由 配置参考
sharding:
configDB: "configset/host1:27017,host1:27018,host1:27019"
systemLog:
destination: file
path: "/path/to/log/mongos.log"
logAppend: true
processManagement:
fork: true
pidFilePath: "/path/to/mongos.pid"
net:
port: 27017