Я настроил gluserfs на паре серверов, и я могу установить его на свои клиентские машины. Я также хочу иметь возможность монтировать файловую систему glusterfs на обоих серверах glusterfs при загрузке, когда я отключаю обе машины и запускаю их с нуля.
Эти серверы настроены как кластер с помощью кардиостимулятора. В дополнение к общей базе данных, pacemaker также предоставляет виртуальный IP-адрес для монтирования файловой системы gluster.
Я могу вручную смонтировать файловую систему на каждом из них после того, как оба сервера заработают, с помощью команды:
mount -t glusterfs nodea:/gv0 /data
Что здорово. Но я хочу, чтобы это происходило автоматически при загрузке.
Итак, я попытался добавить запись в fstab:
nodea:/gv0 /data glusterfs _netdev 0 0
Что работает, когда я запускаю команду «mount -a» после того, как кластер запущен и работает. Однако при загрузке он не работает. (Именно так клиентские машины монтируют glusterfs при загрузке, но кластер запущен и работает. Конечно, он работает для них при загрузке.)
Я также попытался создать файл systemd unit для монтирования glusterfs при загрузке. Мой файл модуля находится в / etc / systemd / system с именем "data.mount" и выглядит так:
# Mounting gluster fs at /data
[Unit]
Description = Automount gluster filesystem
After=pcsd.service
[Mount]
What=nodea:/gv0
Where=/data
Type=glusterfs
[Install]
WantedBy = pcsd.service
Опять же, это работает, когда оба сервера запущены и работают с помощью команды «systemctl start data.mount». Это также работает, если я перезагружаю только одну из машин в кластере. Но при перезагрузке обоих серверов не работает.
Если оба узла в кластере выходят из строя или мне хочется перезагрузить оба одновременно по какой-либо причине, я хочу быть уверен, что когда обе машины вернутся обратно, glusterfs будет смонтирован на / data.
В качестве обходного пути я добавил следующие строки в crontab root на обеих машинах:
@reboot sleep 60 && mount -t glusterfs nodea:/gv0 /data
@reboot sleep 300 && mount -t glusterfs nodea:/gv0 /data
Это сработает, если я запустил оба сервера с нуля. Но меня беспокоит то, что если служба кардиостимулятора запускается дольше 5 минут, то файловая система gluster у меня все равно не смонтирована на сервере в / data.
Есть ли способ, чтобы файл модуля systemd проверял, действительно ли он смонтировал файловую систему, и если не повторять попытку, пока это не произойдет?
Есть ли другой способ смонтировать glusterfs при загрузке и проверить, действительно ли он смонтирован?
При необходимости у вас должна быть возможность автоматически монтировать systemd. У меня также были проблемы с установкой Ubuntu 16.04 при загрузке. На основе это сообщение я добавил noauto,x-systemd.automount
к моему fstab
линия:
gluster1:/volume1 /storage-pool glusterfs defaults,_netdev,noauto,x-systemd.automount 0 0
Я перезагружал серверы приложений по несколько раз каждый, и все они успешно смонтированы. Надеюсь, это вам тоже поможет!
Я взламывал эту проблему, учитывая отношение LP:
файл: /etc/systemd/system/glusterfsmounts.service
:
[Unit]
Description=Glustermounting
Requires=glusterfs-server.service
[Service]
Type=simple
RemainAfterExit=true
ExecStartPre=/usr/sbin/gluster volume list
ExecStart=/bin/mount -a -t glusterfs
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
тогда вы бы:
systemctl демон-перезагрузка
systemctl включить glusterfsmounts
и перезагрузка ... была для меня самой лучшей / стабильной
Вы можете использовать сценарий, чтобы поддерживать статус «запущен» службы systemd glusterfs, пока тома не будут готовы.
systemctl edit glusterd.service
[Service]
ExecStartPost=/usr/local/sbin/glusterfs-wait
Создайте файл /usr/local/sbin/glusterfs-wait
со следующим:
#!/bin/bash
FAIL=1
until [ $FAIL -eq 0 ]; do
gluster volume status all
FAIL=$?
test $FAIL -ne 0 && sleep 1
done
exit 0
Убедитесь, что этот файл исполняемый.
Затем создайте переопределение монтирования, например, для /mnt/storage
это было бы mnt-storage.mount
, косая черта становится дефисом.
systemctl edit mnt-storage.mount
Если это не сработает, и вы только что добавили запись fstab, перезагрузите systemd, чтобы он увидел обновление (systemctl daemon-reload
).
[Unit]
After=glusterd.service
Wants=glusterd.service