上次安裝了叢集後,一段時間沒有時間寫個測試文章(見 ),今天有空就寫了篇初級測試的文章,如果大家還想知道不同情況下postgres叢集的處理方法,可以留言給我!!!
先來類比下主從庫關閉,看看資料的同步情況:
1. 重啟主節點:
方式①:./pg_ctl stop -D ../data/
waiting for server to shut down............................................................... failed
pg_ctl: server does not shut down
HINT: The "-m fast" option immediately disconnects sessions rather than
waiting for session-initiated disconnection.
雖然顯示關閉失敗,但是串連資料庫操作已經不可用,並且顯示錯誤!!!
方式②./pg_ctl stop -D ../data/ -m fast
直接關閉資料庫,串連資料庫時,顯示沒有服務。
重啟主節點後,對叢集功能沒有影響
方式③:kill -9 8581 8582 8584 8585 8586 8587 8589 8597 8669
向其中一台從節點插入一條資料;
(這裡理論上是可讀,但是為了方便展示還是插入一條)
insert failed:ERROR: cannot execute INSERT in a read-only transaction
啟動主節點,插入一條資料,並驗證叢集功能:
叢集功能完好!
2. 關閉從節點
關閉方式①:./pg_ctl stop -D ../data_bac/ -m fast
插入主節點一條資料,再開啟從節點,查看資料是否同步。
資料同步成功。
關閉方式②:kill -9 19971 19972 19973 19974 19975 19976
插入二條資料後;正常啟動子節點,查看資料是否同步:
可以看到自己點意外死亡情況,重啟後會同步資料。
3. 在插入過程中殺死主節點
關閉方式①:./pg_ctl stop -D ../data_bac/ -m fast
用單線程方式,插入100000資料,並在中途按方式①,關閉主節點;重啟後查看主庫和從庫資料是否一致:
1. 當斷開後,查看兩個從庫的資料量都為5719
2. 重啟主要資料庫,查看資料量:
探索資料沒有丟失,為了驗證正確性,我們驗證10個線程每個線程100000並發時,沒有丟資料情況發生。
關閉方式②:kill -9 19971 19972 19973 19974 19975 19976
查看從庫資料量:
啟動主庫,查看主庫資料量:
可以發現主庫和從庫資料量不等,有人可能會說丟資料,先別下太早的結論,我們再來看下從庫資料量是否有變化:
我們可以認為,當主節點意外死亡時,主庫wal日誌還沒有發送到從庫主機,使得主從庫資料不同步,但是重啟主庫後,主庫會把沒有傳遞的wal日誌重發,再次同步資料。
上面是我類比的一些叢集會遇到的情況,目前只能想到這麼多,如果有建議可以留言。
【內容導航】 |
第1頁:類比叢集狀況 |
第2頁:處理資料能力 |