mongodb實戰 水平拓展實驗

2021-10-02 17:32:53 字數 3175 閱讀 1693

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...