Eu quero configurar dois servidores VM (usando o libvirt com o CentOS 7) que compartilham o mesmo disco iSCSI. Comecei a investigar e deduzi que tinha que configurar um cluster com marcapasso e GFS2. Quando finalmente consegui que funcionasse, tentei o acesso simultâneo: cada servidor gravando em um arquivo, e ele foi interrompido até eu matar os processos.
Para imaginar o cenário, eu configurei três máquinas com o CentOS 7:
A máquina de cabine compartilha o disco iSCSI com iqn iqn.1992-04.local.storage.cabin
e está configurada para permitir que virt1 e virt2 se conectem.
Eu instalei o virt1 e o virt2 com os seguintes comandos:
yum install -y iscsi-initiator-utils pacemaker pcs fence-agents-all lvm2-cluster gfs2-utils
iscsiadm -m discovery -t st -p 172.20.20.5
iscsiadm -m node -T iqn.1992-04.local.storage.cabin -p 172.20.20.5 -l
lsblk # Shows the iSCSI disk mounted at /dev/sda
# Start setting up the cluster
systemctl enable --now pcsd
passwd hacluster # same password on both
firewall-cmd --add-service=high-availability --permanent
lvmconf --enable-cluster
Depois, configurei o cluster no servidor virt1:
# Create the cluster on both servers
pcs cluster auth virt1.storage.local virt2.storage.local
pcs cluster setup --name ha_cluster virt1.storage.local virt2.storage.local
pcs cluster start --all
pcs cluster enable --all
# Configure the STONITH
pcs cluster cib stonith_cfg
pcs cluster cib-push stonith_cfg
pcs -f stonith_cfg stonith create scsi-shooter fence_scsi devices="/dev/sda"
pcmk_host_list="virt1.storage.local virt2.storage.local"
pcmk_reboot_action="off" meta provides="unfencing" --force
pcs -f stonith_cfg property set stonith-enabled=true
pcs -f stonith_cfg property set stonith-action=reboot
pcs -f stonith_cfg property set stonith-timeout=120s
pcs cluster cib-push stonith_cfg
pcs stonith update scsi-shooter op monitor interval=120s
# Configure the Clustered LVM
pcs resource defaults resource-stickiness=200
pcs cluster cib dlm_cfg
pcs -f dlm_cfg resource create dlm ocf:pacemaker:controld op monitor interval=120s on-fail=fence clone interleave=true ordered=true
pcs -f dlm_cfg resource create clvmd ocf:heartbeat:clvm op monitor interval=120s on-fail=fence clone interleave=true ordered=true
pcs -f dlm_cfg constraint order start dlm-clone then clvmd-clone
pcs -f dlm_cfg constraint colocation add clvmd-clone with dlm-clone
pcs -f dlm_cfg property set no-quorum-policy=freeze
pcs cluster cib-push dlm_cfg
pcs resource show # Shows dlm-clone and clvmd-clone as started (I had to wait a few minutes)
Depois desses comandos, eu corri reboot
no virt1 e no virt2. Então, continuei no virt1:
# Configure the GFS2 filesystem
id="a"
pvcreate "/dev/sd${id}" # Create the physical volume
vgcreate -cy "vg${id}" "/dev/sd${id}" # Create the volume group
lvcreate -l100%FREE -n "lv${id}" "vg${id}" # Create the logical volume
mkfs.gfs2 -p lock_dlm -t "ha_cluster:fs${id}" -j 2 "/dev/vg${id}/lv${id}"
pcs resource create "gfs2_lun${id}" Filesystem device="/dev/vg${id}/lv${id}" directory="/mnt/lun${id}" fstype="gfs2" options="noatime,nodiratime" op monitor interval=10s on-fail=fence clone interleave=true
pcs constraint order start clvmd-clone then "gfs2_lun${id}-clone"
pcs constraint colocation add "gfs2_lun${id}-clone" with clvmd-clone
Depois disso, a partição /mnt/luna
é montada em virt1 e virt2. Aqui é onde eu encontro o problema. O seguinte comando nunca termina:
ssh [email protected] "dd if=/dev/urandom of=/mnt/luna/block2 bs=1M count=400" & dd if=/dev/urandom of=/mnt/luna/block1 bs=1M count=400
Além disso, executei este loop no virt2: bash -c 'cd /mnt/luna; rm -f /mnt/luna/asdf; while $true; do echo a >> /mnt/luna/asdf; sleep 1; done'
ao tentar ler arquivos em / mnt / luna a partir do virt1:
[root@virt1 luna]# while $true; do time ls -l /mnt/luna; done
total 8
-rw-r--r--. 1 root root 362 Apr 13 21:35 asdf
real 0m24.029s
user 0m0.002s
sys 0m0.004s
total 8
-rw-r--r--. 1 root root 374 Apr 13 21:36 asdf
real 0m24.031s
user 0m0.005s
sys 0m0.003s
total 8
-rw-r--r--. 1 root root 386 Apr 13 21:36 asdf
real 0m24.032s
user 0m0.002s
sys 0m0.006s
Tendo esses resultados em leitura e gravação de arquivos, não posso usar essa partição para armazenar os discos das VMs. O que estou configurando de maneira errada? Este é o desempenho esperado para partições GFS2? Devo usar o NFS para este caso de uso?
Agradecemos antecipadamente pela ajuda!