第一,先探討一個問題,一個寫IO的流程,什麼樣就算完成一次IO操做了。html
"Disk Caches,磁盤高速緩存。
將磁盤上的數據緩存在內存中,加速文件的讀寫。實際上,在通常狀況下,
read/write是隻跟緩存打交道的。(固然,存在特殊狀況。下面會說到。)
read就直接從緩存讀數據。若是要讀的數據還不在緩存中,則觸發一次讀盤操做,而後等待磁盤上的數據被更新到磁盤高速緩存中;
write也是直接寫到緩存裏去,而後就不用管了。後續內核會負責將數據寫回磁盤。
既然磁盤高速緩存提供了有利於提升讀寫效率的緩存機制,爲何又要使用O_DIRECT選項來繞開它呢?
通常狀況下,這樣作的應用程序會本身在用戶態維護一套更利於應用程序使用的專用的緩存機制,
用以取代內核提供的磁盤高速緩存這種通用的緩存機制。"
第二,GFS2使用了磁盤高速緩存了嗎?
GFS2像其它文件系統同樣是使用了高速緩存的。
2.5.2. VFS Tuning Options: Research and Experiment
Like all Linux file systems, GFS2 sits on top of a layer called the virtual file system (VFS). You can tune the VFS layer to improve underlying GFS2 performance by using the
sysctl
(8) command. For example, the values for
dirty_background_ratio
and
vfs_cache_pressure
may be adjusted depending on your situation. To fetch the current values, use the following commands:
#
# sysctl -n vm.dirty_background_ratiosysctl -n vm.vfs_cache_pressure
The following commands adjust the values:
#
# sysctl -w vm.dirty_background_ratio=20sysctl -w vm.vfs_cache_pressure=500
You can permanently change the values of these parameters by editing the
/etc/sysctl.conf
file.
綜合上面兩個問題,GFS2使用了高速緩存,當拔掉正在寫數據的機器的網線時,虛擬IP漂到其它機器上了。不過拔掉網線的機器仍然在寫數據,新接管的機器也在寫數據。
當從新插上網線後,兩個節點上的數據就不一致了。這只是分析的結論,須要測試驗證。
FYI:
寫的兩種方式:Write Through和Write back
對磁盤寫方式的查看方法:
# hdparm -W /dev/sda
/dev/sda:
write-caching = 1 (on)
# hdparm -W0 /dev/sda
/dev/sda:
setting drive write-caching to 0 (off)
write-caching = 0 (off)
# hdparm -W /dev/sda
/dev/sda:
write-caching = 0 (off)