如何有效減少運維工作量?華為云RDS來幫忙
互聯網技術的迅猛發展,手機、平板、智能電視等各種輸入終端的普及,讓互聯網數據呈現出爆炸性的增長。面對海量的數據,如何能以更加穩定、快速的方式存儲海量數據,以及從中挖掘出有價值的信息,成為很多企業面臨的新課堂。
云存儲的出現為數據挖掘快速發展帶來了新的機遇。亞馬遜、微軟、谷歌、IBM 等巨頭紛紛推出了自己的云存儲平臺,國內華為、騰訊、百度、360 等公司也加緊了在云存儲領域的布局。云服務已經被企業列入常規IT投資,云數據庫服務是非常重要的一部分。
本文將從一個用戶的角度歷數市場上現有關系型數據庫服務的主要功能,探索是否有一些改進的空間以及華為云數據庫在技術上所做的一些選擇。
數據庫備份
數據庫備份指將數據庫系統中的數據加以復制,一旦發生災難或錯誤操作時,得以方便而及時地恢復系統的有效數據和正常運作。
數據庫備份是用戶常用的功能之一,mysqldump/xtrabackup 是最常見的備份方案,同時也是大多數廠商的選擇。
Mysqldump 有比較明顯的缺陷,無法做增量備份,對于經常需要做備份的用戶來說,是無法接受的。Xtrabackup 是 Percona 推出的商業解決方案,同時提供免費版本,基本機制是通過比較LSN來做增量拷貝。從機制來看,需要 innodb 事務的支持,對于非innodb 比如 myisam,則通過FLUSH TBALES WITH READ LOCAK來保證數據的一致性,顯然,block write 的時間取決于 myisam 表拷貝時間。但是我們可以禁用myisam表,這個問題可以跳過。另一方面,xtrabackup 需要運行在 GuestOS 中,讀取拷貝生產環境數據目錄同時會影響到線上的 IO 表現。
如果用戶想要刪除其中一個增量備份,該如何做增量的合并和刪除?還是將依賴的增量一并刪除?
對用戶來說,恐怕這都不是理想的。
有沒有既不影響生產環境IO,又能做增量并且還能獨立刪除的辦法呢?
事實上,華為云數據庫備份是由客戶啟動的數據庫實例的備份,不僅可以備份單個數據庫,還可以備份整個數據庫實例。數據庫備份可讓客戶按所需的任意頻率在已知狀態備份數據庫實例,然后隨時還原到該特定的狀態。數據庫備份可以使用 RDS 控制臺或 RDS API 創建,備份會一直保存,直到客戶使用 RDS 控制臺或 RDS API 將其或其所在的實例刪除。
- 急速增量備份 – 快速完成數據備份,避免大數據量備份時間過長。
- 線上業務輕干擾 – 基于備份的備份過程效率較傳統數據庫備份方式要高,合理的備份策略,對實例IO資源和業務有著非常有限的影響。
數據庫實例規格如圖1所示:
圖1
數據庫引擎
Innodb、myisam 是最常用的 MySQL 數據庫引擎,前者是事務安全的,后者則擁有更高的性能。前文描述到,myisam 無法保證備份點數據的一致性,FLUSH TBALES WITH READ LOCAK 又需要 block write,得不償失。
MySQL replication 是做讀寫分離的基礎,分為異步和半同步的方式,前者有對主機性能影響小,但數據有一定延時,后者則相反。兩種技術可以滿足用戶不同場景的需求。關于Crash safe 的問題,分為 master crash safe 和slave crash safe。MySQL 5.6 版本之前存在一個 bug,即當 sync_binlog=1/innodb-flush-log-at-trx-commit=1 時,會使得 InnoDB 存儲引擎的 group commit 失效,導致性能急劇下降。crash-safe slave 的問題更復雜些,主要 replication 中的 SQL thread 和 IO thread 原子性問題,這里不再累述,MySQL 5.6 版本通過將 relay-info.log 的信息保存在 InnoDB 的事務表中解決了這個問題。
講了這么多華為云 RDS 技術,下面會從幾個方面詳解 RDS 究竟是什么。
深入淺出 RDS
RDS(Relational Database Service,關系型數據庫服務)是一種基于云計算平臺的即開即用、穩定可靠、彈性伸縮、便捷管理的在線關系型數據庫服務。
RDS 具有較為完善的性能監控體系和多重安全防護措施,能使企業用戶在云中輕松設置、操作和擴展關系型數據庫。通過 RDS 控制臺,可以執行所有必需任務而無需編程,簡化運營流程,減少日常運維工作量,從而能夠專注于應用開發和業務發展。
用戶訪問 RDS 實例時,需要經過 ECS(Elastic Cloud Server,彈性云服務器),具體關系如圖2所示:
圖2
RDS 的最小管理單元是實例,一個實例代表了一個獨立運行的關系型數據庫,實例可進行如下分類:
- 主實例
- 備實例
- 只讀實例
用戶可以在 RDS 系統中自助創建及管理各種數據庫引擎的實例。
RDS API 使用場景
RDS 的 OpenAPI 提供針對用戶數據庫實例的創建、查看、刪除等基本操作,以及查詢系統支持的 API 版本、數據庫引擎及版本、運行環境規格、可用區域等操作。其主要的調用場景如圖3和圖4所示。
圖3
在創建實例之前,需要獲取系統支持的數據庫引擎及版本,運行環境規格以及可用區域信息。
在獲取到信息之后,可以將返回結果作為調用參數,執行創建實例操作。
在實例創建成功后,用戶可以對自己所屬的實例進行列舉、查詢詳細信息、以及刪除操作。
圖4
數據庫實例需要先查詢數據庫所有參數和參數信息后才能進行設置參數取值和參數恢復默認值。
數據庫實例可以進行擴容和重啟,可以將返回的任務號作為調用參數查詢異步任務的進展情況。
數據庫解決方案對比
數據庫的解決一般可通過自建數據庫、數據庫on云服務器、RDS等,我們來通過圖5所示的詳細對比了解其優劣勢:
圖5
RDS 背后聚集了華為的 DBA 團隊專門負責運維,數據庫內核開發團隊負責改進數據庫,將很多需要 DBA 日常運維的工作逐漸納入實現產品化。使用的客戶可以從很多底層的任務中解放出來。
RDS 數據庫實例的生命周期包括創建、修改、重啟、備份和還原以及刪除等,具體如圖6所示。
圖6
完整的RDS需要提供哪些服務
接下來將以華為云 RDS 為例,來說明作為一個完整的RDS產品,至少需要能夠提供哪些服務。
結合在數據庫技術領域的發展趨勢,完整的 RDS 產品或可從以下幾點特性著手研發:兼容多版本 MySQL、多種實例類型滿足多場景需求、數據庫管理便利靈活、指標監控便于運行狀況了解、性能調優滿足業務需要等。
以華為云 RDS 為研究模板和例子,其服務特性可從以下幾點來看:
- 安全。RDS 包括多種安全策略保護數據庫和用戶隱私,例如:VPC、子網、安全組等。
- 性能監控。RDS 能支撐監控數據庫實例及數據庫引擎的關鍵性能指標,包括計算/內存/存儲容量使用率、I/O 活動、數據庫連接數、QPS/TPS、緩沖池、讀/寫活動等。
- 數據遷移。登錄 RDS 管理控制臺,即可在“數據遷移”頁面,提供數據遷移流程。
- 高可用。RDS會將主數據庫實例數據復制到一個備用數據庫實例中,一旦主數據庫實例發生故障導致不可用,即可在很短時間內切換到備用數據庫實例上。
- 彈性伸縮。包括水平伸縮和垂直伸縮,例如可增刪只讀實例(每個數據庫最多有5個只讀實例)、數據庫實例存儲空間擴容等。
- 備份與恢復。RDS 既支持自動備份以及創建備份,又能支持恢復到某個備份文件點。
- 日志管理。可查詢數據庫“錯誤日志”和“慢查詢日志”,為數據庫調優提供參考。
- 參數配置。數據庫管理員可以根據監控和日志等信息,對數據庫引擎參數進行自定義設置,從而優化數據庫。
結語
華為云 RDS 可以解決當前各類電子商務網站、社區網站、移動 APP 以及游戲類應用數據庫搭建、管理以及維護的高成本及復雜性問題,使用戶可以將更多的精力聚焦到應用和業務等核心層面,節約硬件成本和軟件等成本,實現按需付費。
華為云 RDS 支持主從熱備、讀寫分離,且提供了備份、恢復、監控等方面的全套解決方案,從而解決數據庫運維上的問題。
了解更多華為云數據庫:https://www.huaweicloud.com/product/dbs.html