среда, 28 апреля 2010 г.

NAS - Dlink DNS323 - as backup system and NAS

DNS-323
Появилась небольшая задача:
  • организовать файло-помойку НЕ на сервере - дабы не занимать ценное место на сервере говном, ценной информацией. (samba + quotas)
  • организовать резервное копирование пользовательских данных: огромного количество дерьмища  баз 1c, документов пользователей с локальных машин, конфигурационных файлов с серверов и Кисок. (smb, rsynced, rsh)
  • добавить в существующий мониторинг  основные параметры  (munin)
  • крипто-контейнер (crypto-loop)
  • новостной портал компании (lightttp/php/mysql/perl) 
  • торрент-клиент !!
  • ftp/sftp
Дополнительное условия:
  • невысокая цена (железка валялась после закрытия одного из филиалов ) 
  • низкое энергопотребление/тепловыделение
  • небольшие размеры  (в стойке место закончилось)
  • надёжное хранение (RAID-1)
Результат - после 3 минутного колебания между VM, VPS, vmware-guest остановился на первоначальном варианте (пришел в голову до всего вышеперечисленного :) ) - сделать так, как обычно делаю для себя - небольшое embeded устройство с запуском Linux  - магия :)
И вот как в известном анекдоте И теперь с этим придуманным дерьмом попытаемся взлететь ...
Prerequisites (Необходимо-дано):
  1. Dlink DNS-323 Firmware 1.08
  2. 2 x Samsung 500 GB
  3. raid-1
  4. устройство настроено и работает в штатном режиме ( настроен LAN, созданы шары/ пользователи)
Начнем (samba):

  Устанавливаем fonz fun_plug  активируем telnet и ssh.
В настройке по умолчанию SAMBA есть проблема, для возможности гостевого просмотра шар, в случае использования  security = USER,  добавляем в /etc/samba/smb.conf  раздел [ global ] опцию  map to guest = Bad User  более детально я уже писал чуть ранее в моем блоге.

  Читаем http://wiki.dns323.info/howto:ffp для понимания основ.

   Далее полезно прочитать: http://wiki.dns323.info/howto:1st_steps в основном шаги "Step 6. Install repository for local use" и "Step 7. Install MidnightCommander"
 Для облегчения последующих задач добавляем optware ipkg http://wiki.dns323.info/howto:optware

  В результате получим файловую помойку с поддержкой пользователей, квот на raid-1 и хороший задел в виде консольного доступа и готовый пакетных менеджеров ipkg / dpkg.

Резервное копирование (backuppc):
  •   Опираемся целиком на http://wiki.dns323.info/howto:backuppc, но есть некоторые но: "CPAN" shell у меня съедает всю память и не может нормально выполнять свои задачи - ставим все библиотеки из span в ручную 
  •  При установки backuppc - получаем ошибку <Bareword "compareLOGName" not allowed> - решается заменой в lib/BackupPC/Lib.pm в районе 1466 строки  return sort(compareLOGName @files); на return sort compareLOGName @files;
 Мониторинг (munin-node):

   Для установки я использовал достаточно старую версию munin-1.2.5. (у меня достаточно старый munin-master). Установка сводится к установки зависимостей (большинство поставлено во время backuppc, но Net::Server::Fork поставить нужно отдельно) и редактированию Makefile.config:

...# В самое начало добавляем destdir - решит проблему с размещением файлов.DESTDIR    = /ffp...

  После  make install-node проверяем скрипты и так же правим пути добавляя  /ffp  перед указанными каталогами и в munin-node правим в коде расположение pid ( pid_file => "/ffp/var/run/munin/munin-node.pid" ) , так же поправить /ffp/etc/opt/munin/munin-node.conf на предмет путей к pid и разрешений для доступа например allow ^192\.168\.0\.200$, где 192.168.0.200 – ваш адрес munin-master

 После этого можно делать 

#munin-node-configure –shell | sh

И запускать при старте munin-node – я сделал таким скриптом:

#!/bin/sh

# PROVIDE: munin-node
# REQUIRE: DAEMON
# BEFORE:  LOGIN
# KEYWORD: shutdown

. /ffp/etc/ffp.subr

name="munin-node"
start_cmd="munin_node_start"
restart_cmd="munin_node_restart"
stop_cmd="munin_node_stop"
status_cmd="munin_node_status"

munin_node_start()
{
    /ffp/opt/munin/sbin/munin-node
    echo "${name} started"
}

munin_node_restart()
{
    munin-node_stop
    sleep 1
    munin-node_start
}

munin_node_stop()
{
    /ffp/bin/pkill -f "munin-node"
    echo "${name} stopped"
}

munin_node_status()
{
    if [ "`ps ax | grep "munin-node" | grep -v "grep"`" = "" ] ; then
        echo "${name} not running"
    else
        echo "${name} running"
    fi
}


extra_commands="status"
run_rc_command "$1"

Проверяем с master-node

eugen@indigo:~$ telnet 192.168.95.20 4949
Trying 192.168.95.20...
Connected to 192.168.95.20.
Escape character is '^]'.
# munin node at dlink-17080D
list
open_inodes irqstats entropy df_inode cpu df_abs processes acpi open_files forks iostat memory df interrupts swap dns323_fan load
Всё в порядке.
Про доработку плугинов в следующей части.


... ещё пишу ...

Комментариев нет: