Могут ли 2 сервера совместно использовать одну и ту же ocfs2 FS через NFS?
Проблема заключается в следующем: у меня есть 2 сервера, на которых установлена FS как ocfs2:
root [server01]% mount | grep ocfs2
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/sddlmam1 on /share type ocfs2 (rw,_netdev,datavolume,heartbeat=local)
а также
root [server02]% mount | grep ocfs2
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/sddlmam1 on /share type ocfs2 (rw,_netdev,datavolume,heartbeat=local)
И оба совместно используют эту FS по протоколу NFS:
root [server01]% cat /etc/exports
/share *(rw,sync,no_root_squash)
а также
root [server02]% cat /etc/exports
/share *(rw,sync,no_root_squash)
Конфигурация OCFS2 выглядит нормально:
root [server01]% cat /etc/ocfs2/cluster.conf
cluster:
node_count = 2
name = ocfs2
node:
number = 0
cluster = ocfs2
ip_port = 7778
ip_address = 10.1.1.2
name = server01
node:
number = 1
cluster = ocfs2
ip_port = 7778
ip_address = 10.1.1.3
name = server02
root [server02]% cat /etc/ocfs2/cluster.conf
cluster:
node_count = 2
name = ocfs2
node:
number = 0
cluster = ocfs2
ip_port = 7778
ip_address = 10.1.1.2
name = server01
node:
number = 1
cluster = ocfs2
ip_port = 7778
ip_address = 10.1.1.3
name = server02
Эти серверы сгруппированы и сбалансированы:
root [client01]% nslookup servercluster
Server: 10.108.1.1
Address: 10.108.1.1#53
servercluster.domain.com canonical name = servercluster.domain.com.
Name: servercluster.domain.com
Address: 10.1.1.2
Name: servercluster.domain.com
Address: 10.1.1.3
Name: servercluster.domain.com
Address: 10.1.1.4
root [client01]% mount | grep servercluster
servercluster:/share on /share type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.1.1.5,local_lock=none,addr=10.1.1.2)
А также
root [client02]% nslookup servercluster
Server: 10.108.1.1
Address: 10.108.1.1#53
servercluster.domain.com canonical name = servercluster.domain.com.
Name: servercluster.domain.com
Address: 10.1.1.2
Name: servercluster.domain.com
Address: 10.1.1.3
Name: servercluster.domain.com
Address: 10.1.1.4
root [client02]% mount | grep servercluster
servercluster:/share on /share type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.1.1.6,local_lock=none,addr=10.1.1.3)
На сервере server01 произошел сбой, и он сообщил об ошибках NFS:
dracut.log
Info: Not stripping '/tmp/initramfs.6SdU0W/lib/modules/3.8.13-118.16.4.el6uek.x86_64/kernel/fs/nfsd/nfsd.ko', because module signature appended.
Сообщения:
Dec 8 02:18:19 server01 kernel: NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
Dec 8 02:18:19 server01 kernel: NFSD: starting 90-second grace period (net ffffffff81983940)
У меня такой вопрос: возможно ли, что ошибки происходят из-за того, что одна и та же FS делится между двумя разными серверами через NFS?
1 ответ
Не должно быть никакого повреждения в базовой файловой системе OCFS2, поскольку она сама обрабатывает блокировку.
Очевидно, что нет никакой координации между двумя серверами NFS, поэтому вы можете столкнуться с ситуацией, когда один клиент отправляет обновление в существующий файл, и в то же время другой клиент делает то же самое - обычно данные второго клиента немедленно перезаписывают обновление первого клиента, с возможной задержкой, так как файл будет временно открыт, пока первый клиент выполняет его запись, но, по крайней мере, вы не должны видеть никакого фактического повреждения.