Linux
RabbitMQ
RabbitMQ - Введение
RabbitMQ - Урок 1. Hello world!
RabbitMQ - Урок 2. Распределенные очереди
RabbitMQ - Урок 3. Рассылка публикаций
RabbitMQ - Урок 4. Селективная рассылка
RabbitMQ - Урок 5. Рассылка по шаблону
RabbitMQ - Урок 6. Реализация RPC шаблона
XMPP
Git
Полезные ссылки
Монтирование сетевой файловой системы (NFS)
2012-06-24
Задача: посредством NFS экспортировать директорию /home/share с IP адреса 192.168.0.1(server) и примаунтить ее к хосту с IP 192.168.0.5 (client) в точке /media/files.
Установка ПО
Необходимое ПО для серверной части:
aptitude install nfs-kernel-server nfs-common portmap,
где
nfs-kernel-server - NFS демон, прослушиваемый на 2049 UDP и TCP портах,
portmap - демон, от которого зависит установка NFS,
nfs-common - общие файлы для клиента и сервера NFS, этот пакет нужно устанавливать на машину, которая будет работать в качестве клиента или сервера NFS. В пакет включены программы: lockd, statd, showmount, nfsstat, gssd и idmapd.
Для проверки корректной установки можно выполнить команду rcpinfo -p
$ rpcinfo -p | grep "nfs"
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
Кроме того, система должна поддержитвать NFS. Чтобы проверить это, можно использовать команду
$ cat /proc/filesystems | grep "nfs"
nodev
nfs
nodev
nfs4
nodev
nfsd
Если эти строки отсутствуют, значит необходимо загрузить NFS модуль в ядро системы командой
$ modprobe nfs
После установки NFS демон слушает порты 2049 UDP и TCP, a portmap должен ожидать инструкций на порту 111. Проверить можно командой
$ rpcinfo -p | grep "portmap"
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
Конфигурация серверной части
Теперь, когда все необходимое ПО установлено, можно настроить сервер. Для этого необходимо отредактировать файл /etc/exports, добавив в него строчку вида
/path/to/shared/directory allowable_hosts(options)
где
allowable_hosts - хосты, на которые шарится папка(* означает любой хост)
options - параметры экспорта. Ниже приведены некоторые из них:
ro(rw) - диск доступен для чтения(и записи).
sync(async) - указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря информации.
root_squash(no_root_squash) - при заданной опции root_squash, запросы от пользователя root отображаются на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid.
auth_nlm (no_auth_nlm) или secure_locks (insecure_locks) - указывает, что сервер должен требовать аутентификацию запросов на блокировку.
secure (insecure) - требует, чтобы запросы NFS поступали с защищенных портов (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
subtree_check (no_subtree_check) - Если экспортируется подкаталог фаловой системы, но не вся файловая система, сервер проверяет, находится ли запрошенный файл в экспортированном подкаталоге. Отключение проверки уменьшает безопасность, но увеличивает скорость передачи данных.
wdelay (no_wdelay) - если предполагается запись нескольких блоков подряд, то физическая запист откладывается, данные собираются в больший блок и затем только происходит запись на диск. Это повышает производительность при отправке больших очередей команд на запись. no_wdelay, наоборот, указывает не откладывать выполнение команды на запись, что увеличивает производительность при записи множества маленьких команд не связанных друг с другом.
root_squash (no_root_squash) - если установлена эта опция, то запросы от пользователя root отображаются на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid.
no_all_squash (all_squash) - если установлена эта опция, то запросы от ВСЕХ пользователей (не только root) отображаются на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid.
anonuid=UID и anongid=GID - явно задает UID/GID для анонимного пользователя.
map_static=/etc/file_maps_users - задает файл, в котором можно задать сопоставление удаленных UID/GID - локальным UID/GID.
В нашем случае в файл /etc/exports следует добавить следующую строчку:
/home/share 192.168.0.5(rw,async,no_root_squash)
Если nfs-сервер запущен, следует его остановить во избежании зависения службы
service nfs-kernel-service stop
Теперь необходимо экспортировать настройки
$ exportfs -ra
Параметры exportfs:
[клиент:имя-каталога] - добавить или удалить указанную файловую систему для указанного клиента)
-v - выводить больше информации
-r - переэкспортировать все каталоги (синхронизировать /etc/exports и /var/lib/nfs/xtab)
-u - удалить из списка экспортируемых
-a - добавить или удалить все файловые системы
-o - опции через запятую (аналогичен опциям применяемым в /etc/exports; т.о. можно изменять опции уже смонтированных файловых систем)
-i - не использовать /etc/exports при добавлении, только параметры текущей командной строки
-f - сбросить список экспортируемых систем в ядре
И запустить nfs-сервер
service nfs-kernel-server start
Конфигурация клиентской части
$ mount -t nfs 192.168.0.1:/home/share /media/files
Для автоматического маунта необходимо добавить следующуую строку в файл /etc/fstab
192.168.0.1:/home/share /media/files nfs defaults 0 0
Экспорт нескольких дисков(папкок)
NFS должна иметь возможность идентифицировать каждую экспортируемую файловую систему. Обычно для файловой системы используется UUID или номер устройства(device number), если это файловая система на внешнем носителе. В случае с NFS необходимо идентификация файловой системы выполняется с помощью параметра fsid=option. Для NFSv4 существует базовая система, которая обозначается fsid=root или fsid=0. Таким образом, при экспорте нескольких дисков(папок) в файле /etc/exports необходимо указать параметр fsid=0 только для одной(базовой) файловой системы:
/home/share *(rw,async,no_root_squash,fsid=0)
/home/share/video *(rw,async,no_root_squash)
/home/documents *(rw,async,no_root_squash)