Настройка NFS клиента и сохранение записей и бэкапов на NFS шару – Asterisk IP-телефония

Введение

Основная часть материалов, посвященная виртуализации, ориентирована в основном на крупные и средние инфраструктуры. О внедрениях виртуализации в масштабах 10-20 ВМ на нескольких серверах сегодня почти никто не говорит. А на самом деле, сред, в которых работает не большее число ВМ, на проложенном в далеком прошлом Ethernet и самосборных сетевые хранилищах, достаточно.

И ситуация эта особенно характерна для СНГ, где на развитие ИТ-отдела и на внедрение новых технологий порой выделяют столько средств, что трудно не заплакать.В этой статье, хочется уделить внимание возможным путям оптимизации сетевой подсистемы, как на аппаратном уровне, так и на программном, для повышения производительности имеющегося оборудования и каналов связи.

Почему?

😪Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.

Autofs avahi[править]

Использование avahi. Создайте на сервере файл /etc/avahi/services/nfs.service, используется nfs4:

и запустите на сервере nfs сервис avahi-daemon.
Проверьте с машин-клиентов, что сервер nfs виден с этих машин с помощью команды

avahi-browse -tkrp _nfs._tcp

Установите на машины-клиенты autofs. С настройками по умолчанию, ресурсы nfs будут монтироваться как /mnt/net/servername/netshare.

Для домашней локальной сети, когда nfs раздается не с сервера, а с другой рабочей станции,
которую могут выключить в любой момент, рекомендуется прописывать у клиентов в /etc/sysconfig/autofs timeout поменьше (например, 5 сек):

Cisco discovery protocol

К сожалению, CDP не поддерживается модулями «HP VC FlexFabric», поэтому включать ее поддержку на гипервизоре смысла нет.

Выдержка из документации: «

Virtual Connect does not support CDP. VC does support the industry standard protocol called Link Layer Discovery Protocol (LLDP) by default. LLDP is functionally equivalent to CDP, although the two protocols are not compatible.

Flow control


В вопросе использования механизма «Flow Control» мы решили придерживаться рекомендации NetApp и отключить его на всех «уровнях» (ESXi, FlexFabric, Network, Storage).

Рекомендация NetApp: «Modern network equipment and protocols handle port congestion better than those in the past. NFS and iSCSI as implemented in ESXi use TCP. TCP has built-in congestion management, making Ethernet flow control unnecessary. Furthermore, Ethernet flow control can actually introduce performance issues on other servers when a slow receiver sends a pause frame to storage and stops all traffic coming out of that port until the slow receiver sends a resume frame.

Although NetApp has previously recommended flow control set to send on ESXi hosts and NetApp storage controllers, the current recommendation is to disable flow control on ESXi, NetApp storage, and on the switches ports connected to ESXi and NetApp storage.»

В конфигурации модулей «HP VC FlexFabric» Flow Control по умолчанию включен только на downlink-ах (значение «Auto»), а на uplink-ах выключено.

«ON» — all ports will advertise support for flow control (if autoneg), or flowcontrol turned on (non-autoneg).«OFF» — all ports will advertise *no* support for flow control (if autoneg), or flowcontrol turned off (non-autoneg).«Auto» — all uplink/stacking links will behave like «OFF», and all server links behave like «ON».

Команда для выключения: #set advanced-networking FlowControl=off

Jumbo frames


Чтобы получить максимальную выгоду от 10 Gbit рекомендуется включать Jumbo Frames на всех уровнях:

VMkernel portvSwitchFlexFabricNetworkStorage
Значение90009000921692169000

Значение MTU в HP Virtual Connect «зашито» на значение 9216 и не может быть

Как установить Jumbo Frames на ESXi.

Nfs advanced settings

Рекомендуется изменять стандартные значения некоторых параметров работы с NFS-экспортами. Для каждого vSphere хоста в Advanced Settings устанавливаем следующие значения:

NFS.HeartbeatFrequency = 12NFS.HeartbeatTimeout = 5NFS.HeartbeatMaxFailures = 10Net.TcpipHeapSize = 32Net.TcpipHeapMax = 512NFS.MaxVolumes = 256NFS.MaxQueueDepth = 64

Рекомендации описаны в следующих документах:Best Practices for running VMware vSphere on Network Attached StorageIncreasing the default value that defines the maximum number of NFS mounts on an ESXi/ESX host

Smart link

Режим Smart Link должен быть включен для всех vNet (Ethernet Network) в конфигурации FlexFabric. Это необходимо, чтобы гипервизор правильно отработал балансировку в виртуальном коммутаторе.

Выдержка из документации: «HP’s Virtual Connect supports a feature called Smart Link, a network enabled with Smart Link automatically drops link to the server ports if all uplink ports lose link. This feature is very similar to the Uplink Failure Detection (UFD) that is available on the HP GbE2, GbE2c and most ProCurve switches. I believe there is a similar feature available on Cisco switches called Link State Tracking.»

Subfs (для p5 и ранее, устарело)[править]

Рецепт mike@ для subfs (фрагмент /etc/fstab), NFS4

server:/var/ftp/pub /pub subfs fs=nfs4,program=/sbin/net-submountd,interval=5,proto=tcp,port=2049,soft,_netdev 0 0

или NFS3

server:/var/ftp/pub /pub subfs fs=nfs,program=/sbin/net-submountd,interval=5,soft,_netdev 0 0

Vmkernel port

