巨杉Tech | 磁碟故障後SequoiaDB如何實現在線恢復

2021-12-29 巨杉資料庫
最近筆者在看技術大牛們編寫的技術書籍時,發現了一句挺有意思的話,大概的意思是說:既然都需要帶新人熟悉工作的內容,為何不將要教授的內容整理成簡單的教程,讓大家進行閱讀和學習呢。筆者覺得這句話說得挺對,將教授的內容整理成教程,一方面可以加快新人熟悉工作內容,另一方面也可以節省部分時間用於研究感興趣的分布式技術。於是,便有了這篇教大家在 SequoiaDB 集群中出現磁碟壞盤時,如何進行處理的教程,往後也會陸續整理 SequoiaDB 資料庫使用和運維方面的文章,希望可以對大家有所幫助。

一般情況下,磁碟損分為以下兩種類型:

• 磁碟壞道

• 磁碟扇區損壞

磁碟壞道,可以分為:0磁軌壞道,邏輯壞道,硬碟壞道。磁碟壞道通常都可以將損壞的磁碟進行隔離不使用後繼續使用,但建議儘快更換硬碟,因為壞道會擴散,以免出現嚴重的數據問題。在Linux 環境中,磁碟壞道可以通過 badblocks 或 Smartmontools 工具進行檢測,這兩個工具的使用說法,已超過了本教程的範圍,大家可自行搜索了解。

磁碟扇區損壞可以分為兩種:一種是無法修復的物理損壞,另一種是可以修復的軟體錯誤。在 Linux 環境中該如何判斷磁碟的扇區是否出現損壞了呢?可以通過 demesg | grep error 命令進行檢查,通常情況下,出現類似 I/O error, dev sdb, sector 8653216 信息時表示 /dev/sdb 磁碟的扇區可能出現問題了。

當磁碟出現損壞時,SequoiaDB 資料庫可能會有以下現象:

• 資料庫節點掛掉,手工無法拉起

• 數據讀取失敗,節點日誌文件中出現 -1 系統IO錯誤 或 -10 系統錯誤等錯誤碼的日誌



假設已經確認損壞的磁碟為 /dev/sdb, SequoiaDB 資料庫的安裝目錄(資料庫安裝目錄可以通過查看 /etc/default/sequoiadb 文件中 INSTALLDIR 配置的路徑)為 /opt/sequoiadb ,SequoiaDB 資料庫的作業系統管理用戶為 sdbadminn,用戶組為 `sdbadmingroup`。現需要進行磁碟更換的操作,具體的操作步驟如下:

1. 確認損壞磁碟對應的資料庫節點

以 sdbadmin 用戶 ssh 登錄存在磁碟損壞的主機,執行以下命令確認 /dev/sdb 磁碟所對應的資料庫節點

df -h | grep /dev/sdb && sdblist -l -m local

從上圖中可以獲知,/dev/sdb 磁碟對應服務埠( 對應 SvcName 列)為 11840 的資料庫節點,數據節點的數據目錄為/sdbdata/data01/sequoiadb/database/data/11840,該數據目錄需要記錄起來,後面手工恢復數據的步驟中需要用到。
2. 停止資料庫節點

1)檢查集群管理服務節點配置文件中 EnableWatch 參數的值是否為 TRUE,集群管理服務節點配置文件所在為路徑為 /opt/sequoiadb/conf/sdbcm.conf。如果為 TRUE,說明集群管理服務節點會檢測節點的狀態,自動將異常掛掉的節點拉起。此時在執行第 2 步檢查資料庫節點進程不存在時,還需要再執行一次停止資料庫節點的命令,以免資料庫節點再被集群管理服務節點拉起。

cat /opt/sequoiadb/conf/sdbcm.conf | grep "EnableWatch"

從上圖可以獲知,集群管理服務節點配置了自動拉起異常節點並且 EnableWatch 的默認值為 TRUE。2)檢查服務埠為 11840 的資料庫節點進程是否存在,若返回的結果包含 Total: 0 關鍵字,表示資料庫節點進程不存在,即資料庫節點已停止。

Note: 

資料庫節點服務埠 11840 需要替換成 第 1 步中實際資料庫節點的服務埠

