Я пытаюсь настроить клиент NFS на новом сервере CentOS 6.6 на существующий сервер NFS, и у меня возникают проблемы, которые я не могу понять. При запуске rpcbind
/nfs
Я получил:
# /etc/init.d/rpcbind start
# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: Cannot register service:
RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
rpcinfo -p
работает отлично
# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
.. snip
100021 4 tcp 47627 nlockmgr
но rpcinfo -p 127.0.0.1
(или localhost) возвращает ошибку:
# rpcinfo -p 127.0.0.1
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
При проверке портов с помощью (netstat -an) кажется, что portmap / rpcbind не прослушивает порт 111. Ничего не прослушивает порт 111, а rpcbind прослушивает порт 3421 (редактирование: не случайно, как я изначально думал).
Вот что я проверял или пробовал:
/etc/hosts.deny
iptables
(у него не было правил для начала)На данный момент у меня действительно не осталось никаких вариантов или вещей, которые нужно проверить, и мне нужны некоторые идеи. На этом этапе я почти все попробую, так как сервер без NFS относительно бесполезен.
Обновление 1:
Бег rpcinfo -s localhost
на клиенте работает но rpcinfo -s server
не работает. Мне интересно, есть ли проблема с тем, чтобы клиент был CentOS 6, а сервер - CentOS 5.
Обновление 2:
Выход из showmount
идентичен на новом клиенте и сервере NFS:
# showmount -e 10.2.212.10
Export list for 10.2.212.10:
/shared/uesp/maps 67.205.112.104
/shared/uesp/skins 67.205.112.104
/shared/phpsessions 10.2.212.30,[...snip...],10.2.212.11
/shared/uesp/filecache 10.2.212.30,[...snip...],10.2.212.11
/shared/uesp/wikiimages 10.2.212.30,[...snip...],10.2.212.11
/shared/eqwiki/filecache 10.2.212.30,[...snip...],10.2.212.11
/shared/eqwiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11
/shared/davewiki/filecache 10.2.212.30,[...snip...],10.2.212.11
/shared/davewiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11
Я вырезал длинный список IP-адресов, но 10.2.212.30 - новый клиент. Попытка смонтировать общий ресурс NFS на новом клиенте приводит к следующему:
# mount -v 10.2.212.10:/shared/phpsessions /mnt/phpsessions
mount: no type was given - I'll assume nfs because of the colon
mount.nfs: timeout set for Thu Jan 15 18:53:43 2015
mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=10.2.212.10'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query retrying: RPC: Unable to receive
mount.nfs: prog 100003, trying vers=3, prot=17
mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused
mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=10.2.212.10'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query retrying: RPC: Unable to receive
mount.nfs: prog 100003, trying vers=3, prot=17
mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused
...
Последние несколько строк повторяются до истечения времени ожидания.
Обновление 3:
Итак, если я использую iptables
перенаправить порт 111 на порт rpcbind
используется на клиенте, тогда я могу получить rpcinfo -p localhost
работать над клиентом. Однако это никак не влияет на проблемы с монтированием. Я пытался заставить NFS использовать v2, например:
# mount -v -t nfs -o nfsvers=3 10.2.212.10:/shared/phpsessions /mnt/phpsessions
но это приводит к тому же сообщению об ошибке, что и выше. Дело в том, что при запуске на клиенте я получаю:
# rpcinfo -s server
rpcinfo: can't contact rpcbind: : RPC: Unable to receive; errno = Connection refused
что такое же сообщение об ошибке от mount. Я предполагаю, что монтирование на клиенте CentOS 6 пытается использовать «новый» rpcbind на сервере CentOS 5, на котором запущена «старая» карта портов, поэтому он не работает. Я предполагаю, что можно каким-то образом смешивать версии CentOS, подобные этой.
Обновление 4:
Я создал тестовый общий ресурс NFS на клиенте и смог успешно смонтировать его на сервере. Это похоже на теорию о том, что это как-то связано с несоответствием portmap / rpcbind. Клиент может действовать как сервер NFS, поскольку rpcbind (rpc v3 / 4) обратно совместим с portmap (rpc v2), но portmap не совместим с rpcbind.
Обновление 5 (возможное решение)
Посмотрев на клиента внимательнее, я заметил rpcbind
кажется, всегда находится на порте 3421 (изначально я думал, что это было случайно). На сервере я использовал iptables
перенаправить порт 3421 на порт 111. После этого я смог успешно смонтировать общий ресурс NFS с сервера на клиенте. Это может быть правильным решением, поскольку у меня будет несколько серверов CentOS 5/6 только в течение нескольких недель, поскольку я обновляю все серверы до CentOS 6.
Если не появится лучший ответ, я отвечу на свой вопрос через несколько дней.
Основная проблема оказалась в несоответствии портов для portmap
/rpcbind
. На CentOS 6 моя rpcbind
прослушивал порт 3421 вместо ожидаемого 111, как portmap
работает в CentOS 5. Это вызвало проблемы с запуском nfs
и установка долей между двумя машинами.
Решением было использовать itpables
для перенаправления порта 111 в CentOS 6 на порт 3421:
iptables -t nat -I PREROUTING -p tcp --dport 111 -j REDIRECT --to-ports 3421
iptables -t nat -I PREROUTING -p udp --dport 111 -j REDIRECT --to-ports 3421
iptables -t nat -I OUTPUT -p tcp -o lo --dport 111 -j REDIRECT --to-ports 3421
iptables -t nat -I OUTPUT -p udb -o lo --dport 111 -j REDIRECT --to-ports 3421
То же самое было сделано на сервере CentOS 5, за исключением обратного перенаправления порта 3421 на 111. После этого я смог успешно смонтировать общий ресурс NFS с сервера CentOS 5 на клиенте CentOS 6.
Чтобы получить nfs
полностью работая на сервере CentOS 6, мне также пришлось раскомментировать все строки, связанные с портом, в /etc/sysconfig/nfs
использовать фиксированные адреса портов. До этого у меня периодически возникали проблемы с lockd
служба не отвечает.