DBA一族九陽神功祕籍

德哥發表於2017-02-05

標籤

PostgreSQL , 節假日巡檢 , 監控 , 閃回 , flash back query , trigger , event trigger , 回收站 , recycle bin , pgtranshcan , hook , _PG_init , 事件觸發器 , 審計 , 跟蹤 , 邏輯複製 , DDL邏輯複製 , UDR , BDR , 資料庫安全


背景

如果你是資料庫這個行業的朋友,最近可能會被朋友圈的各種關於 “爐石資料被刪” 、 “mongoDB遭黑客勒索” 、 “gitlab資料檔案被rm -rf” 的事件刷屏。

資料庫在是企業中佔據非常重要的位置,發生資料庫被SQL隱碼攻擊,資料被誤刪的事情,不僅僅影響業務,還可能造成使用者的資訊被洩露。

DBA一族就像IT行業的邊防戰士,守衛資料是DBA的重要職責之一。

pic

眼看就要春節了,DBA一族想不想過個好年?和小夥伴們一起戳個麻將,和家人去哪裡度個假,晚上好好的睡個覺,又或者晚上和新買的充氣XXOO?oh no,不要被shit的故障電話CALL醒了。

pic

pic

從人在囧途說起

在大城市裡打工的年輕IT民工們,一年難得回一趟老家看看家裡的爸媽。

首先要恭喜一下買到了過年回家的票的小夥伴們,你們真是幸運的。

在開始漫長的回家旅程之前,細心的同學一定會做好這幾件事情再粗發吧?

防火防盜防色狼

備好路途中所需的糧食和水,短途的朋友可以忽略

備好應急啟動電源,拖車線,防滑鏈。

買好保險

春節前儘量做個汽車保養,檢查一下車輛健康狀況,一些已經發現的小毛病修掉

檢查備胎的胎壓是否正常,加滿油,加滿玻璃水

備足銀兩

交足電話費,確保春節期間手機暢通

手機充滿電、最好帶個充電寶,旅途就不會那麼無聊了,當然你還可以下點小視訊哦

關閉煤氣、暖氣等開關

關閉所有的水龍頭,特別是洗衣機的進水口開關

關閉所有的家電,關閉電源開關

給小花小草足夠的水分,不然半個月的春節過去小花們都等謝了

開啟遠端攝像頭,嘿嘿現在已經不是高科技了,遠端隨時監控,很多家裡請了全職保姆單獨帶娃的可能都會裝一個這樣的裝置

鎖好門窗,準備出發,祝大家旅途愉快

DBA一族,春節期間不能忽略的N件事

與其說春節期間不能忽略的N件事,倒不如說是DBA一族的《九陽神功》,它應該包含日常篇、重大節假日前篇、重大節假日中篇、重大節假日後篇。

1 日常篇

作為DBA一族,首當其衝的是守衛資料,讓資料庫正常運轉,所以有些事情是骨子裡就應該遵循的。

1. 制定並執行資料庫安全規範

2. 制定並執行資料庫管理規範

3. 制定並執行資料庫開發規範

4. 建立自動化監控系統

5. 建立自動化巡檢、備份、HA、異地容災、異地備份系統、(還有很重要的備份集可用性校驗,特別是在磁帶庫時代)

6. 制定節假日的封網機制、應急機制

這樣就建立了一道強有力的封印,可以有效的防止外族入侵。

細節請開啟如下文件閱讀

《DBA專供 岡本003系列 – 資料庫安全第一,過個好年》

《PostgreSQL 資料庫安全指南》

《PostgreSQL 資料庫開發與管理規範》

《PostgreSQL 最佳實踐 – 線上增量備份與任意時間點恢復》

《PostgreSQL 最佳實踐 – 任意時間點恢復原始碼分析》

《PostgreSQL 最佳實踐 – 塊級增量備份(ZFS篇)方案與實戰》

《PostgreSQL 最佳實踐 – 塊級增量備份(ZFS篇)備份集自動校驗》

《PostgreSQL 最佳實踐 – 塊級增量備份(ZFS篇)單個資料庫採用多個zfs卷(如表空間)時如何一致性備份》

《PostgreSQL 最佳實踐 – 塊級增量備份(ZFS篇)雙機HA與塊級備份部署》

《PostgreSQL 最佳實踐 – 塊級別增量備份(pg_rman baseon LSN)原始碼淺析與使用》

《PostgreSQL 最佳實踐 – pg_rman 以standby為源的備份淺析》

《PostgreSQL 最佳實踐 – pg_rman 資料庫恢復示例 與 軟體限制解說》

《PostgreSQL 資料庫巡檢》

《PostgreSQL 資料庫HA》

《PostgreSQL 金融行業高可用和容災解決方案》

《PostgreSQL 資料庫在上市公司重要應用中的SOX審計》

2 重大節假日前篇

1. 春節前,建議增加一次例行的巡檢,就好像我們出遠門檢查一下車子一樣。

比如這樣一些例行的檢查項

"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                      作業系統資訊                       |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  主機名: "  
"----->>>---->>>  以太鏈路資訊: "  
"----->>>---->>>  IP地址資訊: "  
"----->>>---->>>  路由資訊: "  
"----->>>---->>>  作業系統核心: "  
"----->>>---->>>  記憶體(MB): "  
"----->>>---->>>  CPU: "  
"----->>>---->>>  塊裝置: "  
"----->>>---->>>  拓撲: "  
"----->>>---->>>  程式樹: "  
"----->>>---->>>  作業系統配置檔案 靜態配置資訊: "  
"----->>>---->>>  /etc/sysctl.conf "  
"----->>>---->>>  /etc/security/limits.conf "  
"----->>>---->>>  /etc/security/limits.d/*.conf "  
"----->>>---->>>  /etc/sysconfig/iptables "  
"----->>>---->>>  /etc/fstab "  
"----->>>---->>>  /etc/rc.local "  
"----->>>---->>>  /etc/selinux/config "  
"----->>>---->>>  /boot/grub/grub.conf "  
"----->>>---->>>  /var/spool/cron 使用者cron配置 "  
"----->>>---->>>  chkconfig --list "  
"----->>>---->>>  iptables -L -v -n -t filter 動態配置資訊: "  
"----->>>---->>>  iptables -L -v -n -t nat 動態配置資訊: "  
"----->>>---->>>  iptables -L -v -n -t mangle 動態配置資訊: "  
"----->>>---->>>  iptables -L -v -n -t raw 動態配置資訊: "  
"----->>>---->>>  sysctl -a 動態配置資訊: "  
"----->>>---->>>  mount 動態配置資訊: "  
"----->>>---->>>  selinux 動態配置資訊: "  
"----->>>---->>>  建議禁用Transparent Huge Pages (THP): "  
"----->>>---->>>  硬碟SMART資訊,判斷磁碟壽命(需要root): "  
"----->>>---->>>  /var/log/boot.log "  
"----->>>---->>>  /var/log/cron(需要root) "  
"----->>>---->>>  /var/log/dmesg "  
"----->>>---->>>  /var/log/messages(需要root) "  
"----->>>---->>>  /var/log/secure(需要root) "  
"----->>>---->>>  /var/log/wtmp "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                       資料庫資訊                        |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  資料庫版本: "  
"----->>>---->>>  使用者已安裝的外掛版本: "  
"----->>>---->>>  使用者使用了多少種資料型別: "  
"----->>>---->>>  使用者建立了多少物件: "  
"----->>>---->>>  使用者物件佔用空間的柱狀圖: "  
"----->>>---->>>  當前使用者的作業系統定時任務: "  
"----->>>---->>>  獲取pg_hba.conf md5值: "  
"----->>>---->>>  獲取pg_hba.conf配置: "  
"----->>>---->>>  獲取postgresql.conf md5值: "  
"----->>>---->>>  獲取postgresql.conf配置: "  
"----->>>---->>>  使用者或資料庫級別定製引數: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                   資料庫錯誤日誌分析                    |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  獲取錯誤日誌資訊: "  
"----->>>---->>>  獲取連線請求情況: "  
"----->>>---->>>  獲取認證失敗情況: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                   資料庫慢SQL日誌分析                   |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  慢查詢統計: "  
"----->>>---->>>  慢查詢分佈頭10條的執行時間, ms: "  
"----->>>---->>>  慢查詢分佈尾10條的執行時間, ms: "  
"----->>>---->>>  auto_explain 分析統計: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                   資料庫空間使用分析                    |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  輸出檔案系統剩餘空間: "  
"----->>>---->>>  輸出表空間對應目錄: "  
"----->>>---->>>  輸出表空間使用情況: "  
"----->>>---->>>  輸出資料庫使用情況: "  
"----->>>---->>>  TOP 10 size物件: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                     資料庫連線分析                      |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  當前活躍度: "  
"----->>>---->>>  總剩餘連線數: "  
"----->>>---->>>  使用者連線數限制: "  
"----->>>---->>>  資料庫連線限制: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                     資料庫效能分析                      |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  TOP 5 SQL : total_cpu_time "  
"----->>>---->>>  索引數超過4並且SIZE大於10MB的表: "  
"----->>>---->>>  上次巡檢以來未使用或使用較少的索引: "  
"----->>>---->>>  資料庫統計資訊, 回滾比例, 命中比例, 資料塊讀寫時間, 死鎖, 複製衝突: "  
"----->>>---->>>  檢查點, bgwriter 統計資訊: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                     資料庫垃圾分析                      |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  表引膨脹檢查: "  
"----->>>---->>>  索引膨脹檢查: "  
"----->>>---->>>  垃圾資料: "  
"----->>>---->>>  未引用的大物件: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                     資料庫年齡分析                      |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  資料庫年齡: "  
"----->>>---->>>  表年齡: "  
"----->>>---->>>  長事務, 2PC: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|               資料庫XLOG, 流複製狀態分析                |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  是否開啟歸檔, 自動垃圾回收: "  
"----->>>---->>>  歸檔統計資訊: "  
"----->>>---->>>  流複製統計資訊: "  
"----->>>---->>>  流複製插槽: "  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"|                資料庫安全或潛在風險分析                 |"  
"|+++++++++++++++++++++++++++++++++++++++++++++++++++++++++|"  
"----->>>---->>>  密碼洩露檢查: "  
"----->>>---->>>  簡單密碼檢查: "  
"----->>>---->>>  使用者密碼到期時間: "  
"----->>>---->>>  SQL隱碼攻擊風險分析: "  
"----->>>---->>>  普通使用者物件上的規則安全檢查: "  
"----->>>---->>>  普通使用者自定義函式安全檢查: "  
"----->>>---->>>  unlogged table 和 雜湊索引: "  
"----->>>---->>>  剩餘可使用次數不足1000萬次的序列檢查: "  
"----->>>---->>>  觸發器, 事件觸發器: "  
"----->>>---->>>  檢查是否使用了a-z 0-9 _ 以外的字母作為物件名: "  
"----->>>---->>>  鎖等待: "  
"----->>>---->>>  繼承關係檢查: "  