3)停止服務埠為 11840 的資料庫節點,若返回的結果包括 Total: 1; Success: 1; Failed: 0 或者 Total: 0; Success: 0; Failed: 0 關鍵字,表示資料庫節點已經停止成功。若返回Total: 1; Success: 0; Failed: 1,表示資料庫節點停止失敗,可重新執行停止資料庫節點命令,若執行多次都無法停止,可以通過 kill -9 <PID> 將進程強殺,PID是第1步中 PID 列對應的數值。

3. 更換磁碟

1)從伺服器磁碟卡槽中拔出損壞的磁碟,插入新的磁碟,然後 ssh 登陸主機,切換至 root 權限用戶,檢查作業系統是否仍可以查看到損壞磁碟的掛載目錄。

從上圖可以獲知,從作業系統中仍看到損壞磁碟的掛載目錄,需要進行卸載。

2)從磁碟掛載目錄中取消掛載損壞的磁碟。正常取消掛載不會有任何結果輸出,若有輸出 umount: /sdbdata/data01: target is busy 等信息,表示有作業系統進程使用了 /sdbdata/data01 目錄,並且進程未退出,需要執行第3步操作,查看有哪些進程使用 /sdbdata/data01 目錄,並將其 kill 掉。

3)通過 fuser 命令查看有哪些進程使用 /sdbdata/data01 目錄,並將其 kill -9 強殺進程。

從上圖可以獲知,進程號為 78422 的進程在使用 /sdbdata/data01 目錄,需要執行 kill -9 78422 命令將該進程強殺掉。

4)通過 fdisk 命令查看檢查作業系統是否已經識別到新插入的磁碟,若輸出結果中出現對應的磁碟盤符,則表示作業系統已經識別到新插入的磁碟。

從上圖可以獲知作業系統還未識別到新插入的磁碟,需要按照第 5 步的命令在線動態識別新插入的磁碟。5)查看主機總線號, 並且重新掃描SCSI總線添加設備,注意:- - - 的 - 符號之間存在空格。
scsi_hosts=(`ls /sys/class/scsi_host/`)for scsi_host in ${scsi_hosts} do    echo "- - -" > "/sys/class/scsi_host/${scsi_host}/scan"done

6)再次通過 fdisk 命令查看檢查作業系統是否已經識別到新插入的磁碟,若輸出結果中出現對應的磁碟盤符,則表示作業系統已經識別到新插入的磁碟。

7)磁碟 /dev/sdb 分區格式化,類型為 ext4,若磁碟的容量大於 2T,使用 parted 工具格式化,否則可以使用 fdisk 工具。此處的磁碟容量小於 2T,當輸出的結果包含 Syncing disks 和 Writing superblocks and filesystem accounting information: done 字眼表示格式化完成。

echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdbecho -e "y\n" | mkfs.ext4 /dev/sdbparted -s /dev/sdb mklabel gptparted -s /dev/sdb mkpart primary 0 100parted -s /dev/sdb printecho -e "y\n" | mkfs.ext4 /dev/sdb

8)掛載磁碟至 /sdbdata/data01 目錄

mount /dev/sdb /sdbdata/data01

9)將 /sdbdata/data01 目錄的擁有者設置為 SequoiaDB 資料庫作業系統管理用戶

sdbadmin:sdbadmin_groupchown -R sdbadmin:sdbadmin_group /sdbdata/data01

10)若配置 /etc/fstab 文件設置開機自動掛載磁碟,若磁碟的盤符發生了改變時,需要修改 /etc/fstab 文件的配置,具體的掛載參數配置以實際情況為主,此處的配置為示例配置。

/dev/sdb                     /sdbdata/data01         ext4    defaults        0 1

4.恢復資料庫節點數據

恢復資料庫節點數據有兩種方式:手工複製主節點的數據文件和基於複製組主從節點間的數據同步機制。手工複製主節點的數據文件最好選擇數據寫入較少的時間窗口執行,這樣能夠減少手工複製完啟動節點時觸發全量同步的可能性,本文提供的手工複製主節點的數據文件步驟中停止了主節點,即不能有新數據寫入。基於複製組主從節點間的數據同步機制恢復數據的步驟為:啟動資料庫節點,此處的資料庫節點服務埠為 11840 節點啟動後,自動從主節點中同步數據,無需人工幹預。

