真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

”MySQL官方驅(qū)動(dòng)“主從分離的主從分離-創(chuàng)新互聯(lián)

假如你日后的工作,需要快速實(shí)現(xiàn)MySQL的讀寫分離功能,你一定會(huì)想起這篇文章。如果你再次回到這里,證明你已經(jīng)迫切需要一個(gè)簡(jiǎn)單快捷的解決方案了--那就是MySQL官方驅(qū)動(dòng)層實(shí)現(xiàn)的讀寫分離,偏小眾,但很有效。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括白水網(wǎng)站建設(shè)、白水網(wǎng)站制作、白水網(wǎng)頁(yè)制作以及白水網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,白水網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到白水省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

JDBC驅(qū)動(dòng)

我們經(jīng)常使用的MySQL驅(qū)動(dòng)jar包,其實(shí)默認(rèn)有非常棒的功能,那就是主從分離和HA。如果你只是需要一個(gè)主從分離、failover的功能,不要sharding。一個(gè)驅(qū)動(dòng)就夠了,不需要引入什么中間層。

這個(gè)東西就是Replication協(xié)議。Mysql JDBC Connector在5.1.X版本之后增加了這些功能,以支持“multi-host”集群拓?fù)涞脑L問(wèn)范式。這個(gè)功能是在驅(qū)動(dòng)層實(shí)現(xiàn)的,而既然是驅(qū)動(dòng)層,那就不可避免有一些驅(qū)動(dòng)層的問(wèn)題。

我們平常的jdbc連接是這樣

jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8?復(fù)制代碼

而經(jīng)過(guò)協(xié)議改造后的jdbc連接,長(zhǎng)得要長(zhǎng)一些、大一些!

jdbc:mysql:replication://127.0.0.1:3306,127.0.0.1:3307,127.0.0.1:3308/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=false&loadBalanceStrategy=random?復(fù)制代碼

當(dāng)然,也可以有ipv6的寫法,更加直觀

jdbc:mysql://address=(type=master)(host=master1host),address=(type=master)(host=master2host),address=(type=slave)(host=slave1host)/db?復(fù)制代碼

8.0的文檔看這里:?dev.mysql.com/doc/connect…?說(shuō)明:

協(xié)議的第一個(gè)連接,表示主庫(kù)Master?后面的一堆連接,表示從庫(kù)Slave,當(dāng)然可以有多個(gè) 當(dāng)你把Master連接也放在后面的一堆里,那么它也擁有了“讀庫(kù)“的屬性了 后面有一堆參數(shù),來(lái)控制這所有連接,到底要如何相處

這樣,所謂的主從分離功能,只要配置好這個(gè)連接串,就枯木逢春了。

代碼層

首先你要改驅(qū)動(dòng)類,再也不是Driver了,而是這個(gè)

com.mysql.jdbc.ReplicationDriver?復(fù)制代碼

這種情況下 DataSource.getConnection() 獲取的連接,實(shí)際上是ReplicationConnection,這個(gè)連接是虛擬的,和真實(shí)的數(shù)據(jù)庫(kù)連接是個(gè)1對(duì)多的關(guān)系,所以記得給每一個(gè)MySQL都做上相應(yīng)的機(jī)器授權(quán)。

那么如何來(lái)區(qū)別本次請(qǐng)求是讀是寫呢?靠的其實(shí)是Connection中的readonly屬性,這個(gè)屬性是通過(guò)請(qǐng)求header中的“readonly”傳遞的。所以如果請(qǐng)求中有寫入操作,這整個(gè)的事務(wù)就一定是readonly=false的。

對(duì)于Spring來(lái)說(shuō),就可以使用@Transactional注解來(lái)控制這個(gè)屬性了。一個(gè)事務(wù)不可能跨兩個(gè)連接,所以是讀是寫,有最高層決定。

以下代碼片段展示了你應(yīng)該配置的一些元素,沒(méi)錯(cuò),就是注解。

public?interface?UserManager?{?????public?UserDO?get(int?id);?????public?void?insert(UserDO?user);?????public?void?update(int?id);?}?復(fù)制代碼
@Component?public?class?UserManagerImpl?implements?UserManager{?????@Autowired?????private?UserDao?userDao;?????...?????@Override?????@Transactional(readOnly?=?false,propagation?=?Propagation.REQUIRED)?????public?void?insert(UserDO?user)?{?????????this.userDao.insert(user);?????}?}?復(fù)制代碼

是不是很簡(jiǎn)單?等等,別高興太早。

參數(shù)

不要覺(jué)得是官方驅(qū)動(dòng),就可以任性的用。這套jdbc驅(qū)動(dòng)的參數(shù)還是非常豐富的,學(xué)習(xí)的代價(jià)也就高了些。在一些小流量下運(yùn)行的很好,但在高并發(fā)環(huán)境下會(huì)頻繁發(fā)生問(wèn)題。這里只挑最重要的說(shuō)下。

一個(gè)虛擬連接,對(duì)應(yīng)著一個(gè)真正的主庫(kù)連接和多個(gè)從庫(kù)連接。對(duì)于主機(jī)的存活和重新上線,我們要考慮三種情況:

  • Master都死掉了

  • Slave都死掉了

  • Master、Slave全都死掉了