2. 對可預知的業務資料庫、(當然還包括應用伺服器等)進行擴容,這個是很有必要的,通常許多業務會在節假日時迎接高峰,例如遊戲類業務、社交類業務、電商類業務等。

3. 預備一批硬體standby,以便應對春節的即時需要

4. 封網,停止變更,通常需要提前數天停止變更,減少因為變更帶來的潛在問題。

例如應用程式變更後,可能新增了一些SQL語句,這些SQL語句本身可能沒有優化好,又或者無法預知業務對這些SQL語句的請求量併發量等,導致資料庫在重大節假日存在潛在的炸彈。

5. 排班。安排好值日,做到7*24小時有DBA可以響應,保持手機暢通,同時確保值班的童鞋可以連線網路。

6. 通常值日生在節假日期間一個人要負責的業務比平時負責的業務更廣泛,所以對值日生進行值班內容、業務的培訓也是很有必要的。

因此平時的DBA輪崗機制也是很重要的,要絕對避免這樣的現象:一個業務只有一位DBA熟悉。

7. 宣導,向公司業務方敲鑼打鼓的宣導,要進入封網期間了,請大家遵循封網規則,不要在封網期間做越界的事情(比如變更、釋出)。

雖然在制度上和某些IT手段上控制了封網期間的行為,但是難免有漏網之魚,所以宣導也是很重要的。

3 重大節假日中篇

1. 值班,通常分為線上和離線值班,線上和上班差不多,可能要隨時關注一些NOC平臺的指標,間歇性的填寫一些值班報告。

離線值班指被動的接收告警簡訊,郵件,發生問題時上線處理。

2. 交接班,交接班是非常重要的,通常上一個班的同事會發現一些異常,交代給下一位值班的同事,如果真的遇到問題響應速度和判斷效率也更高。

4 重大節假日後篇

封網結束後,一切又回歸正常了。但是有一件很重要的事情別忘記了。

1. 覆盤

覆盤通常指對封網期間的系統狀態進行回顧,要達到幾個目的

1.1 擴容預估是否合理,同時建議反饋給業務方相應的資料

1.2 是否有故障,什麼原因導致的,將來如何避免

1.3 監控系統是否存在疏漏,將來如何避免

1.4 是否有違規變更、釋出,將來如何避免

小結

相信很多公司都有類似的制度,DBA一族加油。

如果有哪些寫得不對或者不夠完善,也感謝指出。

小象Pi吉(PostgreSQL) 和 大象吉Pi(GPDB) 預祝大夥新年快樂。


相關文章