Для каждого сервиса (vMotion, Management, NFS, FT) рекомендуется создавать отдельный VMkernel Port. Vmk для NFS-трафика (Available Services остается пустым) необходимо создавать в той же подсети, где будут находиться NFS-экспорты. В нашем случае:

VMkernel portAvailable ServicesNetwork LabelVLAN IDMTU
vmk0vMotionvMotion19000
vmk1ManagementManagement29000
vmk2NFS39000


Для vMotion vmkernel-адаптера

установить «failover order» режим в Active/Standby:

«As this Scenario is based on an Active/Active configuration, to ensure that ALL VMotion traffic between servers within the enclosure is contained to the same module, on each server edit the VMotion vSwitch properties and move one of the Adapters to Standby. This will ensure that ALL VMotion traffic will occur on the same Virtual Connect module.»

Vsphere vswitch load balancing

В подобной конфигурации в виртуальных коммутаторах рекомендуется использовать режим балансировки нагрузки «Route based on the originating virtual port id».

Режим «Route Based on IP Hash» (рекомендация NetApp) использоваться не может, так как для этого требуется объединение его uplink-ов (виртуального коммутатора) в транк по протоколу 802.3ad, а HP VC FlexFabric не предоставляет такую возможность для downlink к серверам.

Остальные настройки Load Balancing Policy:Network failure detection: Link status only.Notify switches: Yes.Failback: Yes.

Автомонтирование[править]

Осуществляется при помощи automount, autofs или subfs.

Агрегирование каналов


Агрегация каналов является одним из основных средств достижения высокой отказоустойчивости виртуальной среды, поэтому необходимо использовать это на всех уровнях прохождения трафика. В нашем случае:

ESXiFlexFabricNetworkStorage
vSphere vSwitch в режиме «Port ID»Shared Uplink Set режим «Auto» (LACP)EtherChannel (LACP)lif

Аппаратная оптимизация

Аппаратная оптимизация подразумевает под собой приобретение дополнительного оборудования, в частности сетевого, что может показаться не вписывающимся в контекст данной статьи. Все же я решил об этом упомянуть, так как возможно, это будет следующим этапом развития вашей инфраструктуры.
Сетевые контроллеры с TCP Offload Engine (сокращенно TOE) — это технология, встраиваемая в сетевые адаптеры для разгрузки центрального процессора и возложения функций по обработке сетевых пакетов стека протоколов TCP/IP таких как формирование и подсчет контрольной суммы пакетов на контроллер сетевого адаптера. Как правило, применяется в высокоскоростных сетевых адаптерах: Gigabit Ethernet и 10 Gigabit Ethernet, когда накладные расходы на обработку сетевых пакетов становятся существенными[1].
Устройство TOE взаимодействует с хост-системой посредством интерфейса сеансового уровня. К примеру, при загрузке файла длиной 64 Кбайт обычная сетевая плата (без TOE) инициирует  около 60-ти транзакций (прием около 40 пакетов данных и передача 20 подтверждений) для ЦП хост-системы. Если же на сетевом адаптере имеется устройство TOE, обработка пакетов и передача подтверждений осуществляются самим адаптером. В этом случае данные загружаются в буферы приложений и выгружаются из них с помощью аппаратно реализованного механизма прямого доступа к памяти (DMA), а сэкономленная вычислительная мощность ЦП используется для выполнения критически важных приложений.
Сетевые контроллеры с TOE в одинаковой степени повышают производительность сетевой подсистемы и снижают нагрузку на ЦПУ не зависимо от используемого протокола на более высоком уровне(NFS,iSCSI и так далее).
В случае с iSCSI требуется больше вычислительных ресурсов, чем для простого обмена TCP/IP-данными, поскольку в нем предусмотрены дополнительные операции по упаковыванию и распаковыванию SCSI-блоков. Поэтому рекомендуется использовать сетевые адаптеры (iSCSI Host Bus Adapter), в которых кроме TOE  аппаратно реализован и уровень iSCSI. Эти адаптеры имеют специальные чипы iSCSI и TCP/IP, что позволяет достигать высоких скоростей обработки пакетов iSCSI  и максимальной разгрузки процессора хоста.
В свою очередь, NFS является сетевой файловой системой, большая часть стека которой должна поддерживаться ОС, поэтому каких либо адаптеров, способных аппаратно выполнять уровни NFS, не существует. В этом плане у iSCSI есть преимущество.
Все вышесказанное, является теорией и в большинстве своем общеизвестно. От себя хочется добавить, что при сегодняшних реалиях с многоядерными серверами. Которые сейчас используются даже в организациях с небольшим ИТ-бюджетом. На практике, положительный эффект от контроллеров с TOE будет на уровне нескольких процентов. В случае же если сервера совсем старые, с высокой загрузкой процессора, использование контроллеров с аппаратной разгрузкой будет наиболее полезно.
Такая же ситуация и с iSCSI HBA. Если производительности процессоров с избытком, то эффект от таких контроллеров будет минимальный, почти не заметный.
Настройка NFS клиента и сохранение записей и бэкапов на NFS шару - Asterisk IP-телефонияРис. №1. Уровни разгрузки сетевого стека различными контроллерами

Важные команды для nfs

Еще несколько важных команд для NFS.

  • showmount -e: показывает доступные общие ресурсы на вашем локальном компьютере.
  • showmount -e <server-ip или hostname>: список доступных общих ресурсов на удаленном сервере.
  • showmount -d: список всех подкаталогов
  • exportfs -v: отображает список общих файлов и параметров на сервере.
  • exportfs -a: экспортирует все ресурсы, перечисленные в /etc/exports или по имени
  • exportfs -u: отменяет экспорт всех ресурсов, перечисленных в /etc/exports, или имени
  • exportfs -r: обновить список серверов после изменения /etc/exports

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

