Назад | Перейти на главную страницу

GlusterFS не монтируется при загрузке с Ubuntu 14.04

Ранее я спрашивал о монтировании GlusterFS при загрузке на сервере Ubuntu 12.04. и ответ заключался в том, что это было ошибкой в ​​12.04 и работало в 14.04. Любопытно, что я попробовал его на виртуальной машине, работающей на моем ноутбуке, и в 14.04 он заработал. Поскольку это было критично для меня, я решил обновить свои работающие серверы до 14.04 только для того, чтобы обнаружить, что GlusterFS также не монтирует тома localhost автоматически.

Это сервер Linode, и fstab выглядит так:

# <file system> <mount point>          <type>    <options>                 <dump>  <pass>
proc        /proc                        proc    defaults                       0       0
/dev/xvda   /                            ext4    noatime,errors=remount-ro      0       1
/dev/xvdb   none                         swap    sw                             0       0
/dev/xvdc   /var/lib/glusterfs/brick01   ext4    defaults                       1       2
koraga.int.example.com:/public_uploads /var/www/shared/public/uploads glusterfs defaults,_netdev 0 0

Процесс загрузки выглядит примерно так (только в части сетевого монтажа, которая не работает):

 * Stopping Mount network filesystems                                    [ OK ]
 * Starting set sysctls from /etc/sysctl.conf                            [ OK ]
 * Stopping set sysctls from /etc/sysctl.conf                            [ OK ]
 * Starting configure virtual network devices                            [ OK ]
 * Starting Bridge socket events into upstart                            [ OK ]
 * Starting Waiting for state                                            [fail]
 * Stopping Waiting for state                                            [ OK ]
 * Starting Block the mounting event for glusterfs filesystems until the [fail]k interfaces are running
 * Starting Waiting for state                                            [fail]
 * Starting Block the mounting event for glusterfs filesystems until the [fail]k interfaces are running
 * Stopping Waiting for state                                            [ OK ]
 * Starting Signal sysvinit that remote filesystems are mounted          [ OK ]
 * Starting GNU Screen Cleanup                                           [ OK ]

Я считаю, что файл журнала /var/log/glusterfs/var-www-shared-public-uploads.log содержит основной ключ к разгадке проблемы, так как он единственный, который действительно отличается между этим сервером, где установка не работает, и моим локальным виртуальным сервером, где он находится:

[2014-07-10 05:51:49.762162] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.1 (/usr/sbin/glusterfs --volfile-server=koraga.int.example.com --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-07-10 05:51:49.774248] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-07-10 05:51:49.774278] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-07-10 05:51:49.775573] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 192.168.134.227:24007 failed (Connection refused)
[2014-07-10 05:51:49.775634] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-host: koraga.int.example.com (No data available)
[2014-07-10 05:51:49.775649] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-07-10 05:51:49.776284] W [glusterfsd.c:1095:cleanup_and_exit] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_transport_notify+0x23) [0x7f6718bf3f83] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_clnt_notify+0x90) [0x7f6718bf7da0] (-->/usr/sbin/glusterfs(+0xcf13) [0x7f67192bbf13]))) 0-: received signum (1), shutting down
[2014-07-10 05:51:49.776314] I [fuse-bridge.c:5475:fini] 0-fuse: Unmounting '/var/www/shared/public/uploads'.

Состояние тома:

Volume Name: public_uploads
Type: Distribute
Volume ID: 52aa6d85-f4ea-4c39-a2b3-d20d34ab5916
Status: Started
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: koraga.int.example.com:/var/lib/glusterfs/brick01/public_uploads
Options Reconfigured:
auth.allow: 127.0.0.1,192.168.134.227
client.ssl: off
server.ssl: off
nfs.disable: on

Если я сбегу mount -a после загрузки том смонтирован правильно:

koraga.int.example.com:/public_uploads on /var/www/shared/public/uploads type fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)

Несколько связанных файлов журнала показывают это:

/var/log/upstart/mounting-glusterfs-_var_www_shared_public_uploads.log:

start: Job failed to start

/var/log/upstart/wait-for-state-mounting-glusterfs-_var_www_shared_public_uploadsstatic-network-up.log:

status: Unknown job: static-network-up
start: Unknown job: static-network-up

