咱们先看一下mongodb cluster 生产上集群架构,以下图前端
Mongos:mongos的实例,客户端直接链接mongos,由mongos把读写请求路由到指定的Shard上去。一个Sharding集群,能够有一个mongos,也能够有多mongos以减轻客户端请求的压力。node
config server:保存集群的元数据(metadata),包含各个Shard的路由规则。git
Shard:数据节点,能够是单个实例,或者Replica setgithub
Replica Set:副本集,在生产环境下Shard是一个Replica Set,以防止该数据片的单点故障。mongodb
自动部署的难点:架构
自动副本配置ssh
基本思路以下:component
前提:Replica Set 只包含三个节点,一主两备server
将节点连成一个环,每一个节点启动3个mongodb数据服务,分片M 包含的服务为沿节点M开始寻找三个节点,端口号顺序加1,这三个服务就是分片M包含的服务。xml
如上图所示,3个节点,副本集以下:
Shard0:node0:port1,node1:port2,node2:port3
Shard1:node1:port1,node2:port2,node0:port3
Shard2:node2:port1,node0:port2,node1:port3
N个节点(N>=3,M为某个分片,M<N),副本集以下:
ShardM:nodeM:port1,node(M+1)%N:port2, node(M+2)%N:port3
如何扩容
3个节点,分片以下
Shard0:node0:port1,node1:port2,node2:port3
Shard1:node1:port1,node2:port2,node0:port3
Shard2:node2:port1,node0:port2,node1:port3
新增节点node3,分片以下
Shard0:node0:port1,node1:port2,node2:port3
Shard1:node1:port1,node2:port2,node0:port3
Shard2:node2:port1,node3:port2,node0:port3
shard3:node3:port1,node0:port2,node2:port3
经过对比,咱们能够发现
在原有分片上只有node0:port3,node3:port2,node0:port3发生变化,无论你新增多少节点,变化的只有这三个
如今扩容的方式,当前M个节点,保证shardM下,nodeM:port1数据可靠,对分片进行rs.reconfig
代码结构
metainfo.xml |_ configuration |_mongodb.xml |_ package |_scripts Mongo_base.py Mongo_db.py Mongo_config.py Mongos.py Mongo_client.py params.py |_templates Mongod_db.conf.j2 Mongod_config.conf.j2
Metainfo.xml 定义stack 安装的是mongodb,须要安装的component是什么
Mongo_base.py mongodb安装,配置文件生成
Mongo_db.py mongdb数据服务管理,并完成分片命名,副本选择,进行rs.initialte
Mongo_config.py config服务管理
Mongos.py mongos 服务管理,启动服务进行sh.addShard
Mongo_client.py mongodb client
Configuration/mongodb.xml mongodb前端配置参数,配置mongodb 数据文件存储路径,node_group 参数 节点分组状况
Templates/*.conf.j2 mongodb配置文件模板
安装向导
1. db cluster
Mongodb cluster架构
咱们先看一下mongodb cluster 生产上集群架构,以下图
Mongos:mongos的实例,客户端直接链接mongos,由mongos把读写请求路由到指定的Shard上去。一个Sharding集群,能够有一个mongos,也能够有多mongos以减轻客户端请求的压力。
config server:保存集群的元数据(metadata),包含各个Shard的路由规则。
Shard:数据节点,能够是单个实例,或者Replica set
Replica Set:副本集,在生产环境下Shard是一个Replica Set,以防止该数据片的单点故障。
自动部署的难点:
自动副本配置
基本思路以下:
前提:Replica Set 只包含三个节点,一主两备
将节点连成一个环,每一个节点启动3个mongodb数据服务,分片M 包含的服务为沿节点M开始寻找三个节点,端口号顺序加1,这三个服务就是分片M包含的服务。
如上图所示,3个节点,副本集以下:
Shard0:node0:port1,node1:port2,node2:port3
Shard1:node1:port1,node2:port2,node0:port3
Shard2:node2:port1,node0:port2,node1:port3
N个节点(N>=3,M为某个分片,M<N),副本集以下:
ShardM:nodeM:port1,node(M+1)%N:port2, node(M+2)%N:port3
如何扩容
3个节点,分片以下
Shard0:node0:port1,node1:port2,node2:port3
Shard1:node1:port1,node2:port2,node0:port3
Shard2:node2:port1,node0:port2,node1:port3
新增节点node3,分片以下
Shard0:node0:port1,node1:port2,node2:port3
Shard1:node1:port1,node2:port2,node0:port3
Shard2:node2:port1,node3:port2,node0:port3
shard3:node3:port1,node0:port2,node2:port3
经过对比,咱们能够发现
在原有分片上只有node0:port3,node3:port2,node0:port3发生变化,无论你新增多少节点,变化的只有这三个
如今扩容的方式,当前M个节点,保证shardM下,nodeM:port1数据可靠,对分片进行rs.reconfig
代码结构
metainfo.xml |_ configuration |_mongodb.xml |_ package |_scripts Mongo_base.py Mongo_db.py Mongo_config.py Mongos.py Mongo_client.py params.py |_templates Mongod_db.conf.j2 Mongod_config.conf.j2
Metainfo.xml 定义stack 安装的是mongodb,须要安装的component是什么
Mongo_base.py mongodb安装,配置文件生成
Mongo_db.py mongdb数据服务管理,并完成分片命名,副本选择,进行rs.initialte
Mongo_config.py config服务管理
Mongos.py mongos 服务管理,启动服务进行sh.addShard
Mongo_client.py mongodb client
Configuration/mongodb.xml mongodb前端配置参数,配置mongodb 数据文件存储路径,node_group 参数 节点分组状况
Templates/*.conf.j2 mongodb配置文件模板
安装向导
1. 进入dashboard
2. 点击add service
3.进入Add Service Wizard界面,选择mongodb
4. 自动跳过assign master 界面,切记不用点下一步
5. 配置 slaves and clients
6. 自定义配置文件,更改mongodb文件地址,若是不更改,按照默认/var/lib/mongodb
7. 回顾
8. 安装成功
扩容
1.修改配置文件,增长node_group分组参数
2.增长节点
3.增长主机名,ssh private key
4.确认host,安装ambari agent
5.配置slaves和clients,这里先只增长数据节点
6.回顾
7.安装过程
8.由于修改mongodb配置文件,须要重启mongodb服务
9.安装结果
单节点增长
修改config文件node_group字段,新增节点跟原来节点进行区分,以;分割
在新加节点上选择Add
选择mongodb
安装mongodb 数据服务
重启全部服务,将配置进行更新
重启后结果
咱们博客地址:
http://www.bigdatalab.top/archives/180
代码地址:
https://github.com/cas-bigdatalab/ambari-mongodb-cluster