咱們先看一下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