MySQL挑戰(zhàn)10萬(wàn)條連接數(shù)

2021-02-10    分類: 網(wǎng)站建設(shè)

在這篇文章中,我想探索一種與MySQL建立100,000個(gè)連接的方法。不限于空閑連接,還有執(zhí)行查詢功能的連接。

你可能會(huì)問(wèn),使用MySQL的時(shí)候真的有必要建立100,000個(gè)連接嗎?雖然看起來(lái)有點(diǎn)過(guò)于追求極致,我還是在客戶部署的時(shí)候看到很多不同的設(shè)計(jì)方案。有的部署了應(yīng)用程序連接池,每一個(gè)連接池中有100個(gè)應(yīng)用服務(wù)和1000個(gè)連接。有的應(yīng)用程序使用了一種很糟糕的技術(shù),“在查詢慢時(shí)重連或重用”。這有可能會(huì)導(dǎo)致雪球效應(yīng),并在幾秒鐘內(nèi)建立數(shù)千個(gè)MySQL連接。

所以現(xiàn)在我想設(shè)置一個(gè)超出預(yù)期的目標(biāo),看看能否實(shí)現(xiàn)。


配置

為此我將使用以下硬件配置:

由packet.net提供的裸機(jī)服務(wù)器,實(shí)例大?。篶2.medium.x86

物理內(nèi)核 @ 2.2 GHz (1 X AMD EPYC 7401P)

內(nèi)存: 64 GB of ECC RAM

磁盤(pán): INTEL? SSD DC S4500, 480GB

這是一個(gè)服務(wù)器級(jí)的 SATA SSD。

我們將使用到5臺(tái)主機(jī),下面作出解釋,一個(gè)用于MySQL服務(wù)器的主機(jī),以及四個(gè)用于客戶端連接的主機(jī)。

在服務(wù)器上,我將使用帶有線程池插件的Percona Server for MySQL 8.0.13-4。這個(gè)插件可以支持?jǐn)?shù)千個(gè)數(shù)據(jù)庫(kù)連接。


初始化服務(wù)器設(shè)置

網(wǎng)絡(luò)設(shè)置(Ansible格式):

這些是推薦用于10Gb網(wǎng)絡(luò)和高并發(fā)工作負(fù)載的典型設(shè)置。

systemd限制設(shè)置:

還有my.cnf文件中MySQL相關(guān)設(shè)置:

客戶端使用sysbench 0.5版本而不是1.0.x版本,原因我們將在下面解釋。

工作負(fù)載配置


第一步 10,000連接數(shù)

這一步很簡(jiǎn)單,沒(méi)有太多的事情需要處理。我們可以只用一個(gè)客戶端實(shí)現(xiàn),但是你有可能會(huì)遇到下面的錯(cuò)誤:

這個(gè)是由于打開(kāi)文件數(shù)限制引起的,也叫做TCP/IP套接字連接限制??梢栽诳蛻舳嗽O(shè)置 ulimit -n 100000 來(lái)解決。

我們能觀察到的:


第二步 25,000連接數(shù)

使用25,000個(gè)連接的時(shí)候,在MySQL端會(huì)看到錯(cuò)誤信息:

如果你查找這個(gè)錯(cuò)誤的信息的話,你可能會(huì)看到這篇文章:

https://www.percona.com/blog/2013/02/04/cant_create_thread_errno_11/

但是這并不能解決我們的問(wèn)題,因?yàn)槲覀円呀?jīng)把限制設(shè)置的足夠高了:

我們是從這里開(kāi)始使用線程池功能的:https://www.percona.com/doc/percona-server/8.0/performance/threadpool.html

在my.cnf中增加:

并重啟 Percona 服務(wù)器。

打印結(jié)果:

現(xiàn)在還是相同的吞吐量,但是實(shí)際上95%的響應(yīng)時(shí)間已經(jīng)從3690毫秒優(yōu)化到979毫秒(由于使用了線程池)。


第三步 50,000連接數(shù)

這是目前我們遇到的大的挑戰(zhàn)。首先,在嘗試從sysbench中獲取50,000個(gè)連接的時(shí)候遇到了以下錯(cuò)誤:

Error(99)是一個(gè)很隱蔽的錯(cuò)誤,它表示:無(wú)法分配請(qǐng)求地址。

它是由應(yīng)用程序可以打開(kāi)的端口限制所觸發(fā),我的操作系統(tǒng)默認(rèn)情況下是:

