1. 傳統mongodb架構和華為雲mongodb
2. mongodb中集群有三種:主從複製、副本集、分片集群
3. 水平拓展或者橫向拓展:就是在已有的集群上再增加節點到集群內
4. 深度拓展或者縱向拓展:就是在單台機器上增加硬體的配置,以提公升效能
5. 專案完成步驟
(1) 先使用install.bin在三颱機器上部署乙個集群
(2) 在第四臺機器上手動執行命令,將這台機器加入到已有集群中
① ***
② ***
(3) 將手動命令寫成指令碼
(4) 驗證測試
6. 問題分析
想在我們有如下三個mongodb程序,啟動儲存服務,三節點是沒有任何問題的,每一台節點都啟用這樣三個一模一樣的服務,目的是為了實現高可用,有宕機的情況下都能使用,因為每一台中都包含了路由,配置,儲存的服務。
#1單個每一台起自己的mongos服務是能夠起來的
#2新增路由在前面加集群名
sh.addshard ( 「 rs1 / mongodb0.example.net:27017」 )
現在做幾個方向的猜想驗證:
1. 新增加節點以後,路由啟動還是原來的啟動方式,不新增新的配置ip,然後往資料庫中插入資料,檢視是否資料進行了分片,有沒有插入到新的節點中資料
2. 弄清楚配置伺服器是怎樣原理配置,新增加的節點,配置伺服器需要修改哪些東西,新增分片需要修改配置伺服器,然後才能在路由中新增
參考:3. 瀏覽網上的做法多是:
(1) 多台分片伺服器,一台單獨的配置伺服器(配置伺服器和路由放在同一臺服務上),
(2) 多台分片伺服器,一台單獨的配置伺服器,多台路由,和分片伺服器同等數量同機啟動
現在我們自己的做法是:
多台分片伺服器,同等數量配置伺服器,同等數量的路由,將三個程序在一台機器上全部起來,每一台都是同樣的操作
初步懷疑,我們這樣的做法可能不對,待驗證。
4. 懷疑是mongo只能啟動帶有三個ip的路由,三個ip是任意組合的,只要數量為3就可以
5. 驗證一次配置初始化4臺節點,能不能啟動路由,是不是只能新增3臺ip(佐證猜想4)
mongo版本:3.2.22
7. 實驗一------驗證猜想1
環境:4臺機器,1.65,1.66,1.67,1.69
1. 在主節點1.69,fbbox資料庫下插入100條資料,去其他三個從節點檢視資料,全部為100條的資料記錄
>for(i=0;i<100;i++)); }
>db.user.count()
結論:a. 使用rs.add()新增的節點成功,資料可以實現副本備份,
b. 新新增的節點參與了節點推主的選舉,並且成功成為主節點
c. 即使在啟動路由mongos時,沒有將新新增的ip包含在內,其功能依然具備
d. 我們現在使用的集群模式只是主從的副本集,並不具備資料分片儲存功能,並且mongod的啟動命令引數存在問題,導致錯誤判斷。
8. 實驗二------驗證猜想4,5
環境:4臺機器,1.65,1.66,1.67,1.69
1. 初始化四台節點ip,啟動路由時使用四個ip,啟動失敗
2. 初始化四台節點ip,任意路由使用三個ip,成功啟動
結論:a. 可能只能使用三個ip啟動路由
b. 在網上找到一段標記,正是說的路由只能有1個或者3個
參考:
9. mongo副本集配置
參考:10. mongo分片集配置
參考:11. 副本集與分片結合
參考:12. 路由-配置-副本集
參考:
13. 解決方案
問題原因:通過實驗1與實驗2的驗證,和查詢資料9,10,11,12的了解,路由的ip只有1個或者3個,多了就會報錯。根據這個情況,先提供以下解決方案
解決方案:寫乙個指令碼去檢測路由使用的三個節點ip,當其中的主節點掛掉之後,將主節點重新加入路由,重啟路由服務即可(因為任意三個已存在節點是可以啟動的),這樣就實現了動態橫向拓展的目的。
14. 新新增的節點路由啟動失敗
(1) 檢視mongos.log檔案,發現有超時提示,所以對集群的所有機器進行時間同步(根據提示可知,節點之間時間差在30s時就會導致路由啟動失敗)
(2) 檢視mongos.log檔案,發現有提示新節點的配置和集群不一樣,則需要將集群的配置匯入到新節點中,路由會成功啟動
function sync_config_from_master():20001 -d config -o /tmp/config /opt/mongodb/bin/mongorestore --host $:20001 -d config /tmp/config/config } localip為集群內某一節點的ip,add_ip為新新增的節點ip
15. 新新增的節點未加入集群中
(1) 檢視selinux是否關閉
(2) 檢視防火牆是否關閉,
錯誤提示如下圖
16. 如果集群節點一直處於startup,檢視mongo.log得知如下錯誤提示
根據錯誤提示解決:
17. 如出現如下情況
a. 請檢查是否在集群的啟動過程中,沒有啟動儲存,和配置程序,並且其他的兩台節點也沒有啟動,直接在一台上啟動三個配置路由無法啟動
b. 做集群,如果其他兩台都已經啟動,路由也已經啟動,之後,只剩一台了,那麼起3個ip配置的路由還是能起來的
mongodb基礎語法知識:
sql術語/概念
mongodb術語/概念
解釋/說明
database
database
資料庫table
collection
資料庫表/集合
rowdocument
資料記錄行/文件
column
field
資料字段/域
index
index
索引table joins
表連線,mongodb不支援
primary key
primary key
主鍵,mongodb自動將_id欄位設定為主鍵
1. 檢視資料庫列表
>show dbs
2. 檢視集合
>show collections
3. 如果想知道當前資料庫下的表或者表collection支援哪些方法,可以使用一下命令如:
>db.suer.help(); user為表名
4.
Mongodb 實戰優化
mongodb是乙個高效能,可擴充套件資料庫,並具有低延遲,高吞吐率的效能。但是使用過程中難免會有所坑,下面將介紹一些優化方案。以下建議翻譯自 亞馬遜的 performance best practices for mongodb 2015 補充是自己在mongodb實踐中的總結 1 mongodb...
mongodb分片實戰
分片技術其實就是乙個分布式的過程,但是mongodb的負載和其他的負載有所不同,在整個mongodb分布式的集群中一共有如下角色 mongos mongos就是乙個路由伺服器,它會根據管理員設定的 片鍵 將資料分攤到自己管理的mongod集群,負責和客戶端直接互動 config 資料和片的對應關係以...
ubuntu安裝mongodb實戰
1的linux 版本的壓縮包,並解壓到本地目錄 usr local coolcao mongodb 2 建立資料檔案存放目錄,這裡我存放的目錄在 usr local coolcao mongodb data 3 建立日誌目錄及日誌檔案 usr local coolcao mongodb log mo...