1)連接資料庫,注意需要將 username ,password 修改為真實的用戶名和密碼,若沒有用戶名和密碼則填寫空串""。
sdb 'db = new Sdb("localhost", 11810, "username", "password")'

2)查看資料庫節點所屬複製組名,此處資料庫節點的主機名為 sdbserver1, 服務埠為 11840。

sdb 'db.list(SDB_LIST_GROUPS,{"Group.HostName":"sdbserver1","Group.Service.Name":"11840"},{"GroupName":null})'

從上圖可以獲知,資料庫節點 sdbserver1:11840 所屬的複製組為 group1。

3)查看複製組 group1 的主節點信息。

sdb 'db.getRG("group1").getMaster()'

從上圖可以獲知,複製組的主節點為 sdbserver1:11830。

4)ssh 登錄到主節點所在的機器,查看主節點的數據目錄,查看 DBPath 列的值。

從上圖可以獲知主節點 sdbserver1:11830 的數據目錄為 /opt/sequoiadb/database/data/11830。

5)將複製組 group1 的數據和日誌持久化至磁碟。

sdb 'db.sync({"GroupName" : "group1"})'

6)停止該主節點,輸出的結果出現 DONE 或 Total: 1; Success: 1; Failed: 0 時表示節點停止成功。

7)創建待恢復節點的數據節點目錄,複製主節點的數據目錄下的所有數據文件至待恢復節點的數據節點目錄中。

