среда, 31 октября 2012 г.

Разборки с LSI MegaRAID SAS 9240-8i

Собственно, поставили задачу поднять на SuperMicro X9SCI/X9SCA CentOS. Сервер слабенький, но дисков напихано 8 штук по 2 терабайта каждый. В поставку входит рэйд-контроллер LSI MegaRAID SAS 9240-8i. Заходим на сайт производителя и внимательно изучаем документацию. Скачиваем последние версии прошивки, драйверы, утилиты.
Обновление прошивки проходит с помощью утилиты MegaCli из ОС (на выбор DOS, Windows, Linux, FreeBSD, VMware, Solaris). В моем случае я сначала разбил диски на 2 виртуальных диска (2 в "зеркало", остальные в 5-й рэйд) и установил на один из них CentOS 6. Можно и выполнить прошивку рэйд-контроллера до установки, не суть важно. Главное, чтоб не пропало питание во время прошивки.

Установка утилиты тривиальна:
sudo rpm -ivh MegaCli-8.05.06-1.noarch.rpm
cd /opt/MegaRAID/MegaCli/

Сохранить текущую конфигурацию:
./MegaCli64 -CfgSave -f RaidCfgSave -a0

Распаковать прошивку в в папку с утилитой и выполнить прошивку:
./MegaCli64 -adpfwflash -f imr_fw.rom -a0

Цифра после a в предыдущих командах это номер адаптера в системе (в моем случае один адаптер с индексом 0). Узнать количество адаптеров можно командой ./MegaCli64 -adpCount

Перезагрузиться:
sudo reboot

Также на сайте производителя можно скачать пакет с MIBS. Требуется установка net-snmp:
sudo yum -y install net-snmp net-snmp-utils

Установка пакета от LSI
rpm -ivh sas_snmp-12.08-0303.x86_64.rpm

Копирование конфигурационного файла:
sudo mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.def
sudo cp /etc/lsi_mrdsnmp/lsi_mrdsnmpd.conf /etc/snmp/snmpd.conf

Перезапуска служб:
sudo service snmpd restart
sudo service lsi_mrdsnmp restart

Добавить в автозагрузку:
sudo chkconfig snmpd on
sudo chkconfig lsi_mrdsnmpd on

Скопировать MIBS в директорию с другими MIBS:
sudo cp /etc/lsi_mrdsnmp/sas/LSI-AdapterSAS.mib /usr/share/snmp/mibs/LSI-AdapterSAS.mib.txt

Проверка:
snmpwalk -v1 -c public 127.0.0.1 -m LSI-MegaRAID-SAS-MIB .1.3.6.1.4.1.3582

понедельник, 15 октября 2012 г.

Bind и кириллические домены

Пару дней назад возникла необходимость настроить на сервере кириллический домен. Если кратко, то имя домена декодируется по стандарту RFC3492, а затем прописывается в BIND как обычный домен. Online-перекодировщик предназначен для преобразования русских имён доменов в кодировку Punycode, которая используется в многоязычной системе доменных имён.
Заходим на данный сайт, вводим нужный нам домен, например, смарт.рф, на выходе получаем - xn--80axnbi.xn--p1ai.
Настройка bind.
В файле named.conf прописываем:


zone "xn--80axnbi.xn--p1ai" {
        type master;
        file "/etc/named/DOMAIN.RF";
};

Файл зоны DOMAIN.RF может быть таким:

$TTL    3600
xn--80axnbi.xn--p1ai.   IN    SOA   ns1.xn--80axnbi.xn--p1ai. noc.gmail.com. (
                        20121011 ; serial
                        28800
                        7200
                        604800
                        86400 )
                IN      NS      ns1.smart.ru.
                IN      NS      ns2.smart.ru.
@            IN      A         zz.zz.xx.xx

Также в настройках nginx или apache можно указывать в качестве имени сервера - xn--80axnbi.xn--p1ai. Например:
nginx
server_name smart.ru www.smart.ru xn--80axnbi.xn--p1ai;

apache2
ServerName smart.ru 
ServerAlias xn--80axnbi.xn--p1ai

суббота, 13 октября 2012 г.

Badblocks такие badblocks.