這表示有28231個(gè)端口可用(60999減32768),或者說(shuō)是與給定IP地址所能建立的TCP連接的端口數(shù)限制。

你可以在客戶端和服務(wù)端上使用一個(gè)更大的范圍來(lái)擴(kuò)展這些端口。

這給我們提拱了61000個(gè)連接,但是已經(jīng)非常接近一個(gè)IP地址的連接限制了(大端口號(hào)65535)。關(guān)鍵點(diǎn)在于,如果我們想要更多的連接數(shù),那么則需要為MySQL服務(wù)器分配更多的IP地址。為了實(shí)現(xiàn)100,000連接數(shù),我將在運(yùn)行MySQL的服務(wù)器上使用兩個(gè)IP地址。

在整理出端口范圍后,sysbench又拋出了以下問(wèn)題

這是sysbench的內(nèi)存分配問(wèn)題(即lua子系統(tǒng))。Sysbench只能為32,351個(gè)連接分配內(nèi)存,這個(gè)問(wèn)題在sysbench 1.0.x版本中尤為嚴(yán)重。


Sysbench 1.0.x的局限

Sysbench 1.0.x使用了一套不同的Lua JIT(Just In Time,即時(shí)編譯技術(shù)),甚至在連接數(shù)達(dá)到4000的時(shí)候就會(huì)產(chǎn)生內(nèi)存問(wèn)題,所以使用Sysbench 1.0.x想要超過(guò)4000連接數(shù)都是不可能的。

因此,與Percona Server相比,sysbench會(huì)更早達(dá)到連接數(shù)瓶頸。我們需要使用更多的sysbench客戶端來(lái)實(shí)現(xiàn)更多的連接。如果sysbench的連接上限是32,351,那么至少要使用4個(gè)sysbench客戶端才能達(dá)到100,000個(gè)連接。

我使用2臺(tái)服務(wù)器(每個(gè)服務(wù)器運(yùn)行單獨(dú)的sysbench)實(shí)現(xiàn)50,000個(gè)連接,每個(gè)sysbench上運(yùn)行25,000個(gè)線程。

每個(gè)sysbench上執(zhí)行結(jié)果如下:

然而同樣的吞吐量(總共 16794 * 2 = 33588 tps)的情況下,有95%的響應(yīng)時(shí)間都翻了一倍。這是可以預(yù)見(jiàn)的,因?yàn)橄啾扔?5,000個(gè)基準(zhǔn)測(cè)試連接,我們使用的連接數(shù)是原來(lái)的兩倍。


第三步 75,000連接數(shù)

我們將使用3個(gè)sysbench服務(wù)器來(lái)實(shí)現(xiàn)75,000個(gè)連接,每個(gè)服務(wù)器上運(yùn)行25,000個(gè)連接。

每個(gè)sysbench的運(yùn)行結(jié)果:


第四步 100,000連接數(shù)

實(shí)現(xiàn)連接數(shù)從75k到100k并沒(méi)有什么大的變化,我們只需要啟動(dòng)一個(gè)額外的服務(wù)器并啟動(dòng)sysbench就可以了。對(duì)于100,000個(gè)連接,我們需要四個(gè)sysbench服務(wù)器,每一個(gè)服務(wù)器顯示:

所以相同吞吐量(總共 8065 * 4 = 32260 tps)時(shí),有95%的相應(yīng)時(shí)間為3405ms。

一個(gè)很重要的點(diǎn)是:建立100k個(gè)連接并使用線程池,95%的響應(yīng)時(shí)間甚至比不帶線程池的10k個(gè)連接更快。線程池使得Percona Server更有效的管理資源并提供更快的響應(yīng)時(shí)間。


總結(jié)

MySQL實(shí)現(xiàn)10萬(wàn)連接數(shù)是完全可行的,而且我相信我們還可以更進(jìn)一步。這里有三個(gè)組件可以幫助我們實(shí)現(xiàn)目標(biāo):

  • Percona Server的線程池

  • 適當(dāng)調(diào)整網(wǎng)絡(luò)限制

  • 服務(wù)器主機(jī)使用多個(gè)IP地址(一個(gè)IP地址支持大約60k個(gè)連接)


附錄:my.cnf


分享題目:MySQL挑戰(zhàn)10萬(wàn)條連接數(shù)
當(dāng)前網(wǎng)址:http://www.muchs.cn/news/100250.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)站收錄外貿(mào)建站、小程序開(kāi)發(fā)網(wǎng)頁(yè)設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)