無(wú)論哪種情況,MySQL驅(qū)動(dòng)都表現(xiàn)出一些奇怪的行為,默認(rèn)參數(shù)是不好使的。

你可能以為驅(qū)動(dòng)也就是管理一下幾個(gè)連接而已,但情況比這復(fù)雜的多。首先給張圖看下這個(gè)復(fù)雜的關(guān)系。

1、readFromMasterWhenNoSlaves?當(dāng)所有的salve死掉后,此參數(shù)用來(lái)控制主庫(kù)是否參與讀。如果從庫(kù)的流量很大,配置此參數(shù)對(duì)主庫(kù)有很大風(fēng)險(xiǎn);但如果你關(guān)掉,請(qǐng)求則會(huì)快速失敗。 2、loadBalanceStrategy?策略用來(lái)指定從庫(kù)的輪詢規(guī)則。有輪詢,也有權(quán)重,也可以指定具體的策略實(shí)現(xiàn)。當(dāng)你維護(hù)或者遷移某個(gè)實(shí)例時(shí),先置空流量,這會(huì)非常有用。或許,你會(huì)給某DB一個(gè)預(yù)熱的可能。 3、allowMasterDownConnections?如果主機(jī)當(dāng)機(jī),當(dāng)連接池獲取新的連接時(shí),會(huì)失敗。但如果打開此參數(shù),則虛擬連接只會(huì)創(chuàng)建Slave連接組,整個(gè)連接會(huì)降級(jí)為只讀,不論你設(shè)置了什么注解。 4、allowSlavesDownConnections?如果沒(méi)有只讀庫(kù)了,是否允許創(chuàng)建新的連接。在這種情況下,此參數(shù)開啟,讀操作有很大可能會(huì)失敗。 5、retriesAllDown?當(dāng)所有的hosts都無(wú)法連接時(shí)重試的大次數(shù)(依次循環(huán)重試),默認(rèn)為120。重試次數(shù)達(dá)到閾值仍然無(wú)法獲取有效鏈接,將會(huì)拋出SQLException。 6、autoReconnect?實(shí)例既然有下線、就有上線。上線以后要能夠繼續(xù)服務(wù),此參數(shù)用來(lái)控制斷線情況下自動(dòng)重連而不拋出異常。這會(huì)破壞事務(wù)的完整性,但還是默認(rèn)開啟。

然而MySQL驅(qū)動(dòng)提供了更加豐富的參數(shù)來(lái)控制這個(gè)過(guò)程,如果你的業(yè)務(wù)要求比較苛刻,這些參數(shù)可能要測(cè)個(gè)遍才會(huì)放心。 但大多數(shù)情況下,它運(yùn)行的很好。

管理

僅有配置參數(shù),此協(xié)議就算一個(gè)半成品而已。所幸,此驅(qū)動(dòng)提供了JMX管理的方式,可以基于其做一些配置變更之類的功能。市面上并沒(méi)有這種配置管理工具,可能還是因?yàn)樗”娏恕?/p>

?public?abstract?void?addSlaveHost(String?groupFilter,?String?host)?throws?SQLException;??public?abstract?void?removeSlaveHost(String?groupFilter,?String?host)?throws?SQLException;??public?abstract?void?promoteSlaveToMaster(String?groupFilter,?String?host)?throws?SQLException;??public?abstract?void?removeMasterHost(String?groupFilter,?String?host)?throws?SQLException;??public?abstract?String?getMasterHostsList(String?group);??public?abstract?String?getSlaveHostsList(String?group);??public?abstract?String?getRegisteredConnectionGroups();??public?abstract?int?getActiveMasterHostCount(String?group);??public?abstract?int?getActiveSlaveHostCount(String?group);??public?abstract?int?getSlavePromotionCount(String?group);??public?abstract?long?getTotalLogicalConnectionCount(String?group);??public?abstract?long?getActiveLogicalConnectionCount(String?group);?復(fù)制代碼

我們順便提一下阿里的德魯伊數(shù)據(jù)庫(kù)連接池。如圖,某些功能,只支持默認(rèn)的單連接,對(duì)multi-host支持還是有限。

”MySQL官方驅(qū)動(dòng)“主從分離的主從分離

結(jié)尾

MySQL 5.1.x官方驅(qū)動(dòng)出了這么個(gè)東西以后,其實(shí)宣告了很多小公司自研的某些小中間件的死亡。翻來(lái)服務(wù),改寫JDBC,不過(guò)就是為了管理個(gè)連接集合。

本文對(duì)象為專注基礎(chǔ)設(shè)施研發(fā)的同學(xué)。有人看到的,不過(guò)是一堆參數(shù)而已;而真正去深入使用的人,會(huì)感到背脊通徹的寒冷。

當(dāng)它小眾時(shí),你對(duì)它不屑一顧。然而當(dāng)你一旦采用了某種方案,你卻希望全世界都是關(guān)于它的描寫。人生從來(lái)就沒(méi)那么幸運(yùn),很多坑,還需要自己來(lái)踩。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


標(biāo)題名稱:”MySQL官方驅(qū)動(dòng)“主從分離的主從分離-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/dcsecp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部