mkdir -p /sdbdata/data01/sequoiadb/database/data/11840scp -r sdbadmin@sdbserver1:/opt/sequoiadb/database/data/11830/* /sdbdata/data01/sequoiadb/database/data/11840

8)手工拷貝數據完成後,啟動複製組 group1 。

sdb 'db.getRG("group1").start()'

5. 檢查集群的資料庫節點狀態

1)統計集群的資料庫節點狀態是否均為正常,若返回結果只有 ServiceStatus:true 類型的統計數量 N,則表示 N 個數據節點的節點服務狀態為正常,若返回結果存在ServiceStatus:false 或 ServiceStatus:null類型的統計數據量 M,則表示 M 個數據節點的節點服務狀態不正常。

sdb 'db.exec("select ServiceStatus, count(1) as count from $SNAPSHOT_DB group by ServiceStatus")'


從上圖可以獲知集群的 4 個資料庫節點的服務狀態為正常。

2)如果存在服務狀態不正常的節點,可以通過以下命令查看節點的詳細情況。若返回的結果含有 "ServiceStatus": false 時,表示節點服務狀態不正常,可通過 Status 欄位了解節點具體所處的狀態。若返回的結果含有 ErrNodes 信息,通常情況是連接不上該節點,對應異常碼可以查看 Flag 欄位的值。

sdb 'db.exec("select * from $SNAPSHOT_DB where NodeName=\"sdbserver1:11840\"")'

從上圖可以獲知sdbserver1:11810 資料庫節點連接不上,應該是掛掉或者沒有啟動。

資料庫節點存在以下幾種狀態(Status欄位值):• "Shutdown":正在關閉狀態,表示節點正在被關閉• "Rebuilding":重新構建狀態,如節點異常重啟後,無法與其他節點進行數據同步時,節點會進入該狀態,重新構建數據詳細的錯誤碼說明詳見:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190985-edition_id-304


分布式資料庫中,磁碟損壞是常有的事,更換損壞的磁碟後,只需要簡單的幾個步驟,即可以自動恢復 SequoiaDB 資料庫節點的數據。 如果您有哪些疑問想與我們交流歡迎留言,同時歡迎報名參加10月22日舉行的SequoiaDB v5.0新版本發布會,了解我們更多的技術特性。

往期技術乾貨

點擊閱讀原文,即刻報名SequoiaDB新品5.0發布會

相關焦點

  • 巨杉Tech | 使用 SequoiaDB + Docker + Nodejs 搭建 Web 伺服器
    SequoiaDB 巨杉資料庫於3.2.1版本正式推出了 Docker 容器化部署方案,本文將會基於 SequoiaDB 巨杉資料庫與 Nodejs 的 Docker 鏡像搭建一個簡易的 Web 伺服器。我們將會搭建一個三分區三副本的高可用 SequoiaDB 巨杉資料庫。同時,我們將會創建一個SequoiaDB 巨杉資料庫的 MySQL 實例,用以提供 Nodejs 作為數據源。
  • 巨杉Tech | SequoiaDB高可用原理詳解
    通過對本文的閱讀,小夥伴們能夠了解到傳統資料庫的高可用實現方式,包括;主備結構和集群架構;了解到大名鼎鼎的RAFT算法;然後最重要的,巨杉分布式資料庫是如何實一致性的,如何保證在集群環境中實現數據不錯不丟。資料庫系統存儲了一個IT系統的業務數據,可以說是IT系統的大腦。
  • 巨杉Tech | SequoiaS3 原理及最佳實踐
    SequoiaS3是基於巨杉資料庫實現的一種對象存儲服務,具備可擴展、數據高可用、安全、高性能等特性。
  • 最佳實踐 | SequoiaDB單中心三副本部署規劃
    (關於更多SequoiaDB的硬體要求可參考文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1561381803-edition_id-500#受支持的硬體平臺)(關於更多SequoiaDB的硬體要求可參考文檔:http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1561381803-edition_id-500#
  • 巨杉Tech | 十分鐘快速搭建 Wordpress 博客系統
    本文將展示如何使用 SequoiaDB 巨杉分布式資料庫替換MySQL,成為Wordpress博客系統的後臺關係型資料庫。 通過閱讀本文,用戶可以了解到如何使用SequoiaDB巨杉資料庫的MySQL實例無縫替換標準MySQL資料庫。SequoiaDB巨杉資料庫允許用戶在不更改一行代碼的情況下直接對已有應用進行後臺MySQL資料庫遷移。
  • 巨杉Tech | 巨杉資料庫的並發 malloc 實現
    本文由巨杉資料庫北美實驗室資深資料庫架構師撰寫,主要介紹巨杉資料庫的並發malloc
  • 巨杉系列工具 | 集群分析工具sdbtop
    本文將從sdbtop使用方法、如何進行監控檢測、使用案例方面詳細介紹 sdbtop。在SequoiaDB安裝目錄bin中執行:./sdbtop –h顯示參數信息。進入到 sdbtop 主窗口後,主要有三部分組成,頭部區域、中間區域、底部區域組成。
  • 【SDCC講師專訪】巨杉資料庫創始人兼CTO王濤:SequoiaDB為何要開源?
    CSDN:兩年前,你創立了巨杉資料庫,是什麼樣的緣由讓你走上創業之路的?為何取名叫「巨杉」有什麼特別的意義嗎?王濤:IBM的近十年工作時間,我對整個資料庫技術和行業有了比較深刻的認識。而在IBM這樣的大公司當中,創新的阻力不只是來自於外部,公司內部對於顛覆性的創新也有很多阻礙。
  • 巨杉內核筆記 | MVCC多版本控制原理
    巨杉資料庫 SequoiaDB 中的MVCC多版本並發控制技術基於內存老版本和事務回滾段實現的。在MVCC多版本並發控制技術實現過程中,會涉及到全局時間戳、全局事務ID、全局事務可見性等技術特性。下面分別對這些技術實現原理進行描述說明。
  • 筆記本電腦常見故障--調整Win7備份磁碟空間
    >筆記本電腦常見故障--系統恢復筆記本電腦常見故障--瀏覽器主頁修復筆記本電腦常見故障--默認瀏覽器設置筆記本電腦常見故障--開機密碼恢復筆記本電腦常見故障--啟動加速>筆記本電腦常見故障--無網絡連接筆記本電腦常見故障--清理C盤空間之前給大家介紹了清理C盤空間的方法(清理C盤空間),今天給大家介紹下如何調整windows備份磁碟空間大小。
  • RAID磁碟陣列數據災難恢復指南
    本文將重點介紹RAID常見故障及相關處理方式。  RAID故障注意事項  1、數據丟失後,用戶千萬不要對硬碟進行任何操作,將硬碟按順序卸下來,用鏡像軟體將每塊硬碟做成鏡像文件,也可以交給專業數據恢復中心進行。  2、不要對Raid卡進行Rebuild操作,否則會加大恢復數據的難度。
  • →E舞成名/系統磁碟/備份與恢復攻略
    一:備份方法在系統正常的時候,關機後取下伺服器磁碟使用本號所出的支持LINUX系統備份的磁碟克隆機連接磁碟二:故障後恢復方法可使用原盤也可以使用新盤(在原盤沒徹底壞的情況下推薦重寫原盤)→磁碟克隆機使用操作說明將要恢復鏡像的磁碟連結克隆機後連結電腦使用電腦的磁碟克隆工具直接恢復克隆備份的IMG鏡像完成後安全彈出磁碟,將磁碟裝入伺服器,開機測試
  • 如何在恢復模式下重新啟動 Mac
    如何啟動進入恢復模式?
  • 有關RAID 5磁碟陣列數據恢復的問題集錦
    Raid 5是最常見的raid方式之一,它本身也具有一定的數據保護機制,如果其中的一塊盤壞了,插上新磁碟後,將會自動通過其他磁碟上的校驗碼實現數據恢復
  • QEMU/KVM磁碟在線備份
    磁碟的在線完整及增量備份,是「打包」方案的一種具體實現,可實現基於時間點的備份,同時支持本地與遠程2種備份方式,並可指定備份文件進行恢復。本文緣由▪ 2. 最終能實現什麼▪ 3. 環境說明▪ 4. 常用命令一覽▪ 5. 磁碟在線備份的4種方式▪ 6. 查詢磁碟對應的設備名▪ 7. 什麼是bitmap▪ 8. 創建與查詢bitmap▪ 9. 基於bitmap做增量備份▪ 10. 刪除bitmap▪ 11. 重置bitmap▪ 12. 備份邏輯▪ 13. 遠程備份▪ 14. 備份任務管理▪ 15. 事件查看▪ 16.
  • 巨杉分享 | 巨杉資料庫在數據湖中的應用實踐
    為此,「巨杉最具價值專家SVP」技術交流會特別邀請巨杉北美實驗室核心成員Danny Chen ,講解數據湖的技術原理與巨杉資料庫在數據湖中的應用實踐。從架構演進來說,數據湖可以理解為一個storage即存儲區域,存放內容多為原始數據,也叫做裸數據。
  • 【案例】raid5磁碟陣列兩塊硬碟離線數據恢復
    磁碟陣列故障發生過程:某研究所的DELL MD1000伺服器內置15塊1TB硬碟搭建為RAID5磁碟陣列陣列,伺服器在正常工作中有一塊硬碟離線,管理員對磁碟陣列進行同步,在硬碟進行同步的過程中第二塊磁碟指示燈報警
  • 災難恢復指標之RPO和RTO的技術實現
    但是隨著公司業務的發展和數據容量的增加,這種磁帶備份的容災方式在單個業務發生數據損失時,恢復方式尚可滿足要求,然而一旦多個業務同時出現數據問題,或者磁碟陣列本身發生故障造成多個或所有業務不可用時,幾十TB的大數據容量,採用這種恢復方式
  • Raid磁碟陣列真的是100%的安全嗎?Raid有哪些常見的故障?
    這類故障在RAID數據恢復中比例相當高,伺服器維護管理跟不上很容易發生。3、固件算法缺陷:RAID的創建、重建、降級、保護等工作在控制器的實現上是非常複雜的算法,當然這裡面的複雜更多地是提供儘可能萬無一失的無漏洞算法,儘管廠商不會輕易承認控制器的BUG,但毫無疑問,這些問題在任何一款控制器上都無法避免。因為固件算法上BUG,可能會產生很多無法解釋的故障。
  • 【RAID-5磁碟陣列】數據恢復 & 手動分析
    描述:現有一涉案伺服器出現陣列模塊故障,已知正常的盤序,現需分析後恢復陣列數據;檢材:1.dd、2.dd、3.dd工具:DRS6800數據恢復系統步驟1:打開軟體,選擇數據恢復/陣列重組,添加鏡像文件。