но на моем тестовом сервере он показывает то же самое, поэтому я не думаю, что это актуально.

Есть идеи, что сейчас не так?

Обновить: Я пробовал изменить WAIT_FOR со статического сетевого на сетевой, но он все еще не работал, но все сообщения [сбой] при загрузке исчезают. Это файлы журналов при следующих условиях:

/var/log/glusterfs/var-www-shared-public-uploads.log содержит:

wait-for-state stop/waiting

/var/log/upstart/wait-for-state-mounting-glusterfs-_var_www_shared_public_uploadsstatic-network-up.log содержит:

start: Job is already running: networking

/var/log/glusterfs/var-www-shared-public-uploads.log содержит:

[2014-07-11 17:19:38.000207] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.1 (/usr/sbin/glusterfs --volfile-server=koraga.int.example.com --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-07-11 17:19:38.029421] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-07-11 17:19:38.029450] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-07-11 17:19:38.030288] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 192.168.134.227:24007 failed (Connection refused)
[2014-07-11 17:19:38.030331] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-host: koraga.int.example.com (No data available)
[2014-07-11 17:19:38.030345] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-07-11 17:19:38.030984] W [glusterfsd.c:1095:cleanup_and_exit] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_transport_notify+0x23) [0x7fd9495b7f83] (-->/usr/lib/x86_64-linux-gnu/libgfrpc.so.0(rpc_clnt_notify+0x90) [0x7fd9495bbda0] (-->/usr/sbin/glusterfs(+0xcf13) [0x7fd949c7ff13]))) 0-: received signum (1), shutting down
[2014-07-11 17:19:38.031013] I [fuse-bridge.c:5475:fini] 0-fuse: Unmounting '/var/www/shared/public/uploads'.

Обновление 2: Я тоже пробовал это в файле upstart:

start on (started glusterfs-server and mounting TYPE=glusterfs)

но компьютер не загрузился (пока не знаю почему).

Мне удалось выполнить эту работу с помощью комбинации ответов в этой теме и этой: GlusterFS не монтируется при загрузке

Согласно @Dan Pisarski править /etc/init/mounting-glusterfs.conf читать:

exec start wait-for-state WAIT_FOR=networking WAITER=mounting-glusterfs-$MOUNTPOINT

Согласно изменению @ dialt0ne /etc/fstab читать:

[serverip]:[vol]  [mountpoint]  glusterfs  defaults,nobootwait,_netdev,backupvolfile-server=[backupserverip],direct-io-mode=disable  0       0

Работает для меня (tm) в Ubuntu 14.04.2 LTS

Я столкнулся с той же проблемой на AWS на ubuntu 12.04. Вот несколько вещей, которые сработали для меня:

  • добавьте больше попыток выборки в свой fstab

Это позволит вам повторить попытку сервера volfile, пока сеть недоступна.

  • добавьте резервный сервер volfile в свой fstab

Это позволит вам смонтировать файловую систему с другого члена сервера gluster, если основной по какой-то причине не работает.

  • Добавить nobootwait в вашем fstab

Это позволяет экземпляру продолжить загрузку, пока эта файловая система не смонтирована.

Пример записи из моего текущего fstab:

10.20.30.40:/fs1 /example glusterfs defaults,nobootwait,_netdev,backupvolfile-server=10.20.30.41,fetch-attempts=10 0 2

Я не тестировал это 14.04, но он работает нормально для моих экземпляров 12.04.

Это ошибка

Это действительно ошибка (статическое подключение к сети - это не работа, это сигнал события).

Более того, использование сетевого задания, как предлагается в других ответах, не является самым правильным решением.

Итак, я создал это отчет об ошибке и отправил патч к этой проблеме.

В качестве обходного пути вы можете применить предложенное мной решение (в конце этого ответа) и использовать _netdev вариант в вашем fstab.

Выше также показано лучшее объяснение, но вы можете пропустить это объяснение, если хотите.

Объяснение

Это ошибка в mounting-glusterfs.conf. Это может увеличить ненужные 30 секунд при загрузке на сервере Ubuntu или даже приостановить процесс загрузки.

