====== Решение GMIRROR GGATE ======
[[http://www.freebsd.org/doc/en/books/handbook/geom-ggate.html]]
[[http://phaq.phunsites.net/2006/08/11/realtime-file-system-replication-on-freebsd/]]
===== Первоначальная конфигурация =====
Выполняем процедуру [[Добавление дисков]] до создания и переименования слайса включительно на обоих узлах.
[gate1:~] # cat /etc/hosts
...
10.0.0.2 slave
...
[gate2:~] # cat /etc/hosts
...
10.0.0.1 slave
...
[gateN:~] # cat /etc/gg.exports
slave RW /dev/ad1s1e
[gateN:~] # mkdir /opt
[gateN:~] # cat /etc/periodic.conf
daily_status_gmirror_enable="YES"
===== Инициализация =====
[gate1:~] # gmirror load
[gate1:~] # gmirror label -v gm0 /dev/ad1s1e
[gate1:~] # gmirror status
[gate1:~] # newfs /dev/mirror/gm0
[gate1:~] # fsck -y -t ufs /dev/mirror/gm0
[gate1:~] # mount /dev/mirror/gm0 /opt
[gate2:~] # ggated
[gate1:~] # ggatec create -t 10 -u 0 slave /dev/ad1s1e && echo Success
[gate1:~] # ggatec list
[gate1:~] # gmirror insert gm0 ggate0
[gate1:~] # gmirror status
==== В случае сбоя синхронизации ====
[gate1:~] # gmirror status
Name Status Components
mirror/gm0 DEGRADED ad1s1e
заставляем зеркало "забыть" о недоподключенном диске и вновь подключаем его
[gate1:~] # gmirror forget gm0
[gate1:~] # gmirror insert gm0 ggate0
[gate1:~] # tail -f /var/log/messages
Иногда, при постоянных сбоях синхронизации, помогает перезапуск ggated на slave узле
[gate2:~] # killall ggated
[gate2:~] # ggated
===== Смена ролей узлов кластера =====
gate1 - бывший мастер, теперь бекап
gate2 - бывший бекап, теперь мастер
[gate1:~] # umount /opt
[gate1:~] # gmirror status
[gate1:~] # gmirror deactivate gm0 ggate0
[gate1:~] # gmirror deactivate gm0 ad1s1e
[gate1:~] # gmirror unload
[gate1:~] # ggatec list
[gate1:~] # ggatec destroy -u 0
[gate1:~] # killall -9 ggatec
[gate1:~] # ggated
[gate2:~] # killall ggated
[gate2:~] # gmirror load
[gate2:~] # gmirror label -v gm0 /dev/ad1s1e
[gate2:~] # gmirror status
[gate2:~] # fsck -y -t ufs /dev/mirror/gm0
[gate2:~] # mount /dev/mirror/gm0 /opt
[gate2:~] # ggatec create -t 10 -u 0 slave /dev/ad1s1e
[gate2:~] # ggatec list
[gate2:~] # gmirror insert gm0 ggate0
[gate2:~] # gmirror status
===== Остановка заркалирования =====
[gate2:~] # umount /opt
[gate2:~] # gmirror status
[gate2:~] # gmirror deactivate gm0 ggate0
[gate2:~] # gmirror deactivate gm0 ad1s1e
[gate2:~] # gmirror unload