Буквально час назад появился увлекательный квест - вырубили электричество в моем и соседних домах, и все бы ничего да вот после возобновления подачи электричества перестала загружаться ОС. Жаловалась, что не могла прочитать сектор с диска. Очевидно, надо проверять жесткий диск на наличие badblocks. Диск терять было жалко. Рука сначала потянулась к HirenBoot CD, загрузился с него, запустил MHDD - не видит дисков. Ладно, есть установочный диск с Fedora, загрузился.
1. fdisk -l 
********************

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    51611647    25600000   83  Linux
/dev/sda3        51611648    55707647     2048000   82  Linux своп / Solaris
/dev/sda4        55707648   976773167   460532760    5  Расширенный
/dev/sda5        55709696   976773119   460531712   8e  Linux LVM

2. e2fsck -cvfp /dev/sda1
Отрабатывает нормально, без ошибок.
3. e2fsck -cvfp /dev/sda2
Вот тут на консоль посыпались сообщения вида:

Oct 13 21:32:47 Zeus kernel: [ 3336.559122] ata2.00: failed command: READ FPDMA QUEUED
Oct 13 21:32:47 Zeus kernel: [ 3336.559133] ata2.00: cmd 60/08:00:88:db:40/00:00:00:00:00/40 tag 0 ncq 4096 in
Oct 13 21:32:47 Zeus kernel: [ 3336.559135]          res 51/40:08:88:db:40/00:00:00:00:00/40 Emask 0x409 (media error) <F>
Oct 13 21:32:47 Zeus kernel: [ 3336.559147] ata2.00: status: { DRDY ERR }
Oct 13 21:32:47 Zeus kernel: [ 3336.559149] ata2.00: error: { UNC }
Oct 13 21:32:47 Zeus kernel: [ 3336.570044] ata2.00: configured for UDMA/133
Oct 13 21:32:47 Zeus kernel: [ 3336.570054] ata2: EH complete
Oct 13 21:32:51 Zeus kernel: [ 3340.200282] ata2.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
Неприятно. Жду пока отработает команда e2fsck. Выдает несколько ошибок о том, что проблема с инодами файла /var/log/messages, которые автоматически не исправляются. Ладно, запускаю:
4. e2fsck -cvfy /dev/sda2
Исправляет таки ошибки, помечает badblocks. Пробую перегрузиться
5. reboot
Система стартует нормально. Но, нужно покупать еще один жесткий диск и делать рэйд-массив, а пока - здоровья вам и вашим жестким дискам.

пятница, 12 октября 2012 г.

Журналирование событий iptables в отдельный файл

Имеется сервер с CentOS 6 с настроенным фаерволом (iptables). В правилах фаервола есть цепочка:

-N drop-and-log-it
-A drop-and-log-it -j LOG
-A drop-and-log-it -j REJECT --reject-with icmp-host-prohibited
 Данная цепочка вызывается далее в правилах для логгирования определенных событий, например, логгирования попыток соединения к mysql:
-A INPUT -p tcp -m tcp --dport 3306 -j drop-and-log-it

По умолчанию записи попадают в файл /var/log/messages. Записей следующего вида бывает много, что затрудняет чтение данного файла:
Oct 12 22:31:31 web01 kernel: IN=eth0 OUT= MAC=30:85:a9:a4:ee:55:78:fe:3d:46:ec:88:08:00 SRC=Z.Z.Z.Z DST=X.X.X.X LEN=60 TOS=0x10 PREC=0x00 TTL=55 ID=51274 DF PROTO=TCP SPT=38133 DPT=3306 WINDOW=14600 RES=0x00 SYN URGP=0

Нужно выделить сообщения фаервола в отдельный файл. Логгированием занимается rsyslog, следовательно, настраивать будем правила в конфигурационном файле /etc/rsyslog.conf, но сначала изменим цепочку drop-and-log-it, добавив специальный префикс "iptables: " для дальнейшего отлова данных сообщений. Итак, полностью цепочка выглядит так:

-N drop-and-log-it
-A drop-and-log-it -j LOG  --log-prefix "iptables: "
-A drop-and-log-it -j REJECT --reject-with icmp-host-prohibited


Перезапускаем фаервол:
sudo service iptables restart

Редактируем файл /etc/rsyslog.conf, перед правилами в секции RULES вставляем:
:msg, startswith, "iptables: " -/var/log/iptables.log
& ~


Сохраняем файл и перезапускаем rsyslog.
sudo service rsyslog restart

Для автоматической ротации файла /var/log/iptables создаем файл /etc/logrotate.d/iptables с таким содержанием:
/var/log/iptables.log
{
        rotate 5
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                service rsyslog reload > /dev/null
        endscript
}