最近使用Percona MySQL 5.7版本遇到的坑

監(jiān)控DB由于使用的TokuDB引擎,因此選擇使用Percona MySQL 5.7版本,在使用過程中遇到了比較多的坑,在這里做一下簡單的記錄,希望對廣大DBA有幫助。

load文件飆升導(dǎo)致的DB雪崩

在上層機器(mqproxy)出問題的時候,會導(dǎo)致load文件飆升,導(dǎo)致監(jiān)控DB大量的load線程堆積,造成監(jiān)控DB雪崩,比如2月15號的一次異常:

DB雪崩的時候有大量的load線程堆積,并且機器的寫入性能之前下降,直到超過最大連接數(shù),業(yè)務(wù)無法訪問。

這種場景的解決辦法有兩個:

1、業(yè)務(wù)上層進行控制,對DB進行保護,控制load的線程數(shù)或者文件數(shù)

2、DB啟用線程池,控制DB并發(fā)load的線程數(shù)

目前DB已經(jīng)完成2的改造,1的改造也正在進行中。

使用線程池內(nèi)存問題

出于對DB做保護,我們準備在監(jiān)控DB啟用線程池功能。為了安全起見,先在從機啟用,并進行持續(xù)觀察,在觀察的過程中發(fā)現(xiàn)在啟用了線程池以后,內(nèi)存飆升了8G左右,如下圖:

不但啟用線程池后內(nèi)存飆升了8G左右,而且內(nèi)存還在持續(xù)增長,很明顯啟用線程池后存在內(nèi)存泄漏了。

這個問題在網(wǎng)上也有不少的人遇到,確認是percona的bug導(dǎo)致(https://jira.percona.com/browse/PS-3734),只有開啟Performance_Schema和ThreadPool的時候才會出現(xiàn),解決辦法是關(guān)閉Performance_Schema即可,具體操作方法是在配置文件添

加performance_schema=off

然后重啟MySQL就OK。下面是關(guān)閉PS后的內(nèi)存使用情況對比:

線程池啟用后的高可用探測問題

在描述問題之前,先來描述一下線程池是如何分配連接和控制的:

線程池會根據(jù)參數(shù)thread_pool_size的大小分成若干的group,每個group各自維護客戶端發(fā)起的連接,當客戶端發(fā)起連接到MySQL的時候,MySQL會跟進連接的線程id(thread_id)對thread_pool_size進行去模,從而落到對應(yīng)的group。thread_pool_oversubscribe參數(shù)控制每個group的最大并發(fā)線程數(shù),每個group的最大并發(fā)線程數(shù)為thread_pool_oversubscribe+1個,若對應(yīng)的group達到了最大的并發(fā)線程數(shù),則對應(yīng)的連接就需要等待。

在線上配置了幾組機器使用線程池后,發(fā)現(xiàn)有1組機器發(fā)生自動切換,排查了機器的負載、MySQL錯誤日志、操作系統(tǒng)日志、高可用日志以后,確定是由于啟用線程池問題導(dǎo)致,具體的原因描述如下:

啟用線程池以后,相當于限制了MySQL的并發(fā)線程數(shù),當達到最大線程數(shù)的時候,其他的線程需要等待,新連接也會卡在連接驗證那一步,這時候會造成撥測程序連接MySQL超時,撥測程序連接實例超時后,就會認為master已經(jīng)出現(xiàn)問題,從而啟動自動切換的操作,將業(yè)務(wù)切換到從機。

這種情況有兩種解決辦法:

1、啟用MySQL的旁路管理端口,監(jiān)控和高可用相關(guān)直接使用MySQL的旁路管理端口

? ? 具體做法為是在my.cnf中添加如下配置后重啟,就可以通過旁路端口登錄MySQL了,不受線程池最大線程數(shù)的影響:

?? ?extra_max_connections = 8

?? ?extra_port = 33333

? ? 備注:建議啟用線程池后,這個也添加上,方便緊急情況下進行故障處理。

2、修改高可用探測腳本,將達到線程池最大活動線程數(shù)返回的錯誤做異常處理,類似于當作超過最大連接數(shù)的場景(備注:超過最大連接數(shù)只告警,不進行自動切換)

監(jiān)控這邊選擇了解決方法2,因為這種方式改動量最小。


簡單總結(jié)

以上就是最近使用Percona MySQL時候遇到的幾個問題,通過這幾個問題概括出幾個需要廣大DBA們注意的事情:

1、上層應(yīng)該對DB進行保護,防止DB出現(xiàn)雪崩

2、在上新功能的時候,一定記得灰度、灰度、灰度

3、灰度的時候,注意密切觀察線上DB的性能指標(內(nèi)存、性能、IO以及其他和變更相關(guān)的指標)

4、綜合考慮各種解決方案,選擇最適合的方案

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容