Спасибо за уделенное время на прочтение статьи о том, как использовать команды NFS!

Если возникли вопросы, задавайте их в комментариях.

Важные файлы для конфигурации nfs

/etc/exports: это основной файл конфигурации NFS, все экспортируемые файлы и каталоги определены в этом файле на стороне сервера NFS./etc/fstab: чтобы смонтировать каталог NFS в вашей системе во время загрузки, нам нужно сделать запись в /etc/fstab./etc/sysconfig/nfs: файл конфигурации NFS для управления другими службами.

Виртуальные коммутаторы

Рекомендуется разделять трафик виртуальных машин от трафика управления (vMotion, Management, NFS, FT). Для повышения надежности виртуальной среды мы использовали стандартный коммутатор для трафика управления, а не распределенный, хоть он и имеет ряд преимуществ (например, поддержка LACP).

Другие нюансы

  1. Сетевая карта блейд-сервера должна быть совместима с модулями Virtual Connect. Совместимость можно проверить в QuickSpecs от HP.
  2. Желательно обновлять Firmware модулей Virtual Connect до последней доступной версии, но делать это стоит очень осторожно, проверяя совместимость FW блейд-серверов и корзины.
  3. В комплекте с модулями Virtual Connect SFP-трансиверы не идут, поэтому заранее планируйте схему физической коммутации, и покупайте правильные трансиверы.
  4. Virtual Connect позволяет гарантировать и устанавливать ограничения пропускной способности для подсетей (на уровне vNet/Ethernet Network/VLAN). Этим стоит пользоваться, например, для ограничения VLAN-а с Management-трафиком ESXi до 1 Gbit и гарантии VLAN-у NFS-а от 4 Gbit до 10 Gbit.

Изменение сетевых параметров ядра

Список наиболее важных параметров ядра, имеющих отношение к эффективности и производительности сети в контексте сетей хранения данных [3];net.core.somaxconn = 256 (по умолчанию 128) — Максимальное число открытых сокетов, ждущих соединения.

Имеет смысл увеличить значение при большем количестве соединений. Для высоко нагруженных серверов советуют значения в районе 15000-20000.В нашем случае, количество соединений не большое (это не веб-сервер), поэтому можно и не увеличивать.net.core.

rmem_max = 1073741824 (по умолчанию 124928) — Устанавливает максимальный размер буфера на прием для всех протоколов.net.core.wmem_max = 1073741824 (по умолчанию 124928) — Устанавливает максимальный размер буфера на передачу для всех протоколов.net.ipv4.tcp_reordering = 20 (по умолчанию 3)

Иногда увеличение времени прохождения пакета в локальной сети может считаться потерей пакета. Для таких случаев увеличение значения этого параметра повышает производительность.net.ipv4.tcp_rmem = 1048576 16777216 1073741824 (по умолчанию 4096 87380 937024)

Соответственно минимум, по умолчанию и максимум. Переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер приемного буфера сокетов TCP.Каждый сокет TCP имеет право использовать эту память по факту своего создания. Размер минимального буфера по умолчанию составляет 4 Кбайт (4096)net.ipv4.

tcp_wmem = 1048576 16770216 1073741824 (по умолчанию 4096 16384 937024 )Переменная в файле tcp_wmem содержит 3 целочисленных значения, определяющих минимальное, принятое по умолчанию, и максимальное количество памяти, резервируемой для буферов передачи сокета TCP.

Каждый сокет TCP имеет право использовать эту память по факту своего создания. Размер минимального буфера по умолчанию составляет 4 Кбайт (4096)ВНИМАНИЕ: Максимальные значения параметров net.ipv4.tcp_rmem, net.ipv4.tcp_wmem не должны превышать значения параметров net.core.rmem_max и net.core.wmem_max!net.ipv4.

tcp_mem = 1048576 16770216 1073741824 (по умолчанию 21960 29282 43920)Переменная в файле tcp_mem содержит 3 целых числа (порога), определяющих отношение протокола TCP к выделению памяти.Нижний порог: при значениях ниже этого уровня TCP не заботится о расходе памяти.

Порог ограничения: при достижении этого порога TCP контролирует размер выделяемой памяти и переходит в режим memory pressure (нехватка памяти), из которого выходит при снижении расхода памяти до нижнего порога.Верхний порог: число страниц памяти, доступных для создания очередей всеми сокетами TCP.

Значения всех порогов рассчитываются во время загрузки ОС с учетом доступной на компьютере памяти.net.ipv4.tcp_window_scaling = 1 (по умолчанию обычно 1) — Активирует масштабирование окна, как определено в RFC 1323; должен быть включен(1) для поддержки окон размером больше, чем 64KB.

net.ipv4.tcp_sack = 1 (по умолчанию обычно 1) — Активирует выборочное подтверждение (selective acknowledgment), которое улучшает производительность, выборочно подтверждая пакеты, полученные вне очереди (в результате отправитель повторно передает только пропущенные сегменты); должен быть включен (для большой области сетевых коммуникаций), но может усилить использование CPU.

net.ipv4.tcp_timestamps = 1 (по умолчанию обычно 1) — Активирует вычисление RTT более достоверным способом (смотрите RFC 1323), чем интервал для повторной передачи; должен быть включен для быстродействия.

