Translate

Показ дописів із міткою storage. Показати всі дописи
Показ дописів із міткою storage. Показати всі дописи

понеділок, 28 жовтня 2013 р.

ZFS filesystem on Linux (configuration and performance)

ZFS (Zettabyte File System) - 128-бітна файлова система, створена в Sun Microsystems в 2004 році. Вона об'єднує концепції файлової системи, менеджера логічних дисків і фізичних носіїв, новаторську структуру даних на дисках, а також просте управління томами зберігання даних. ZFS не без підстав називають найбільш функціональною у світі файловою системою.

Подейкують, що ZFS - це розробка інженерів, котрих перекупив Sun (тепер Oracle) в NetApp, через що це ніби як копія WAFL.
Підтримка файлової системи ZFS у Лінуксі реалізована у якості модуля, адже включити його прямісінько в ядро не дозволяє конфлікт ліцензій GPL v2 та CDDL, під якою і було випущено ZFS.

Часом ZFS докоряють тим, що це не unix-way включати купу можливостей (LVM, Raid та ін) в саму файлову систему, краще щоб кожну роль виконувала окрема програма. Проте з іншої сторони таким чином досягається кращий рівень інтегрованості між собою цих можливостей в одній системі.

Починаючи з травня 2013 (версія 0.6.1) файлову систему вважають готовою для використання в  production ситемах.

Наведу приклад установки і налаштування ZFS-розділу в Ubuntu 12.04.3.  Підтримка ZFS в Debian-подібних системах реалізована через модулі dkms, пакети яких розповсюджуються через ppa-репозиторій. Тож спершу додамо репозиторій і встановимо модулі:

# add-apt-repository ppa:zfs-native/stable
# apt-get update
# apt-get upgrade
# apt-get install ubuntu-zfs

неділя, 28 липня 2013 р.

Network File System (NFS)

Network File System (NFS) — протокол мережевого доступу до файлових систем, що був розроблений компанією Sun Microsystems у 1984 році. Заснований на протоколі виклику віддалених процедур (ONC RPC, Open Network Computing Remote Procedure Call). Дозволяє підключати (монтувати) віддалені файлові системи через мережу.
    NFS надає клієнтам прозорий доступ до файлів і файлової системи сервера. На відміну від FTP, протокол NFS здійснює доступ тільки до тих частин файлу, до яких звернувся процес, і основна перевага його в тому, що він робить цей доступ прозорим. Це означає, що будь-який сервіс/програма клієнта, що може працювати з локальним файлом, із таким же успіхом зможе працювати і файлом, що доступний через NFS, без будь-яких модифікацій самої програми.
NFS-клієнти одержують доступ до файлів на NFS-сервері шляхом відправлення RPC-запитів на сервер.(c) Wikipedia

Процес монтування каталогу віддаленого NFS-серверу можна розбити на такі кроки:

1. На сервері та клієнті на 111 порту udp та tcp запускається RPC-сервер (представлений як rpcbind). Він завантажується разом із запуском NFS-демону.
2. Запускаються служби rpc.statd, rpc.idmapd, rpc.statd і тд., що реєструються на довільних мережевих портах.
3. Команда mount на клієнті створює запит (із вказанням ip/доменнейму, каталогу) на монтування каталогу до ядра ОС. На що ядро формує і відсилає запит на віддалений RPC-сервер, на сервер, де власне локально зберігається необхідний каталог.
4. Ядро NFS-серверу через rpcbind перевіряє наявність процеса rpc.mountd і повертає номер порту, на якому він працює (знову, використовуючи RPC-протокол), ядру клієнта, що надав запит на монтування.
5. Отримавши номер порту, mount відправляє RPC-запит на отриманий порт серверу. Надалі сервер перевіряє дозволи і надає відповідні права на запитану директорію.
6. Демон монтування rpc.mountd на NFS-сервері повертає опис запитаної директорії і на основі цих данних проходить монтування директорії. Надалі в дереві директорій вона буде представлена як звичайна директорія.

