Thursday, 31 October 2013
Tuesday, 29 October 2013
Build vzctl from source code on CentOS 6
Во-первых, сначала подключите openvz репозиторий, так как ploop-devel есть только там.
Собираем:
Собираем:
yum install -y automake libxml2-devel libtool ploop-devel libcgroup-devel git
cd /usr/src
git clone git://git.openvz.org/vzctl
cd vzctl
./autogen.sh
./configure --prefix=/opt/vzctl
make
make install
Вуаля:
/opt/vzctl/sbin/vzctl --version
vzctl version 4.5.1-55.git.0da90c7
Бесплатная версия Nginx Plus
Уверен, многие слышали про платную коммерческую версию Nginx Plus. И всецело уверен, что ее никто из читающих меня не купил и не купит по причине неадекватнейшей стоимости - несколько тысяч долларов в год.
Я, безусловно, уважаю автора данного ПО, оно используется мной и нашей компанией повсеместно. Спасибо!
Но я нифига не уважаю их новый состав коммерцизирующий данный продукт и все последствия данного процесса.
В открытой версии Nginx откровенно саботировался ряд фич (в том числе Игорем, к сожалению):
Я не придерживаюсь взглядов, что все должно быть бесплатно, люди должны зарабатывать деньги - тем более, на своем собственном продукте, но в разумных рамках и разумных ценах.
В ответ на это я предлагаю отличнейшее решение от наших китайских друзей - Taobao, Tengine - это полностью бинарно совместимый с Nginx.org веб-сервер, но с кучей полезнейших фич (которые nginx.org саботирует от включения в опен сорц версию).
Вот часть из суперфич:
Прошу: https://github.com/alibaba/tengine
Я, безусловно, уважаю автора данного ПО, оно используется мной и нашей компанией повсеместно. Спасибо!
Но я нифига не уважаю их новый состав коммерцизирующий данный продукт и все последствия данного процесса.
В открытой версии Nginx откровенно саботировался ряд фич (в том числе Игорем, к сожалению):
- syslog логгирование
- динамический модули
- тестирование состояния бэкэндов
- нормальное, а не ущербное отображения состония
- многое-многое другое
Я не придерживаюсь взглядов, что все должно быть бесплатно, люди должны зарабатывать деньги - тем более, на своем собственном продукте, но в разумных рамках и разумных ценах.
В ответ на это я предлагаю отличнейшее решение от наших китайских друзей - Taobao, Tengine - это полностью бинарно совместимый с Nginx.org веб-сервер, но с кучей полезнейших фич (которые nginx.org саботирует от включения в опен сорц версию).
Вот часть из суперфич:
- All features of nginx-1.2.9 are inherited, i.e., it is 100% compatible with nginx.
- Dynamic module loading support. You don't need to recompile Tengine when adding new modules to it.
- Sends unbuffered upload directly to HTTP and FastCGI backend servers, which saves disk I/Os.
- More load balancing methods, e.g., consistent hashing, and session persistence.
- Input body filter support. It's quite handy to write Web Application Firewalls using this mechanism.
- Dynamic scripting language (Lua) support, which is very efficient and makes it easy to extend core functionalities.
- Logging enhancements. Syslog (local and remote), pipe logging, and log sampling are supported.
- Includes a mechanism to support standalone processes.
- Protects the server in case system load or memory use goes too high.
- Multiple CSS or JavaScript requests can be combined into one request to reduce download time.
- Removes unnecessary white spaces and comments to reduce the size of a page.
- Proactive health checks of upstream servers can be performed.
- The number of worker processes and CPU affinities can be set automatically.
- The limit_req module is enhanced with whitelist support and more conditions are allowed in a single location.
- Enhanced diagnostic information makes it easier to troubleshoot errors.
- More user-friendly command lines, e.g., showing all compiled-in modules and supported directives.
- Expiration times can be specified for certain MIME types.
- Error pages can be reset to 'default'.
Прошу: https://github.com/alibaba/tengine
Thursday, 24 October 2013
Практический опыт с HDFS
Вот поставил на две ноды, радуюсь. И сломал через 25 минут после установки - появились corrupted nodes ( Corrupt blocks: 1), забил, удалил файл и залил заново - все заработало.
Попробовал отключить один из серверов (на оставшемся были все реплики) и получил следующее:
Который через 4 секунды теста показывает серьезные повреждения:
P.S. НЕ ВЕРЬТЕ, что hadoop будет работать на _любом железе_. ECC/chipkill - must have.
Попробовал отключить один из серверов (на оставшемся были все реплики) и получил следующее:
sudo -u hdfs hadoop fs -get /mydir/1Gb.dat /tmp/asdasdНу и после 3х минут чесания репы и понимания - сломать _самому_ кластерную супернадежную ФС - это уж слишком, тянусь к мемтестеру :)
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fca186b3792, pid=13965, tid=140505678411520
#
# JRE version: Java(TM) SE Runtime Environment (7.0_45-b18) (build 1.7.0_45-b18)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V [libjvm.so+0x55b792] PhaseCFG::schedule_node_into_block(Node*, Block*)+0xc2
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /tmp/hs_err_pid13965.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
[root@hadoop tmp]# cat /tmp/hs_err_pid13965.log
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fca186b3792, pid=13965, tid=140505678411520
#
# JRE version: Java(TM) SE Runtime Environment (7.0_45-b18) (build 1.7.0_45-b18)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# V [libjvm.so+0x55b792] PhaseCFG::schedule_node_into_block(Node*, Block*)+0xc2
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# http://bugreport.sun.com/bugreport/crash.jsp
#
Который через 4 секунды теста показывает серьезные повреждения:
memtester 12000
memtester version 4.2.1 (64-bit)
Copyright (C) 2010 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).
pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 12000MB (12582912000 bytes)
got 12000MB (12582912000 bytes), trying mlock ...locked.
Loop 1:
Stuck Address : testing 0FAILURE: possible bad address line at offset 0xd8ccd000.
Skipping to next test...
Random Value
P.S. НЕ ВЕРЬТЕ, что hadoop будет работать на _любом железе_. ECC/chipkill - must have.
Wednesday, 23 October 2013
Установка HDFS на базе Cloudera Hadoop 4.4.0 для CentOS 6
Что есть HDFS?
HDFS - это распределенная файловая система. В данной инструкции мы поставим ее в тестовом режиме! Это небезопасно, в боевом режиме Вы обязательно должны настроить HA или копирование на NFS для метаданных.
Пару слов об аппаратной конфигурации - для начала, мы развертываем HDFS на одном сервере с двумя жесткими дисками (иначе вообще вся затея с распределенной ФС становится бессмысленной). В моем примере диски смонтированы как /data/disk1 и /data/disk2.
Конфигурируем hostname и /etc/hosts
В самом-самом начале пути нужно сделать следующее - открыть редактором /etc/sysconfig/network и в поле HOSTNAME вписать корректный хостнейм адрес машины в виде:
Следом открыть файл hosts: /etc/hosts и там вписать/исправить следующее:
Итак, для работы Cloudera нам нужна Java версии 1.7 (я использовал update 45), так что идем на сайт Oracle и стягиваем там "jre-7-linux-x64.rpm".
Водружаем ее:
Проверяем, что все встало корректно:
Стягиваем репо:
Ставим все, что нужно для работы Hadoop HDFS (почти 200 мегабайт пакетов):
Далее открываем файл /etc/hadoop/conf.my_cluster/hdfs-site.xml и в блок configuration вносим:
И конфигурируем их права:
Теперь форматируем namenode:
Запускаем namenode:
Запускаем data node:
Создаем свою первую папку:
Смотрим листинг корневой директории:
Мониторинг HDFS
Его можно осуществлять посредством веб-скрипта: http://IP_адрес_вашей_namenode:50070/dfshealth.jsp
Настройка HDFS Fuse
Так как каждый раз пользоваться hadoop fs неудобно далеко не всегда, я рекомендую использовать Fuse модуль, чтобы смонтировать HDFS как обычную ФС (не забываем, HDFS - не Posix! Блокировки и правки файлов не поддерживаются).
В следующей публикации я постараюсь поставить второй сервер как datanode, чтобы на практике протестировать функцию отказоустойчивости HDFS
Установка datanode на отдельном сервере
Устанавливаем Java по аналогии с предыдущим сервером, далее также конфигурируем hostname и /etc/hosts. Данный сервер назовем data1-hadoop.fastvps.ru.
Далее ставим hadoop data node:
<property><name>fs.trash.interval</name> <value>10080</value> </property>
Создаем необходимую папку:
Выставляем права:
Запускаем data node:
Теперь можно открыть статистику HDFS и смотреть, как блоки нашего 10 гигабайтного файла реплицируются на вновь добавленный сервер.
Как репликация закончится, можно смело отключать второй сервер (отключив сервер с name node Вы выведете кластер из строя, да) и продолжать работать с файловой системой как ни в чем ни бывало!
Ура!
Источник: http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.0/CDH4-Installation-Guide/cdh4ig_topic_11_2.html
HDFS - это распределенная файловая система. В данной инструкции мы поставим ее в тестовом режиме! Это небезопасно, в боевом режиме Вы обязательно должны настроить HA или копирование на NFS для метаданных.
Пару слов об аппаратной конфигурации - для начала, мы развертываем HDFS на одном сервере с двумя жесткими дисками (иначе вообще вся затея с распределенной ФС становится бессмысленной). В моем примере диски смонтированы как /data/disk1 и /data/disk2.
Конфигурируем hostname и /etc/hosts
В самом-самом начале пути нужно сделать следующее - открыть редактором /etc/sysconfig/network и в поле HOSTNAME вписать корректный хостнейм адрес машины в виде:
HOSTNAME=hadoop.fastvps.ru
Следом открыть файл hosts: /etc/hosts и там вписать/исправить следующее:
88.198.XX.XX hadoop.fastvps.ru hadoop
Где 89.198.XX.XX - ВНЕШНИЙ IP адрес сервера, НЕ localhost/127.0.0.1.
После этого в обязательном порядке перезагружаемся, чтобы система подхватила обновленный hostname.
Теперь проверяем, чтобы хостнейм резолвился во внешний IP командой ping (запись в DNS в данный момент не нужна):
ping -c 1 hadoop.fastvps.ru
PING hadoop.fastvps.ru (89.198.XX.XX) 56(84) bytes of data.
64 bytes from hadoop.fastvps.ru (89.198.XX.XX): icmp_seq=1 ttl=64 time=0.025 ms
--- hadoop.fastvps.ru ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.025/0.025/0.025/0.000 ms
Все, это позволит избежать кучи проблем в будущем. Корректный хостнейм ОЧЕНЬ важен для Hadoop, кривые данные в нем могут привести к очень и очень плачевным последствиям.
Устанавливаем Java
Устанавливаем Java
Итак, для работы Cloudera нам нужна Java версии 1.7 (я использовал update 45), так что идем на сайт Oracle и стягиваем там "jre-7-linux-x64.rpm".
Водружаем ее:
yum install -y jre-7-linux-x64.rpm
Проверяем, что все встало корректно:
java -versionУстанавливаем Cloudera Hadoop
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
Стягиваем репо:
wget http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/cloudera-cdh4.repo -O/etc/yum.repos.d/cloudera-cdh4.repo
Ставим все, что нужно для работы Hadoop HDFS (почти 200 мегабайт пакетов):
yum install hadoop-hdfs-namenode hadoop-hdfs-datanode hadoop-client
Копируем стандартный конфиг для правки:
cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
Теперь нужно настроить кластер, в файле /etc/hadoop/conf.my_cluster/core-site.xml
В блок confguration вносим следующее (это имя нашего кластера):
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.fastvps.ru/</value>
</property>
<property><name>fs.trash.interval</name> <value>10080</value> </property>Второй параметр отвечает за активацию корзины (и ее автоочистки через неделю после удаления файла). Обращаю внимание, что корзина работает только с hdfs shell, через API файлы сносятся сразу же.
Далее открываем файл /etc/hadoop/conf.my_cluster/hdfs-site.xml и в блок configuration вносим:
<property> <name>dfs.permissions.superusergroup</name>
<value>hadoop</value></property>
<property> <name>dfs.namenode.name.dir</name>
<value>/data/disk1/dfs/namenode
</value> </property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/disk1/dfs/datanode,/data/disk2/dfs/datanode</value>
</property>
<property>
<name>dfs.datanode.failed.volumes.tolerated</name>
<value>1</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
Тут мы задаем пути до папок хранения данных namednode (тут будут метаданные) и datanode (тут будут сами данные). С предпоследним параметром интереснее - это предельное число data нод, которые могут отказать на данном сервере. А вот последний параметр задает стандартное число реплик для файлов. Стандартно стоит 3, но это неудобно для тестового стенда.
Создаем указанные папки (предполагаем, что диски 1 и 2 смонтированы в /data/disk1 и /data/disk2 соответственно):
mkdir -p /data/disk1/dfs/namenode
mkdir -p /data/disk1/dfs/datanode
mkdir -p /data/disk2/dfs/datanode
И конфигурируем их права:
chown -R hdfs:hdfs /data/disk1/dfs/namenode /data/disk1/dfs/datanode /data/disk2/dfs/datanode
chmod 700 /data/disk1/dfs/namenode
Теперь форматируем namenode:
sudo -u hdfs hadoop namenode -format
Запускаем namenode:
/etc/init.d/hadoop-hdfs-namenode start
Запускаем data node:
/etc/init.d/hadoop-hdfs-datanode start
Создаем свою первую папку:
sudo -u hdfs hadoop fs -mkdir /mydirТестируем работу HDFS
Смотрим листинг корневой директории:
sudo -u hdfs hadoop fs -ls /
Found 1 items
drwxr-xr-x - hdfs hadoop 0 2013-10-24 00:26 /mydir
Кладем файл в HDFS (ВНИМАНИЕ! НЕ забываем, что мы работаем от имени пользователя hdfs, так что файл в локальной ФС должен быть доступен ему на чтение):
sudo -u hdfs hadoop fs -put /tmp/jre-7-linux-x64.rpm /mydir
Убеждаемся, что он лег:
sudo -u hdfs hadoop fs -ls /mydir
Found 1 items
-rw-r--r-- 3 hdfs hadoop 21203924 2013-10-24 00:36 /mydir/jre-7-linux-x64.rpm
Кстати говоря, большой тестовый файл можно взять вот здесь: http://proof.ovh.net/files/
Мониторинг HDFS
Его можно осуществлять посредством веб-скрипта: http://IP_адрес_вашей_namenode:50070/dfshealth.jsp
Настройка HDFS Fuse
Так как каждый раз пользоваться hadoop fs неудобно далеко не всегда, я рекомендую использовать Fuse модуль, чтобы смонтировать HDFS как обычную ФС (не забываем, HDFS - не Posix! Блокировки и правки файлов не поддерживаются).
yum install hadoop-hdfs-fuseМонтируем:
hadoop-fuse-dfs dfs://hadoop.fastvps.ru:8020 /mntВуаля, тот же файлик доступен как обычная файловая система:
ls -al /mnt/mydir/
итого 11G
drwxr-xr-x 3 hdfs hadoop 4,0K Окт 24 03:30 .
drwxr-xr-x 3 hdfs hadoop 4,0K Окт 24 03:21 ..
-rw-r--r-- 1 hdfs hadoop 10G Окт 24 03:30 10Gio.dat
Отмонтировать его можно стандартно:
umount /mntЧто дальше?
В следующей публикации я постараюсь поставить второй сервер как datanode, чтобы на практике протестировать функцию отказоустойчивости HDFS
Установка datanode на отдельном сервере
Устанавливаем Java по аналогии с предыдущим сервером, далее также конфигурируем hostname и /etc/hosts. Данный сервер назовем data1-hadoop.fastvps.ru.
Подразумеваем, что на данном сервере у нас один жесткий диск и он смонтирован в /data/disk1.
Так как мы подошли к вопросу распределенной фермы, то мы должны адрес name node забить в DNS либо же на каждой data node создать следующую запись в hosts (обоих серверов!!! Также нужно добавить хостнейм клиента на name node, то есть они должны знать друг друга! Иначе ничего работать не будет! Лучше всего, сразу внесите записи в DNS до начала тестов, а также убедитесь, что дата ноды и name нода находятся в одном домене второго уровня):
88.198.xx.xx hadoop.fastvps.ru hadoop
Далее ставим hadoop data node:
yum install -y hadoop-hdfs-datanode
Копируем стандартный конфиг для правки:
cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
Теперь нужно настроить кластер, в файле /etc/hadoop/conf.my_cluster/core-site.xml
В блок confguration вносим следующее (это имя нашего кластера):
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.fastvps.ru/</value>
</property>
Далее открываем файл /etc/hadoop/conf.my_cluster/hdfs-site.xml и в блок configuration вносим:
<property> <name>dfs.permissions.superusergroup</name>
<value>hadoop</value></property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/disk1/dfs/datanode</value>
</property>
mkdir -p /data/disk1/dfs/datanode
Выставляем права:
chown -R hdfs:hdfs /data/disk1/dfs/datanode
Запускаем data node:
/etc/init.d/hadoop-hdfs-datanode start
Теперь можно открыть статистику HDFS и смотреть, как блоки нашего 10 гигабайтного файла реплицируются на вновь добавленный сервер.
Как репликация закончится, можно смело отключать второй сервер (отключив сервер с name node Вы выведете кластер из строя, да) и продолжать работать с файловой системой как ни в чем ни бывало!
Ура!
Источник: http://www.cloudera.com/content/cloudera-content/cloudera-docs/CDH4/4.2.0/CDH4-Installation-Guide/cdh4ig_topic_11_2.html
Tuesday, 22 October 2013
Е***ый стыд и Mail.Ru
Гиганты Мысли 32 битные, правда :) Ржал в голос: http://habrahabr.ru/company/mailru/blog/198122/
Вышел Hadoop 2.2.0
Ура, товарищи! Но, блин, где rpm или deb http://apache-mirror.rbc.ru/pub/apache/hadoop/common/hadoop-2.2.0/ ? :(
Thursday, 17 October 2013
Что есть load average в Linux?
Вот довольно подробное, но старое (Linux 2.4) объяснение данного вопроса: http://www.spinellis.gr/blog/20041125/
Сборка IPFIX на Debian Wheezy
Итак, собираем:
cd /usr/srcОфсайт проекта: http://sourceforge.net/projects/libipfix/
git clone git://git.code.sf.net/p/libipfix/code libipfix-code
cd libipfix-code/
./configure --prefix=/opt/libipfix
make
make install
Далее в режиме коллектора IPFIX его можно запустить вот так:
LD_LIBRARY_PATH=/opt/libipfix/lib /opt/libipfix/bin/ipfix_collector -u -p 9996
При этом на экран будут выводиться информация обо всех проходящих пакетах.
Monday, 14 October 2013
Сборка lib pcap из исходников на Debian Squeeze
Pcap - на удивление динамично развивается и очень много багов в нем исправлено в новых версиях, которых в Дебияне не имеется.
cd /usr/src
wget http://www.tcpdump.org/release/libpcap-1.4.0.tar.gz
tar -xf libpcap-1.4.0.tar.gz
cd libpcap-1.4.0
apt-get install -y flex bison
./configure --prefix=/opt/libpcap140
make
make install
А чтобы потом с ней залинковать нашу прогрумму:
g++ sniffer.cpp -lpcap -I/opt/libpcap140/include -L/opt/libpcap140/lib
g++ sniffer.cpp -Linclude
LD_LIBRARY_PATH=/opt/libpcap140/lib ./a.out
Tuesday, 1 October 2013
Сланцевый газ - что это?
Думаю, многие уже многократно слышали это сочтетание, но что же это на деле: http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%B0%D0%BD%D1%86%D0%B5%D0%B2%D0%B0%D1%8F_%D1%80%D0%B5%D0%B2%D0%BE%D0%BB%D1%8E%D1%86%D0%B8%D1%8F
Subscribe to:
Posts
(
Atom
)