net.ipv4.tcp_low_latency = 0 (по умолчанию обычно 0) — Разрешает стеку TCP/IP отдавать предпочтение низкому времени ожидания перед более высокой пропускной способностью. Вот здесь спорный момент. Если каналы высоконравственны, то лучше не включать.

Если трафик не большей и более важно время отклика, то лучше включить.net.core.netdev_max_backlog = 30000 (по умолчанию обычно 1000) — Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать

Установить значения приведенных выше параметров можно воспользовавшись командой:

#sysctl -w <имяПараметра>=<Значение>

Например устанавливаем новое значение параметра net.ipv4.tcp_low_latency:

#sysctl -w net.ipv4.tcp_low_latency=1

Изменение значений параметров с помощью утилиты sysctl, действуют только до перезагрузки системы. Для установки постоянных значений необходимо прописать соответствующие параметры и их значения в файле /etc/sysctl.confПосмотреть текущие значения параметров можно в соответствующих файлах виртуальной файловой системы /proc:

#cat /proc/sys/net/ipv4/tcp_low_latency

Изменение значения перечисленных выше параметров в разной степени, но все же оказываю влияние на потребление памяти и ресурсов CPU.

Использование nfs[править]

Подключение к nfs-серверу можно производить вручную, а можно настроить автоматическое подключение при загрузке.

Допустим машина где запущен nfs-server называется server, и нам необходимо смонтировать с сервера каталог /myshare
Тогда, для ручного способа достаточно (из под пользователя root) выполнить команду:

mount -t nfs4 -o proto=tcp,port=2049 server:/myshare /mnt/myshare

или (NFS3)

mount -t nfs server:/myshare /mnt/myshare

Конкретно для nfs

Достаточно, часто можно услышать, что NFS с настройками по умолчанию показывает смешные результаты производительности, даже на хорошем оборудовании. Попробуем это исправить.

Число потоков nfsd

Получая RPC-запрос от клиента, серверу может потребоваться время для его обработки. Даже доступ к локальной файловой системе может занять некоторое время. В течение этого времени сервер не хочет блокировать запросы от других клиентов, которые также должны быть обслужены.

Чтобы справиться с подобной ситуацией, большинство NFS-серверов запускают несколько потоков в рамках процесса nfsd. Конкретные методы решения и число доступных потоков зависят от операционной системы.В моем случае в качестве NFS-сервера использовался CentOS 6.3.

#cat /proc/fs/nfsd/threads

В моем случае их было 8.

Задать собственное количество до перезагрузки:

Курсы cisco и linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.

Что Вы получите?

  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.

Как проходит обучение?

  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.

А еще поможем Вам:

Монтирование общих каталогов на клиенте nfs

Теперь на стороне клиента NFS нам нужно смонтировать этот каталог на нашем сервере, чтобы получить к нему локальный доступ. Для этого сначала нужно выяснить, какие общие ресурсы доступны на удаленном сервере или NFS-сервере.



[[email protected] ~]# showmount -e 192.168.0.100

Export list for 192.168.0.100:
/nfsshare 192.168.0.101

Приведенная выше команда показывает, что каталог с именем «/nfsshare» доступен по адресу «192.168.0.100», чтобы поделиться с вашим клиентом.

На стороне nfs сервера

Я создал новый текстовый файл с именем «nfstest.txt» в этом общем каталоге.



[[email protected] ~]# cat > /nfsshare/nfstest.txt

This is a test file to test the working of NFS server setup.

Настроить каталог экспорта

Для совместного использования каталога с NFS нам нужно сделать запись в файле конфигурации «/etc/exports». Здесь я создам новый каталог с именем «nfsshare» в разделе «/» для совместного использования с клиентским сервером, вы также можете поделиться уже существующим каталогом с NFS.

[[email protected] ~]# mkdir /nfsshare

Теперь нам нужно сделать запись в «/etc/exports» и перезапустить службы, чтобы сделать наш каталог доступным в сети.



[[email protected] ~]# vi /etc/exports

/nfsshare 192.168.0.101(rw,sync,no_root_squash)

В приведенном выше примере есть каталог с именем «/nfsshare», совместно используемый с IP-адресом клиента «192.168.0.101» с привилегией read и write (rw), вы также можете использовать имя хоста клиента вместо IP в приведенный выше пример.

Настройка

Думаю, с теорией понятно, так что давайте переходить к практике. Как было сказано, все настройки будет проводить на Ubuntu 14.04.1

Прежде всего, на компьютер, который будет выступать в роли сервера NFS, нужно установить необходимые компоненты.

Итак, скачиваем пакет nfs-kernel-server, с помощью которого мы сможем раздать доступ (“расшарить”) директории. Для этого на будущем NFS сервере вводим команды:

sudo apt-get update
sudo apt-get install nfs-kernel-server

Теперь создаём собственно директорию к которой хотим раздать доступ. Стоит отметить, что можно также “расшарить” уже имеющиеся на сервере директории, но мы создадим новую:

sudo mkdir /var/nfs

Далее мы должны сделать так, чтобы владельцем директории /var/nfs и группе, к которой он принадлежит стали все пользователи в нашей системе. Для этого вводим на сервере команду:

sudo chown nobody:nogroup /var/nfs

Вводите эту команду только для тех директорий, которые создали сами, не надо вводить её для уже имеющихся директорий, например /home .

Следующим шагом необходимо изменить конфигурацию самого NFS, она лежит в файле /etc/exports, открываем его для редактирования любимым редактором:

sudo nano /etc/exports

Перед вами откроется конфигурационный файл с закомментированными строками, которые содержат примеры настройки для разных версий NFS.

Закомментированные – это те, в начале которых стоит символ #, и это значит, что параметры, указанные в них, не имеют силы.

Нам необходимо внести в этот файл следующие не закомментированные строки:

/var/nfs    10.10.0.10/24(rw,sync,no_subtree_check)

Где:

  • /var/nfs – Директория, которую мы хотим расшарить
  • 10.10.0.10 – IP-адрес и маска клиентского компьютера, которому нужно раздать доступ к директории
  • rw – Разрешает клиенту читать (r) и записывать (w) файлы в директории
  • sync – Этот параметр заставляет NFS записывать изменения на диск перед ответом клиенту.
  • no_subtree_check – Данная опция отключает проверку того, что пользователь обращается именно к файлу в определённом подкаталоге. Если это проверка включена, то могут возникнуть проблемы, когда, например, название файла или подкаталога было изменено и пользователь попробует к ним обратиться.

После этого, нужно создать таблицу соответствия расшаренных директорий и клиентов, а затем запустить NFS сервис. Для этого вводим следующие команды:

sudo exportfs –a
sudo service nfs-kernel-server start

После выполненных действий расшаренные директории должны стать доступными для доступа с клиентов.

Настройка kerberos[править]

Для rw каталогов желательно настроить kerberos.

TODO

Для read-only можно просто закоментировать в файле /etc/sysconfig/nfs строку

SECURE_NFS=yes

Настройка nfs клиента

Сначала создадим директорию, в которую будем понтировать NFS

# mkdir /mnt/aster/share

Если был создан доступ к NFS с
авторизацией, необходимо создать файл с авторизационными данными

# vim   /root/.smbcredentials   

И заполним файл следующим образом:

Настройка portmap (для p5 и ранее, устарело с p6)[править]

Для работы nfs необходим сервис portmap. По умолчанию, сервис portmap
запущен только на loopback (lo) интерфейсе в целях безопасности.
Этого достаточно для раздачи сетевых ресурсов через nfs4.

Однако при этом не будет работать монтирование каталогов по nfs3.
Если это действительно нужно, то
нехотя коментируем в файле /etc/sysconfig/portmap строку PORTMAP_ARGS=”-l”,
прописываем в /etc/hosts.allow сеть, в которую раздаем:

portmap mountd nfsd statd lockd rquotad : 192.168.ххх.0/255.255.255.0

и в /etc/hosts.deny:

portmap mountd nfsd statd lockd rquotad : ALL

Настройка rpcbind, для шестой платформы[править]

Начиная с шестой платформы portmap заменен на rpcbind. Настраивается аналогично portmap. Конфигурационный файл /etc/sysconfig/rpcbind, для использования nfs 3, закомментировать:

control rpcbind server

Настройка клиента nfs

После настройки сервера NFS нам нужно смонтировать этот общий каталог или раздел на клиентском сервере.

Настройка сервера nfs

Сначала мы будем настраивать сервер NFS.

Оптимизация сетевого стека

Современные операционные системы, в частности серверные версии Linux, которые чаще всего используются в качестве ОС для серверов хранения и виртуализации, по умолчанию не оптимизированы для конкретных ролей. Большинство компонентов и сервисов ОС настроены универсально для широкого круга задач и готовы к работе в любых условиях и на различном оборудовании.

Например, сетевой стек, без каких либо настроек способен одновременно поддерживать сотни подключений к веб-серверу и при этом обслуживать тяжелые операции чтения/записи в роле программного iSCSI SAN. Такой подход, понятен и он удобен в большинстве задач.

Но, в случае, когда требования к производительности высоки, для конкретных ролей, сервер и ОС должны быть дополнительно оптимизированы и настроены более тонко.Используя 1G Ethernet мы, по большему счету (в сравнении с FC), не получаем широких каналов и уж тем более приемлемого, критичного для ВМ времени отклика.

В таком случае, упираясь в производительность сетевого оборудования остается только попробовать оптимизировать работу сетевых протоколов, для получения максимального эффекта от того что имеем.К программной оптимизации можно отнести всевозможные методы ускорения сетевого стека ядра за счет переключения различных режимов или возможных выделений дополнительных ресурсов.

Опции монтирования (относится к nfs-клиентам)

Размеры блоков чтения и записи (rsize и wsize)

Эти опции отвечают за то, какими порциями nfs-клиент будет отправлять и получать данные за раз, в одном RPC-запросе.В идеале, значения этих опций не должны превышать размер MTU, так как в этом случае, возрастает фрагментация пакетов. Это приводит к дополнительным затратам на сборку пакетов как на сервере так и на клиенте и негативно сказывается на производительности.

Обычно, если опции rsize и wsize не заданы, то в зависимости от версии NFS или сборки будет читать и писать блоками по 4096 или 8192 байтов. Некоторые ядра Linux(в частности, сетевой стек) и сетевые кары не могут обрабатывать такие большие блоки, что приводит к деградации производительности.

#cat /proc/mounts
192.168.0.41:/NFS_Store/ /mnt nfs4
 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.1,minorversion=0,local_lock=none,addr=192.168.0.41 0 0

Выше приводится информация об одном из смонтированных каталогов. Здесь можно увидеть все опции монтирования, в том числе и желанные rsize и wsize.Данный вывод получен на ОС Ubuntu 12.04 с настройками по умолчанию.В дистрибутиве XenServer 6.0.

