一次網站遷移故障及分析
公司運營專案遷移,這個專案最重要的就是充值和讓玩家能玩遊戲,還有後臺統計,就是類似支付寶這樣的第三方平臺的支付工具,由於涉及的到錢,所以上個月就做好遷移的準備,將程式碼和資料庫都已轉移完畢,並提交運營那邊測試,最後跟運營討論說凌晨0點充值的人最少,開始切域名,考慮到切換DNS後無法立即生效,所以做了301跳轉,整個遷移流程是:
1.暫停原伺服器資料庫,匯出相關資料庫
2.將匯出的資料庫同步到杭州xx伺服器上面並匯入到資料庫中
3.切換域名指向到xx伺服器
4.原伺服器上面做301跳轉到xx伺服器(保證不寫入新資料到原運營伺服器上面)
5.運營協助測試新伺服器資料是否正常
按照上面的流程操作,結果出現了很多意想不到的問題,因為這次遷移的LNMP環境不同,特別的是資料庫,以前用的是Ver 14.14 Distrib 5.1.60,新伺服器用的是Ver 14.14 Distrib 5.6.16,還有一個mysql的主輔同步,做了過濾,只同步了某些表,當時凌晨遷移,將最新的資料再次匯入新伺服器mysql,由於版本的問題,發現有個mysql儲存過程無法匯入,還有預設值問題,如下圖:預設值要改為”NULL”,不能是”無”,原mysql中還有些定時任務無法匯出,只能重新建立了。
好了,解決了上面的問題,重新做了mysql主輔同步和過濾,當時測試也是正常的,結果第二天早上8點半使用者流量過來了,網站都打不開了,首先檢視了php日誌,出現下面這個問題:
然後不斷的修改下面的引數,感覺調到2048後已經是臨界值了,因為這臺機器只有8G記憶體,max_children = 2048後發現記憶體基本滿了,在調高可能記憶體就爆了,當時調整php後發現可以短時間的正常訪問,功能也正常,但是過了10分鐘左右,又出現訪問很慢的問題,繼續看php日誌,還是上圖的提示,感覺這個不是php的問題,因為這個網站原伺服器沒有開啟這麼多php程式,但是執行正常,整個站的出口流量也不大。
綜上分析,發現應該是php連線mysql出現了堵塞,導致php程式一直在排隊,當新的請求過來後,由於其他的php程式都在排隊,只能在開啟新的php程式,php程式永遠提示繁忙,不夠用,要調整max_children值,於是就看mysql是不是有問題?
進mysql,show processlist檢視mysql的全部的執行緒,發現pay庫裡面有張uc_members表大量lock,
大量的鎖表,詢問開發這張表是使用者表,也就是使用者每次登入都要查詢這張表,這下終於找到原因了,就是php執行使用者登入的時候,要讀取mysql中這張uc_members表,每個使用者登入都要鎖表然後查詢使用者登入資訊,導致這張表一直處於被鎖死的狀態,隨著使用者請求越來越多,php程式也增多,一直等待mysql返回使用者登入資訊,但是mysql一直處於鎖表狀態,結果就導致了這種現象,php程式卡死,使用者無法登入,網站最後也打不開。
檢視這張表用的是MyISAM的引擎:
MyISAM引擎是表級鎖,更換為InnoDB引擎為行級鎖,再次show processlist發現鎖表大量減少,頁面可以正常開啟,使用者也可以登入了,問題解決。
InnoDB與Myisam的六大區別:
參考:http://www.ha97.com/4197.html
總結:
已經建議開發部門,以後開發程式不要再mysql裡面寫定時任務,因為mysql裡面寫定時任務,執行成功與否很難看到,遷移mysql的時候也會很麻煩,可以寫crontab讓php去執行定時任務即可,還有儲存過程,如果一定需要在mysql裡面寫儲存過程,儘量要規範,防止以後遷移由於mysql版本問題導致很多奇怪的現象。
出現這次故障主要是事先沒有做壓力測試,只是做了網站基本功能的測試,下次遷移網站之前一定要做好壓力測試,使用者登入測試及回滾方案,一個完整的遷移流程應該是:
1.暫停原伺服器資料庫,匯出相關資料庫
2.將匯出的資料庫同步到杭州xx伺服器上面並匯入到資料庫中
3.對xx伺服器進行壓力測試及使用者登入測試
4.回滾方案,出現問題及時回滾到原伺服器,保證使用者正常訪問
5.切換域名指向到xx伺服器
6.原伺服器上面做301跳轉到xx伺服器(保證不寫入新資料到原運營伺服器上面)
7.運營協助測試新伺服器資料是否正常
相關文章
- Zookeeper的一次遷移故障
- sap網站遷移後網站
- 故障分析 | MySQL 遷移後 timestamp 列 cannot be nullMySqlNull
- Web 網站 故障常用分析命令Web網站
- 3.6遷移故障恢復
- 一次dg資料檔案及archive log遷移Hive
- 網站遷移SSL證書該如何操作網站
- Linux+PHP+MySql網站遷移配置LinuxPHPMySql網站
- expdp的一次遷移
- 網站遷移更換伺服器的方法網站伺服器
- 一次expdp/impdp遷移案例
- 記一次資料遷移
- Taro原理分析、遷移指南及開發注意事項
- 查詢行遷移及消除行遷移(chained rows)AI
- 記一次網站被攻擊 WebShell 分析網站Webshell
- 記一次NAS故障分析(ZFS NFS)NFS
- 解如何避免雲遷移故障及其預防方法
- 網站分析:未來是移動的天下?網站
- 乾貨 | 攜程一次Redis遷移容器後Slowlog“異常”分析Redis
- 記一次Ubuntu網路故障Ubuntu
- Karmada跨叢集優雅故障遷移特性解析
- 一次DG故障診斷過程分析
- 記一次 GitLab 的遷移過程Gitlab
- 記一次遷移和效能最佳化
- 一次艱難的oracle資料遷移Oracle
- hexo部落格同步管理及遷移Hexo
- 網站進行伺服器遷移前應做好哪些準備?網站伺服器
- linux伺服器網站到windows伺服器的一次遷移Linux伺服器網站Windows
- 記一次網路故障排障
- 記一次 .NET 某遊戲網站 CPU爆高分析遊戲網站
- Facebook釋出商用版移動應用及網站網站
- 記錄一次XTTS遷移碰到的問題TTS
- 最近的一次ASM diskgroup線上遷移記錄ASM
- Python 工程管理及 virtualenv 的遷移Python
- MySQL與SQLite的區別及遷移MySqlSQLite
- sqoop安裝及資料遷移OOP
- 資料庫的升級及遷移資料庫
- 中小型網站架構分析及優化網站架構優化