Доступ до файлу в директорії, що примонтована як NFS, відбувається через модуль ядра nfsd/nfs, котрий вже потім надсилає запит на віддалений RPC-сервер (зазвичай на порт 2049, що відповідає за роботу з NFS). Тобто для клієнтських програм, що запитують файл на віддаленому розділі не важливо, що це не локальний файл, адже всі додаткові операції виконує ядро ОС та модуль ядра nfsd/nfs.

Щоб дізнатись на яких портах працюють RPC-програми, можна виконати таку команду:

# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  54107  status
    100024    1   tcp  56055  status
    100003    2   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049
    100003    2   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049
    100021    1   udp  39802  nlockmgr
    100021    4   udp  39802  nlockmgr
    100021    1   tcp  32786  nlockmgr
    100021    4   tcp  32786  nlockmgr
    100005    1   udp  49768  mountd
    100005    2   udp  43705  mountd
    100005    2   tcp  54465  mountd
    100005    3   tcp  35113  mountd

неділя, 16 червня 2013 р.

RAID: теорія та практика

Жорсткий диск завжди вважався "вузьким" місцем системи в плані надійності і, зазвичай, швидкості. Саме тому людство придумало таку технологію як RAID, що здатна в певній мірі підвищити ці показники, проте звісно не без втрат. Про це і піде далі мова.
   RAID (англ. redundant array of independent/inexpensive disks) - надлишковий масив дисків, що покликаний підвищити надійність та/або швидкість роботи постійної пам'яті. В залежності від рівня, RAID буває:

1) RAID 0 - масив, як мінімум із 2-х дисків, дані на яких розподіляються частинами (блоками) і записується відповідно на кожен диск. Тобто кожен блок знаходиться лише на одному диску. Таким чином цей масив значно підвищує швидкість запису/читання проте аж ніяк не підвищує надійність.


2) RAID 1 - дзеркальний масив. Дані на кожному із дисків ідентичні. Організація масиву в RAID 1 підвищує швидкість  читання та рівень надійності дискової системи (при пошкодженні одного із дисків, система буде працювати з іншим робочим), але все це за рахунок втрати корисної ємності одного із дисків. Тобто використовуючи два диски місця буде доступно вдвічі менше, адже вони оперують тими ж самими даними.


неділя, 9 червня 2013 р.

Використання Logical Volume Manager (LVM)

Вирішив написати пару слів про LVM, адже використання цієї технології при налаштуванні серверів досить актуальне та і щоб просто не забути.

LVM (Logical Volume Manager) - менеджер логічних томів, додатковий рівень абстракції між фізичними (/dev/sda1, /dev/sda2 і  т.д.) та логічними томами ( /home, /root, /boot і т.д.), що значно підвищує гнучкість файлової системи. Використовуючи менеджер логічних томів, можна відносно легко змінювати розмір вже існуючих логічних томів (додавши новий HDD, можна просто пододавати місця на уже створені розділи, таким чином вирішивши проблему браку місця) чи робити бекапи без перевантаження/вимкнення/зупинки сервісів. Створення розділів з LVM не обмежене розміром фізичного диска, тобто один розділ може займати розмір декількох вінчестерів чи розділ може знаходитись частково на декількох HDD.

Отже схематично рівні знаходяться так:


PV- Physical volume, фізичний том. Це власне диск чи просто розділ на диску.
VG - Volume group, группа томів. Найвищий рівень абстрактної моделі LVS. До групи томів входять фізичні томи.
LV - Logical volume, логічний том. Власне це еквівалент звичайного розділу в не-LVM системі. В данному випадку Volume group поділяється на окремі розділи на зразок /dev/mapper/diskone, /dev/mapper/disktwo. Наділі кожний логічний том монтується в відповідну директорію /, /usr, /home і т.д.

Переходимо до практики. Перш за все встановимо пакет для підтримки LVM:

# apt-get install lvm2

Необхідно створити чи використати існуючі неформатовані розділи. За допомогою fdisk я створив два тестових розділи /dev/sda7 та /dev/sda8 і ініціалізував їх для використання як розділів для LVM:

# pvcreate /dev/sda7
# pvcreate /dev/sda8