#mount -o rsize=8192,wsize=8192 SRV-01-CO-01:/NFS_Store/ /mnt

В данном примере, указанны значения в 8kb, что оптимально при включенных Jombo-кадрах(MTU=9000)

При подключении NFS-хранилища, например, в графической консоли Citrix XenCenter или VMware vSphere Client, опции монтирования так же указываются в соответствующих полях и разделах интерфейса.

Параметры nfs

Некоторые другие параметры, которые мы можем использовать в файле «/etc/exports» для обмена файлами, следующие.

ro: с помощью этой опции мы можем предоставить доступ только для чтения к общим файлам, т.е. клиент сможет только читать.rw: эта опция позволяет клиентскому серверу иметь права на чтение и запись в общем каталоге.sync: синхронизация подтверждает запросы к общему каталогу только после того, как изменения были зафиксированы.no_subtree_check: эта опция предотвращает проверку поддерева.

Когда общий каталог является подкаталогом более крупной файловой системы, nfs выполняет сканирование каждого каталога над ним, чтобы проверить его разрешения и детали. Отключение проверки поддерева может повысить надежность NFS, но снизить безопасность.no_root_squash: эта фраза позволяет пользователю root подключаться к указанному каталогу.Для получения дополнительной информации о «/etc/exports» рекомендуется прочитать справочные страницы для экспорта.

Подключить общий каталог nfs

Чтобы смонтировать этот общий каталог NFS, мы можем использовать следующую команду монтирования.

[[email protected] ~]# mount -t nfs 192.168.0.100:/nfsshare /mnt/nfsshare

Приведенная выше команда смонтирует этот общий каталог в «/mnt/nfsshare» на клиентском сервере. Вы можете проверить это следующей командой.



[[email protected] ~]# mount | grep nfs

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
nfsd on /proc/fs/nfsd type nfsd (rw)
192.168.0.100:/nfsshare on /mnt type nfs (rw,addr=192.168.0.100)

Приведенная выше команда mount временно смонтировала общий каталог nfs на клиенте nfs, чтобы постоянно монтировать каталог NFS в вашей системе при перезагрузках, нам нужно сделать запись в «/etc/fstab».

[[email protected] ~]# vi /etc/fstab

Добавьте следующую новую строку, как показано ниже.

192.168.0.100:/nfsshare /mnt nfs defaults 0 0

Преимущества nfs

  • NFS позволяет локальный доступ к удаленным файлам.
  • Он использует стандартную архитектуру клиент/сервер для обмена файлами между всеми компьютерами на *nix.
  • При использовании NFS не обязательно, чтобы обе машины работали в одной и той же ОС.
  • С помощью NFS мы можем настроить решения для централизованного хранения.
  • Пользователи получают свои данные независимо от физического местоположения.
  • Не требуется обновление вручную для новых файлов.
  • Более новая версия NFS также поддерживает acl, pseudo root mounts.
  • Может быть защищен с помощью брандмауэров и Kerberos.

Проблемы с запуском nfs на p8[править]

Симптомы:

# systemctl start nfs.service   
Job for nfs-server.service failed because the control process exited with error code.
See "systemctl status nfs-server.service" and "journalctl -xe" for details.
#systemctl status nfs-server.service
● nfs-server.service - NFS server and services
  Active: failed (Result: exit-code) since Сб 2020-11-12 14:10:48 EET; 3s ago
 Process: 4812 ExecStart=/usr/sbin/rpc.nfsd $NFSD_OPTIONS $NFSDCOUNT (code=exited, status=1/FAILURE)
 Process: 4810 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 4812 (code=exited, status=1/FAILURE)
ноя 12 14:10:48 birthday.localdomain systemd[1]: Starting NFS server and services...
ноя 12 14:10:48 birthday.localdomain rpc.nfsd[4812]: rpc.nfsd: unable to set any sockets for nfsd
ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Main process exited, status=1/FAILURE
ноя 12 14:10:48 birthday.localdomain systemd[1]: Failed to start NFS server and services.
ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Unit entered failed state.

отлаживаем rpc.nfsd (опция -d):

# rpc.nfsd -d 8
rpc.nfsd: knfsd is currently down
rpc.nfsd: Writing version string to kernel: -2  3  4 
rpc.nfsd: Created AF_INET TCP socket.
rpc.nfsd: Created AF_INET UDP socket.
rpc.nfsd: Created AF_INET6 TCP socket.
rpc.nfsd: writing fd to kernel failed: errno 97 (Address family not supported by protocol)
rpc.nfsd: unable to set any sockets for nfsd

Оказывается, включен ipv6 и включен протокол v.3 (см. version string to kernel: -2 3 4)
который не получается повесить на ipv6 адрес.

  • Решение1 (если nfs3 не нужен): выключить v.3 (опция -N3) в $NFSD_OPTIONS: прописываем в /etc/sysconfig/nfs

после чего nfs нормально запускается.

  • Решение2 (если нужен nfs3, не тестировал):

в /etc/netconfig закомментировать

#udp6       tpi_clts      v     inet6    udp     -       -
#tcp6       tpi_cots_ord  v     inet6    tcp     -       -

см. How to disable ipv6 in Debian

Проверьте работу установки nfs

Мы можем протестировать настройку нашего сервера NFS, создав тестовый файл на стороне сервера и проверив его доступность на стороне клиента nfs или наоборот.

Различные методики агрегации каналов