Из-за этой ошибки процесс монтирования считает, что монтирование не удалось (вы увидите ошибки «Сбой монтирования» в /var/log/boot.log). Итак, когда не используется nobootwait/nofail флаги в /etc/fstab, ошибка может привести к зависанию процесса монтирования (и процесса загрузки тоже). При использовании nobootwait/nofail flags, ошибка увеличит время загрузки примерно на 30 секунд.

Ошибка вызвана следующими ошибками:

  • Нет необходимости ждать, пока сеть заработает. Сама Ubuntu имеет _netdev флаг монтирования, который будет повторять попытку монтирования при каждом запуске интерфейса;
  • Однако необходимо дождаться появления демона GlusterFS Server (для монтирования с использованием localhost);
    • Это было реализовано в старый коммит в восходящем проекте GlusterFS. Однако эта фиксация была перезаписана;
  • Неправильно использовать wait-for-state задача-выскочка ждать сигнала. Раньше ждал работы. static-network-up это сигнал о событии, а не о работе;
    • Вот почему регистрируется «Неизвестное задание: static-network-up»;
  • Это неправильно, когда ждете начала работы, не пройдя WAIT_STATE=running env var, потому что это не по умолчанию в wait-for-state.

Решение

/etc/init/mounting-glusterfs.conf:

author "Louis Zuckerman <me@louiszuckerman.com>"
description "Block the mounting event for glusterfs filesystems until the glusterfs-server is running"

instance $MOUNTPOINT

start on mounting TYPE=glusterfs
task
script
  if status glusterfs-server; then
    start wait-for-state WAIT_FOR=glusterfs-server WAIT_STATE=running \
        WAITER=mounting-glusterfs-$MOUNTPOINT
  fi
end script

PS: Используйте также _netdev вариант в вашем fstab.

Спасибо за подробное объяснение, я думаю, что понимаю намного больше, чем раньше. Последнее решение почти работает. Проблемы (собственно одна, поскольку первое подразумевает второе):

  • местные акции (127.0.0.1:/share) еще не смонтирован
  • mounted TYPE=glusterfs никогда не устраивает, поэтому услуги, которые зависят от смонтированных TYPE=glusterfs штат

/etc/fstab:

127.0.0.1:/control-share /mnt/glu-control-share glusterfs defaults,_netdev 0 0

/etc/init/mounting-glusterfs.conf: скопировано сверху

/etc/init/salt-master.conf:

description "Salt Master"

start on (mounted TYPE=glusterfs
          and runlevel [2345])
stop on runlevel [!2345]
limit nofile 100000 100000
...

Локальный общий ресурс должен быть смонтирован вручную или каким-то автоматическим способом, salt-master должен запускаться вручную после всех перезагрузок.

Замечено позже: приведенный выше сценарий WAIT в mount-glusterfs ... блокирует всю процедуру загрузки, похоже, что состояние glusterfs-server никогда не достигает выполнения.

Я тоже столкнулся с этим и хочу предварять этот ответ заявлением о том, что я не эксперт в этой области, поэтому, возможно, есть лучшее решение для этого!

Но проблема, похоже, в том, что статическая сеть это событие, а не название выскочки. Тем не мение, состояние ожидания сценарий ожидает, что имя задания будет передано как значение WAIT_FOR. Таким образом, ошибка «Неизвестное задание», как вы обнаружили выше.

Чтобы решить эту проблему, я изменил /etc/init/mounting-glusterfs.conf, изменив:

exec start wait-for-state WAIT_FOR=static-network-up WAITER=mounting-glusterfs-$MOUNTPOINT

в:

exec start wait-for-state WAIT_FOR=networking WAITER=mounting-glusterfs-$MOUNTPOINT

сеть - это имя фактического задания (/etc/init/networking.conf), и я считаю, что задание, которое обычно вызывает static-network-up.

Это изменение сработало для меня в Ubuntu 14.04.

Мне удалось это с помощью действительно простого решения:

  1. добавить точку монтирования в / etc / fstab

    gluster:/VOLUME_NAME/local/mount/point glusterfs defaults,_netdev 0 0
    
  2. добавьте одну строчку в свой /etc/rc.local, так это будет выглядеть так:

    mount -a
    exit 0
    

Теперь все Glusterfs тома будут монтироваться при запуске.