mongoDB 集群模式记录

mongoDB 集群模式记录

官方手册

replica set(复制集)

  1. replica set 是一组存储了相同数据的 mongod 实例
  2. 包含数个数据节点和一个仲裁节点(可选,不超过1个)
  3. 数据节点其中有1个主节点、其他的为副节点
  4. 写请求全部走主节点;缺省情况下,读请求也走主节点,通过配置,可以使副节点接收读请求
  5. 仲裁节点不存储数据,其作用是主持选举
  6. 建议:一个 replica set 部署奇数个数据节点 或 偶数个数据节点+1个仲裁节点
  7. 一个 replica set 建议的最小部署单元是3个节点
  8. 一个 replica set 最多包含50个成员,最多包含7个有投票权的成员

sharded cluster(分片集群)

Sharding 提供了对数据进行分布式存储的办法。

一个 sharded Cluster 包括以下组件:

  1. shard:分片数据,每个 shard 都能以 replica set 的形式部署
  2. mongos:查询路由(客户端通过 mongos 访问集群)
  3. config servers:存储着元数据和集群的配置信息,必须以 replica set 的形式部署

集群安装

系统配置

  1. 关闭透明巨页,具体参考官网文档
  2. 修改 Max processes 设置,具体参考 soft rlimits too low.
  3. 按系统版本下载对应的 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 serverreplica 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

你可能感兴趣的:(mongoDB 集群模式记录)