Одними из достоинств технологии Ethernet, являются ее гибкость и простота.Если дорогостоящие контроллеры с аппаратными функциями не вписываются в ваш бюджет, можно воспользоваться другим подходом.Например, обзавестись кучей дешевых контроллеров Gigabit Ethernet и воспользоваться одной из хорошо зарекомендовавших себя техник агрегации каналов.

Например, технология «Multipath IO» и ее реализация в linux (DM-Multipath) позволяет прозрачно для ОС и приложений агрегировать несколько каналов ведущих к одному дисковому массиву системы хранения в один логический. Тем самым пропорционально количеству каналов повышается производительность и отказоустойчивость в случае выхода одного из каналов.

Multipathing никак не отменяет все сказанное в этой статье, а является следующим шагом в оптимизации производительности сетевой подсистемы. На эту тему будет подготовлен отдельный материал.

Синтаксис для экспорта через nfs 3[править]

/mysharedir ipaddr1(rw)  ipaddr2(ro)

Например

/mysharedir 192.168.0.1/24(rw)

В скобочках указываются дополнительные параметры:

rw — разрешены чтение и запись
ro — разрешено только чтение
no_root_squash — отключение ограничения прав root

По умолчанию пользователь root имеет на смонтированных ресурсах права пользователя nobody.

Можно указывать разрешение экспорта сразу для подсети.
Например разрешение для машин из подсети 192.168.0.X строка будет выглядеть так:

/mysharedir 192.168.0.1/24(rw)

Подробную информацию о формате файла можно посмотреть командой man exports

Синтаксис для экспорта через nfs 4[править]

экспортируемые по NFS 4 каталоги имеют тот же синтаксис, что и через NFS3,
за исключением того, что все они должны быть в одном подкаталоге (chroot для безопасности).
Пусть это каталог /exports. Тогда необходимо подмонтировать остальные экспортированные каталоги
внутрь /exports с помощью mount –bind (mount –bind /mysharedir /exports/mysharedir), прописать в fstab:

/mysharedir     /exports/mysharedir   none    bind  0  0

и прописать в /etc/exports:
отличие от NFS3 в том, что нужно будет добавить nohide к mysharedir и явно
обьявить корневой каталог экспорта с fsid=0.

/exports        192.168.0.1/24(fsid=0,ro,insecure,all_squash)
/exports/mysharedir    192.168.0.1/24(nohide,ro,insecure,all_squash)

1. После настройки файла необходимо запустить сервис rpcbind (для p6,portmap для p5) командой:

(p5)# service portmap start
(p6)# service rpcbind start

2. Запустить непосредственно nfs-server командой:

# service nfs start

3. Запустить сервис блокировок командой:

# service nfslock start

Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим.
Дополнительно можно запустить команду exportfs, которая выведет текущие настройки на данный момент.
В случае нормальной работы она должна вывести на экран записи из файла /etc/exports

Для запуска сервисов при старте системы:

chkconfig rpcbind on (chkconfig portmap on)
chkconfig nfs on
chkconfig nfslock on

Скрипт для отправки бекапов на nfs шару

С скриптом для бекапов поступаем также, как и для записей разговоров, только меняются пути. Вместо пути к записям указываем путь к бекапам

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
if ! [ -d /mnt/aster/PBX_Backups ];   then
mkdir -p /mnt/aster/PBX_Backups
fi
cd /var/spool/asterisk/backup/Remote_backup
for i in $( find *.tgz   ); do
mv /var/spool/asterisk/backup/Remote_backup/$j   /mnt/aster/PBX_Backups/$j
ln -s /mnt/aster/PBX_Backups/$j   /var/spool/asterisk/backup/Remote_backup/$j
chown asterisk. /var/spool/asterisk/backup/Remote_backup -R
done   
  1. При выполнении
    скрипта проверяется, создана ли в директории /mnt/aster/ папка
    PBX_Backups. Если таковая не находится. То создает её.
  2. Переходит в директорию
    /var/spool/asterisk/backup/Remote_backup
  3. В цикле находит
    все файлы с расширением .tgz в данной директории
  4. Перемещает файлы
    в сетевую папку
  5. Создает символьную
    ссылку в директории /var/spool/asterisk/backup на файл, который был перемещен в
    сетевую папку
  6. Устанавливает
    права на символьные ссылки
Настройка NFS клиента и сохранение записей и бэкапов на NFS шару - Asterisk IP-телефония
Бэкапы

Теперь поместим исполнение этого файла в crontab

*/20 * * * * /root/backapstonfs.sh >/dev/null 2>&1   

Обязательно сделайте файл исполняемым

chmod  x /root/backapstonfs.sh

Скрипт для отправки записей на nfs шару

Для того, чтобы файлы записей астериска попадали на NFS сервер, напишем скрипт, который будет раз в 5 минут отправлять файлы в нужную нам директорию.

#!/bin/bash
export
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
datedir=$(date    "%Y/%m/%d")
if ! [ -d /mnt/aster/$datedir ];   then
        mkdir -p /mnt/aster/$datedir
fi
cd   /var/spool/asterisk/monitor/$datedir
for i in $( find *.mp3   ); do
           mv /var/spool/asterisk/monitor/$datedir/$i   /mnt/aster/$datedir/$i
           ln -s /mnt/aster/$datedir/$i   /var/spool/asterisk/monitor/$datedir/$i
           chown asterisk.   /var/spool/asterisk/monitor/$datedir -R
