服務器故障處理
機房公網網站流量出口達到上限,核心站點已經出現訪問緩慢、無法加載的現象
1.擴充流量
2.換機房,改變後端Web集群訪問地址,將一部分中等流量的站點服務器上的Nginx配置分發到B機房服務器,隨後更改DNS解析
有一套能實時查看所有域名流量,通過縱向(每臺服務器流量多少,當前HTTP並發多少)、橫向(每個服務器上運行了多少個域名、每個域名流量多少、域名訪問來源是什麽)做可視化展示的系統,監控Nginx主機上正在使用的域名、單機總流量、並發、單個域名流量等。
註意事項:
不碰核心站點,重要性不言而喻;
不碰小流量站點,因為遷移訪問量較小的站點需要遷移多個站點才能有冗余流量,明顯耽誤時間。
系統出現故障時
有誰在?別幾個人一起調試
#w
#last
之前發生了什麽?
#history
現在在運行的進程是啥?
#pstree -a
#ps -aux
監聽的網絡服務
$ netstat -nulp
$ netstat -nxlp
一般都分開運行這三個命令,不想一下子看到列出一大堆所有的服務
如果要顯示所有存在的連接,netstat 會比較慢, 你可以先用 ss 看一下總體情況
CPU 和內存
$ uptime
$ top
$ htop
還有剩余的CPU嗎? 服務器是幾核的? 是否有某些CPU核負載過多了?
服務器最大的負載來自什麽地方? 平均負載是多少?
IO 性能
$ vmstat 2 10
$ mpstat 2 10
$ dstat --top-io --top-bio,用它可以看到誰在進行 IO
檢查磁盤使用量:服務器硬盤是否已滿?
是否開啟了swap交換模式 (si/so)?
CPU被誰占用:系統進程? 用戶進程? 虛擬機?
應用故障
Apache & Nginx; 查找訪問和錯誤日誌, 直接找 5xx 錯誤, 再看看是否有 limit_zone 錯誤。
MySQL; 在mysql.log找錯誤消息,看看有沒有結構損壞的表, 是否有innodb修復進程在運行,是否有disk/index/query 問題.
PHP-FPM; 如果設定了 php-slow 日誌, 直接找錯誤信息 (php, mysql, memcache, …),如果沒設定,趕緊設定。
Varnish; 在varnishlog 和 varnishstat 裏, 檢查 hit/miss比. 看看配置信息裏是否遺漏了什麽規則,使最終用戶可以直接攻擊你的後端?
HA-Proxy; 後端的狀況如何?健康狀況檢查是否成功?是前端還是後端的隊列大小達到最大值了?
永遠不要對當前連接的服務器或者網絡設備接口進行修改
請務必為自己的操作準備一套恢復機制
利用工具對網絡設備配置進行自動化備份能在交換機無法工作時幫助大家在幾分鐘內部署好替代方案
在進行修改前對每個配置文件做好備份(.bak)
認真監控數據中心的每個方面,從室內溫度開始、到機架、再到服務器--另外,服務器進程檢查、正常運行時間檢查等等,並通過趨勢及圖形工具監控帶寬使用率、溫度、磁盤分區用量以及其它重要數據指標。
服務器故障處理