pxc接點(diǎn)掛掉同步問題
老師介紹了pxc接點(diǎn)如果有3個(gè),因?yàn)樾枰獢?shù)據(jù)強(qiáng)一致性。假如其中一個(gè)接點(diǎn)數(shù)據(jù)寫不進(jìn)去的話,這個(gè)寫入操作就失敗了。
那么問題來了。假如這3個(gè)接點(diǎn)當(dāng)中有一個(gè)掛掉了。怎么辦,這個(gè)掛的接點(diǎn)就寫不進(jìn)去。是不是會(huì)導(dǎo)致所有的寫入操作不管在那個(gè)接點(diǎn)都不能執(zhí)行了?
2018-05-27
同學(xué)你好,PXC集群只有在超過一半數(shù)量的節(jié)點(diǎn)宕機(jī),集群才會(huì)不可用,這是為了避免異地機(jī)房部署PXC集群,因?yàn)榫W(wǎng)絡(luò)故障,導(dǎo)致一個(gè)PXC集群分裂成兩個(gè)集群。所以說掛掉一兩個(gè)節(jié)點(diǎn)沒什么問題,只要不超過一半的節(jié)點(diǎn)就行。
2019-12-22
給樓上的幾位朋友的一點(diǎn)點(diǎn)心得
#? ?場(chǎng)景:5個(gè)宕機(jī)的節(jié)點(diǎn)宕掉那一瞬間的數(shù)據(jù)分別為ABCDE 這5個(gè)順序的版本 A是最老的版本 E是最新的版本? ?第一個(gè)節(jié)點(diǎn)是根節(jié)點(diǎn)
#? ?實(shí)驗(yàn):?jiǎn)?dòng)第一個(gè)節(jié)點(diǎn)(數(shù)據(jù)版本為A的節(jié)點(diǎn))
# ? It may not be safe to bootstrap the cluster from this node. It was not the last one to leave the cluster and may not contain all the updates. To force cluster bootstrap with this node, edit the grastate.dat file manually and set safe_to_bootstrap to 1
# ? 大概意思是說:從這個(gè)節(jié)點(diǎn)啟動(dòng)可能不安全,因?yàn)樗皇亲詈笠粋€(gè)離開集群環(huán)境的,可能不包含最新的更新.若要強(qiáng)制使用這個(gè)節(jié)點(diǎn)啟動(dòng)集群,請(qǐng)修改grastate.bat文件,將safe_to_boostrap設(shè)置為1
# ? 啟動(dòng)第二個(gè)節(jié)點(diǎn)(我加入的那個(gè)節(jié)點(diǎn)還沒啟動(dòng)呢,我不著急啟動(dòng))? 無法與集群建立連接
# PS:五個(gè)節(jié)點(diǎn)的集群環(huán)境均為PXC,第二三四五個(gè)節(jié)點(diǎn)的加入的節(jié)點(diǎn)都是第一個(gè)幾點(diǎn)
# ? 啟動(dòng)第N個(gè)節(jié)點(diǎn)(非開始節(jié)點(diǎn)) 與第二個(gè)同樣
# 現(xiàn)狀:所有的節(jié)點(diǎn)都宕機(jī)了,根節(jié)點(diǎn)不是最新節(jié)點(diǎn)無法啟動(dòng),其他節(jié)點(diǎn)因?yàn)楦?jié)點(diǎn)未啟動(dòng)而不能啟動(dòng),該怎么處理呢?
#? ?猜想:嘗試上面所述的刪除grastate.dat文件再重第一個(gè)節(jié)點(diǎn)開始啟動(dòng)
# ? rm -rf /var/lib/docker/volumes/mysql1-v/_data/grastate.dat
# ? rm -rf /var/lib/docker/volumes/mysql2-v/_data/grastate.dat
# ? rm -rf /var/lib/docker/volumes/mysql3-v/_data/grastate.dat
# ? rm -rf /var/lib/docker/volumes/mysql4-v/_data/grastate.dat
# ? rm -rf /var/lib/docker/volumes/mysql5-v/_data/grastate.dat
# ? 啟動(dòng)第一個(gè)節(jié)點(diǎn) 我們發(fā)現(xiàn)啟動(dòng)成功了,但是數(shù)據(jù)只保留了這個(gè)節(jié)點(diǎn)宕機(jī)時(shí)的數(shù)據(jù)
# ? 啟動(dòng)第二個(gè)節(jié)點(diǎn) 數(shù)據(jù)被同步成了第一個(gè)節(jié)點(diǎn)的數(shù)據(jù)
# ? 啟動(dòng)第N個(gè)節(jié)點(diǎn) 數(shù)據(jù)被同步成了第一個(gè)節(jié)點(diǎn)的數(shù)據(jù)
# 結(jié)論:當(dāng)所有節(jié)點(diǎn)都宕機(jī)時(shí),如果最后一個(gè)宕機(jī)的不是根節(jié)點(diǎn),那么直接刪除grastate.dat文件并重啟容器的話,數(shù)據(jù)會(huì)丟失,如果最后一個(gè)宕機(jī)的是根節(jié)點(diǎn),那么數(shù)據(jù)應(yīng)該沒問題
# 目標(biāo):無論最后一個(gè)離開集群的節(jié)點(diǎn)是否是根節(jié)點(diǎn),我們都希望能夠保存最新版的數(shù)據(jù)并且重啟集群
# 方案:個(gè)人方案原理如下
確定最后一個(gè)宕機(jī)的節(jié)點(diǎn)并讓它成為根節(jié)點(diǎn)重啟,再運(yùn)行其他普通節(jié)點(diǎn)
# 問題:1.我們應(yīng)該如何得知最后一個(gè)宕機(jī)的節(jié)點(diǎn)?
# 這個(gè)方法應(yīng)該不少 比如使用haproxy負(fù)載均衡頁(yè)面中的失去連接時(shí)間來看? 失去連接時(shí)間最短的即是最后離開節(jié)點(diǎn)的
# ? 2.我們應(yīng)該如何指定這個(gè)節(jié)點(diǎn)從普通節(jié)點(diǎn)變?yōu)楦?jié)點(diǎn)?
# docker好像不支持創(chuàng)建容器后再追加或者修改配置 那么我們可以刪除所有卷中的grastate.dat文件,重新創(chuàng)建并運(yùn)行容器即可
2019-09-28
上面的同學(xué)說的問題,我也感到很困惑。
按照PXC強(qiáng)一致性的說法,只要存在一個(gè)節(jié)點(diǎn)無法同步,那么操作就會(huì)無法執(zhí)行,會(huì)造成整個(gè)集群的癱瘓。
2019-03-15
你說的課程我都已經(jīng)擁有了。不過就強(qiáng)一致性的問題。我有點(diǎn)萌。不是只要一個(gè)節(jié)點(diǎn)數(shù)據(jù)同步不進(jìn)去的話就操作失敗。那么down掉一個(gè)節(jié)點(diǎn)后,即使在其他節(jié)點(diǎn)能響應(yīng)但也保持不了數(shù)據(jù)的一致性啊。