done  
  1. При выполнении
    скрипта проверяется, созданы ли директории /mnt/aster/ подпапки
    определенные в переменной date. К примеру,
    /mnt/aster/2020/12/05.
    Если таковых не найдется. То создает данные папки.
  2. Переходит в
    директорию /var/spool/asterisk/monitor/$datedir, где $datedir — переменная,
    определяющая текущую дату в формате ГГГГ/ММ/ДД
  3. В цикле находит
    все файлы с расширением .mp3 в данной
    директории
  4. Перемещает файлы
    в сетевую папку
  5. Создает
    символьную ссылку в директории /var/spool/asterisk/monitor/$datedir/ на файл,
    который был перемещен в сетевую папку
  6. Устанавливает
    права на символьные ссылки

Рис3. Monitor
(pic3.png)

Теперь поместим исполнение этого файла в crontab

*/20 * * * *   /root/tonfs.sh >/dev/null 2>&1   

Обязательно сделайте файл исполняемым

chmod  x /root/tonfs.sh

Службы nfs

Это сервис, запущенный System V. Серверный пакет NFS включает три средства, включенные в пакеты portmap и nfs-utils.

portmap: сопоставляет вызовы, сделанные с других компьютеров, с правильным сервисом RPC (не требуется для NFSv4).NFS: он переводит запросы удаленного обмена файлами в запросы в локальной файловой системе.rpc.mountd: этот сервис отвечает за монтирование и размонтирование файловых систем.

Теория

Аббревиатура NFS расшифровывается как Need for Speed – Network File System. Это протокол для доступа к распределённым сетевым файловым системам, с помощью которого можно подмонтировать удалённые директории к своему серверу. Это позволяет использовать дисковое пространство другого сервера для хранения файлов и регулярно производить запись данных на него с нескольких серверов.

Протокол имеет клиент-серверную модель, то есть один сервер (ещё его называют “шара” от слова share), с установленным пакетом NFS, будет обеспечивать доступ к своим каталогам и файлам, а клиентские компьютеры будут подключаться к нему по сети. Закрепим прочитанное схемкой:

Обращения к серверу NFS осуществляются в виде пакетов протокола RPC (Remote Call Procedure), который позволяет выполнить различные функции или процедуры в другом сетевом пространстве, то есть на удалённом сервере.

Увеличение mtu

Увеличение MTU (Maximum Transmission Unit) со стандартных 1500 до 9000 байт позволит сетевым контроллерам пропускать сверхдлинные Ethernet-кадры (Jumbo-кадры)[2].В RedHat-подобных дистрибутивах (CentOS, OpenFiler, XenServer) это делается в файле настроек конкретного сетевого контроллера(/etc/sysconfig/network-scripts/ifcfg-<

ИмяУстройства> где имя устройства, обычно eth<№>, где вместо № будет порядковый номер контроллера начиная с нуля(eth0, eth1 и т.д.). Меняем стандартное значение MTU=1500 на MTU=9000.Это увеличит размер передаваемых данных за раз в одном пакете (максимальный размер блока), что значительно повысит производительность вне зависимости от типа трафика, так как размер блока устанавливается на канальном уровне модели OSI прозрачно для высокоуровневых протоколов(NFS, iSCSI, CIFS и прочие)

Подобное увеличение кадра должно быть проделано на каждом из участвующих в обмене интерфейсах. В случае если Jumbo-кадры будут задействованы не на всех узлах, значительно возрастет фрагментация пакетов, что окажет только негативное воздействие на производительность.

Кроме всего прочего, включение сверхдлинных кадров снижает нагрузку на процессор за счет генерации меньшего числа пакетов.Не рекомендуется устанавливать значение MTU больше 9000 байт (максимально 16000 байт) поскольку в сетях Ethernet используется 32-битная CRC (алгоритм контроля целостности), который теряет свою эффективность при объеме данных больше 12000 байт; к тому же 9000 байт достаточно для передачи 8-килобайтной датаграммы (например такие как используются в NFS).

Удаление nfs монтирования

Если вы хотите размонтировать этот общий каталог со своего сервера после того, как вы закончили с общим доступом к файлам, вы можете просто размонтировать этот конкретный каталог с помощью команды «umount». Смотрите этот пример ниже.

[email protected] ~]# umount /mnt/nfsshare

Вы можете видеть, что размонтирование было выполнено, а затем снова посмотреть на файловую систему.

[[email protected] ~]# df -h -F nfs

Вы увидите, что эти общие каталоги больше не доступны.

Установка nfs-сервера и nfs-клиента

Нам нужно установить пакеты NFS на нашем сервере NFS, а также на компьютере клиента NFS. Мы можем установить его через установщики пакетов «yum» (Red Hat Linux) и «apt-get» (Debian и Ubuntu).

[[email protected] ~]# yum install nfs-utils nfs-utils-lib
[[email protected] ~]# yum install portmap (not required with NFSv4)
[[email protected] ~]# apt-get install nfs-utils nfs-utils-lib

Теперь запустите службы на обеих машинах.

[[email protected] ~]# /etc/init.d/portmap start
[[email protected] ~]# /etc/init.d/nfs start
[[email protected] ~]# chkconfig --level 35 portmap on
[[email protected] ~]# chkconfig --level 35 nfs on

После установки пакетов и запуска служб на обеих машинах нам необходимо настроить обе машины для обмена файлами.

Выводы

Сетевой стек так же, как и большинство серверных приложений и служб современных ОС, имеют достаточно универсальные настройки по умолчанию. Такие настройки позволяют одинаково не плохо (но и не очень хорошо) работать в различных условиях, не требуя вмешательства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *