MongoDB複製集資料庫拆分和版本公升級實戰

2021-09-21 21:49:10 字數 3208 閱讀 9390

問題描述

複製集rs_1上承載了所有的資料庫業務,而加記憶體已經無法滿足應用程式壓力。

解決方案

考慮拆分複製集rs_1的部分資料庫到rs_2,並同時公升級資料庫版本到2.6。

架構圖

準備

評估公升級可能性

1. 連線2.6 mongo shell到2.4 複製集輔助成員,在admin庫執行db.upgradecheckalldbs()。   

2. 評估公升級到2.6的應用程式相容性問題,參考:

資料庫劃分

1. 劃分拆分後複製集中資料庫成員。   

2. 理清對應的應用,準備好需要更新的鏈結字串。

驅動公升級

1. c#/.net 驅動版本需要提前公升級到1.9以上。

操作步驟

向複製集rs_1中加入乙個2.6版本的secondary成員

1. 在replset 1中加入2.6版本的secondary成員(或將現有2.4版本secondary公升級到2.6版本),具體公升

級方法,請參見《公升級mongodb到2.6》。

2. 根據實際情況,看是否需要加入arbiter,保證replset 1有基數個成員。   

rs.addarb("aaaaaa:30000")

將複製集rs_1中的部分資料庫拆分到rs_2

1. 將2.6版本的secondary成員配置新的副本集名稱   

修改配置檔案/etc/mongod.conf配置引數replset=rs_2    

2. 停止該secondary成員的服務    

service mongod stop    

3. 刪除掉該secondary成員的oplog    

cd /data/var/lib/mongodb/local    

rm -rf local.*    

4. 啟動服務    

service mongod start    

5. 初始化新複製集rs_2    

rs.initiate()    

rs.conf()    

rs.status()    

6. 公升級授權架構    

db.getsiblingdb("admin").runcommand();    

7. 移除複製集rs_1中的該成員    

rs.conf()    

rs.remove('******:27017')    

8. 保留複製集rs_2中的資料庫成員,刪除其他庫。    

use [資料庫名]    

db.dropdatabase();

應用程式修改

1. 修改複製集rs_2中的成員對應的應用程式的鏈結字串。

向複製集rs_2新增兩個2.6版本的成員

1. 停掉rs_1中的兩個secondary成員的mongod服務   

service mongod stop    

2. 資料庫版本公升級到2.6    

3. 刪除資料庫目錄下的資料檔案    

4. 修改/etc/mongod.conf配置引數replset=rs_2    

5. 啟動mongod服務    

service mongod start    

6. 連線新複製集rs_2的primary的mongo shell新增兩個新成員    

rs.add('yyyyyy:27017')    

rs.add('zzzzzz:27017')    

7. 移除複製集rs_1的yyyyyy和zzzzzz成員    

rs.conf()    

rs.remove('yyyyyy:27017')    

rs.remove('zzzzzz:27017')    

8. 檢查新複製集rs_2的資料同步狀態    

rs.status()    

9. 為了避免,當資料同步過程中,應用端大量的查詢連線請求,導致同步無法完成,可隱藏該

secondary成員。(可選)   

cfg = rs.conf()    

cfg.members[1].priority = 0    

cfg.members[1].hidden = true    

rs.reconfig(cfg)    

注意:members陣列索引從0開始。    

10.待資料同步完成後,再取消隱藏。(可選)    

cfg = rs.conf()    

cfg.members[1].hidden = false    

cfg.members[1].priority = 1    

rs.reconfig(cfg)    

11.若rs_2的primary硬體配置更好,可修改primary的優先順序。(可選)    

cfg = rs.conf()    

cfg.members[0].priority = 23    

rs.reconfig(cfg)    

12.在忽略9到12步的情況下,若某個secondary成員的硬體配置更好,希望同步資料完成後,自動選舉為

primary,可在同步資料過程中,修改該成員的優先順序。待資料同步完後,會自動切換。(可選)   

cfg = rs.conf()    

cfg.members[2].priority = 23    

rs.reconfig(cfg)

源複製集rs_1公升級到2.6版本

1. 移除選舉成員。   

rs.remove('aaaaaa:30000')    

2. 刪除源複製集rs_1中的拆分到rs_2的資料庫成員。    

3. 公升級複製集rs_1,步驟可參見《公升級mongodb到2.6》和《mongodb公升級使用者授權資料到2.6格式》。

人臉集資料庫

資料集 數量人臉數量 關鍵點數量 主要用途 優點缺點 適用方法 aflw 16k25k 21 點不全 85 點全,但無側臉 人臉檢測 人臉矯正 包含各種自然情況下的人臉 多角度 年齡 性別等 資料集乾淨 關鍵點標註精準。數量少,缺乏亞洲人臉 boost celeba 200k 200k 5人臉檢測 ...

資料庫拆分

一 水平切分是指,以某個欄位為依據 例如id 按照一定規則 例如取模 將乙個庫 表 上的資料拆分到多個庫 表 上,以降低單庫 表 大小,達到提公升效能的目的的方法,水平切分後,各個庫 表 的特點是 1 每個庫 表 的結構都一樣 2 每個庫 表 的資料都不一樣,沒有交集 3 所有庫 表 的並集是全量資...

資料庫拆分

1.第一步 採用分布式快取redis memcached等降低對資料庫的讀寫操作 2.第二步 如果快取使用過後,資料庫訪問量還是非常大,可以考慮資料庫讀寫分離原則。3.第三步 當我們使用讀寫分離 快取後 資料庫的壓力還是很大的時候,這就需要使用資料庫的拆分了。乙個資料庫由很多表構成,每個表對應著不同...