Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

среда, 22 декабря 2010 г.

Файловая система Unix

Рассмотрим подробно Filesystem Hierarchy Standard - описание файловой системы Unix-подобных систем.

Файлы можно разделить на 4 категории: разделяемые/неразделяемые (shareable/unshareable) и статические/изменяемые (static/variable).

Static shareable:
/usr
/opt

Static unshareable:
/etc
/boot

Variable shareable:
/var/mail
/var/spool/news

Variable unshareable:
/var/run
/var/lock

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

В корневой папке (/) содержатся следующие символьные ссылки или каталоги:

  • bin - необходимые исполняемые файлы для команд

  • boot - статические файлы для системного загрузчика

  • dev - файлы устройств

  • etc - специфичная для данного хоста конфигурация

  • lib - необходимые системные бибилиотеки и модули ядра

  • media - точка монтирования для сменяемых носителей

  • mnt - точка монтирования для временной файловой системы

  • opt - дополнительное ПО

  • sbin - необходимые системные исполняемые файлы

  • srv - данные для сервисов, предоставляемых системой

  • tmp - временные файлы

  • usr - важный каталог =)

  • var - изменяемые данные



Дополнительно могут быть установлены следующие каталоги (или символьные ссылки):

  • home - содержит домашние каталоги пользователей

  • root - домашний каталог пользователя root



Каталог /bin



Каталог /bin содержит необходимые исполняемые файлы для команд. Каталог должен содержать следующие файлы или символьные ссылки на команды:


  • cat - конкатенация файлов

  • chgrp - меняет группу владения

  • chmod - меняет модификаторы доступа

  • chown - меняет владельца файла и группу

  • cp - копирование файлов

  • date - печать или установка системной даты и времени

  • dd - конвертация и копирование файлов

  • df - отчет по использованию диска файловой системой

  • dmesg - вывод буфера сообщений ядра с стандартный поток вывода

  • echo - печать строки текста

  • false - ничего не делает, возвращает "неуспех"

  • hostname - просмотр или установка имени хоста

  • kill - посылает сигналы процессам

  • ln - создание ссылок на файлы

  • login - вход в сессию системы

  • ls - вывод списка файлов в каталоге

  • mkdir - создание каталогов

  • mknod - создание специальных файлов

  • more - утилита для листания текста

  • mount - монтирование файловой системы

  • mv - перенос/переименование файлов

  • ps - отчет по процессам

  • pwd - печать названия текущего рабочего каталога

  • rm - удаление файлов/каталогов

  • rmdir - удаление пустых каталогов

  • sed - работа с потоками sed

  • sh - командная оболочка

  • stty - печать и изменение настроек терминала

  • su - изменение пользовательского ID

  • sync - сброс буферов файловой системы

  • true - ничего не делает, возвращает "успех"

  • umount - отмонтирование файловой системы

  • uname - вывод информации о системе



Дополнительно в /bin могут быть установлены следующие программы:

  • csh - C-shell

  • ed - редактор

  • tar - архивационная утилита

  • cpio - еще одна архивационная утилита

  • gzip - утилита сжатия от GNU

  • gunzip - утилита разжатия от GNU

  • zcat - утилита разжатия от GNU

  • netstat - сетевая статистика

  • ping - тест сети по протоколу ICMP




Если утилиты gunzip и zcat существуют, то они должны быть символьными линками на gzip.

Каталог /boot



Содержит все, что необходимо для загрузки системы кроме конфигурационных файлов, которые не нужны в момент загрузки. Каталог содержит данные, которые используются до момента, когда ядро начало выполнения программ в user-mode. Здесь могут находится главные загрузочные сектора, и map-файлы секторов.

Каталог /dev



Содержит файлы устройств. Примеры:

  • /dev/null - null-устройство. Принимает любой вывод, отправленный в файл, всегда возвращает "успех" при записи в него (но реально данные никуда не записываются). Когда данные читаются из него, сразу же возвращает маркер EOF. Иногда на жаргоне его называют "черной дырой".

  • /dev/zero - файл, который возвращает нули (0x00)при чтении из него. При записи в него всегда возвращает "успех", но реально данные никуда не записываются.

  • /dev/random - файл, который служит генератором случайных чисел. Также возможно писать в него (но зачем?). Блокирующий ввод/вывод

  • /dev/urandom - то же самое, что и /dev/random, но ввод/вывод здесь неблокирующий

  • /dev/full - при записи в этот файл возвращается маркер переполнения устройства



Каталог /etc



Содержит специфичную для хоста конфигурацию. Т.е. в каталоге содержатся конфигурационные файлы для настроек различных частей системы. Каталог может содержать следующие файлы:

  • csh.login - файл инициализации для C-shell (systemwide)

  • exports - контроль доступа для файловой системы NFS

  • fstab - статическая информация о файловых системах

  • ftpusers - список пользователей и контроль доступа для FTP-демона

  • gateways - список шлюзов

  • gettydefs - настройки терминала для getty

  • group - файл пользовательской группы

  • host.conf - конфигурационный файл хоста

  • hosts - статическая информация о хостах (локальный DNS)

  • hosts.allow - разрешенный список хостов для TCP Wrappers

  • hosts.deny - запрещенный список хостов для TCP Wrappers

  • hosts.equiv - список доверенных хостов для rlogin, rsh, rcp

  • hosts.lpd - список доверенных хостов для lpd

  • inetd.conf - файл конфигурации для inetd

  • inittab - файл конфигурации для программы init

  • issue - сообщение перд логином и файл идентификации

  • ld.so.conf - список дополнительных каталогов, где искать зашаренные бибилиотеки

  • motd - содержит сообщение, которое показывается юзеру после логина

  • mtab - динамическая информация о файловых системах

  • mtools.conf - файл настроек для mtools

  • networks - статическая информация об именах сетей

  • passwd - файл с паролями

  • printcap - база данных системы печати lpd

  • profile - файл инициализации для sh shell login

  • protocols - список IP-протоколов

  • resolv.conf - файл настроек резолвера

  • rpc - список протоколов RPC

  • securetty - контроль доступа TTY для root

  • services - имена портов для сетевых сервисов

  • shells - пути к оболочкам

  • syslog.conf - файл настроек для syslogd



Каталог /home



Содержит домашние каталоги пользователей.

Каталог /lib



Содержит необходимые системные бибилиотеки и модули ядра.

Каталог /media



Точка монтирования для сменяемых носителей. Следующие каталоги или символьные ссылки на каталоги могут содержаться в /media:

  • floppy - флоппи-дисковод

  • cdrom - CD привод


Каталог /sbin



Содержит системные исполняемые файлы.

воскресенье, 19 декабря 2010 г.

Развертывание Apache Cassandra на кластере из двух узлов

В последнее время интерес к NoSQL-решениям в мире веб-разработки только увеличивается. Одним из ярких представителей NoSQL-мира является Apache Cassandra - распределенное масштабируемое хранилище данных. Cassandra изначально была разработана внутри Facebook (где она обеспечивает поиск по сообщениям в Inbox - Cassandra – A structured storage system on a P2P Network - хранит терабайты поискового индекса), но затем передана в Apache Software Foundation. В настоящее время сайт проекта - http://cassandra.apache.org.

В данном посте мы рассмотрим установку Apache Cassandra на кластер из двух машин - одна машина под управлением Ubuntu (IP-адрес в локальной сети - 192.168.1.101), а вторая - под Windows XP (IP-адрес - 192.168.1.100). Будем использовать последнюю версию Apache Cassandra, доступную на момент написания этого поста - версия 0.7.0 RC2.

Скачиваем дистрибутив Apache Cassandra - apache-cassandra-0.7.0-rc2-bin.tar.gz. Распаковываем дистрибутив в каталог, который назовем CASSANDRA_HOME. Заводим переменную среды с таким же именем, т.е. CASSANDRA_HOME. Все эти действия проделываем, разумеется, на двух машинах, которые входят в кластер. Например, на машине с Ubuntu CASSANDRA_HOME=/usr/tools/apache-cassandra-0.7.0-rc2, на машине с Windows XP CASSANDRA_HOME=d:\dev\apache-cassandra-0.7.0-rc2.

Теперь настроим каждый инстанс Кассандры. Открываем файл CASSANDRA_HOME/conf/cassandra.yaml и редактируем следующие свойства:

  • cluster_name - имя нашего кластера. Для всех машин, входящих в кластер, это имя должно быть одинаковым. Поменяем его на что-нибудь более узнаваемое, например, 'JDevNotes Cluster' =)

  • data_file_directories - список каталогов, где хранятся данные. Пока что ограничимся одним каталогом. Этот каталог должен быть предварительно создан и должны быть права на запись в этот каталог. Значение по умолчанию: /var/lib/cassandra/data. На Windows напишем что-нибудь вроде d:\cassandra_data\data

  • commitlog_directory - каталог, куда пишется коммит-лог Кассандры. Этот каталог также должен быть предварительно создан и должны быть права на запись в этот каталог. Значение по умолчанию: /var/lib/cassandra/commitlog. На Windows напишем что-нибудь вроде d:\cassandra_data\commitlog

  • saved_caches_directory - каталог, куда пишется сохраненный кеш Кассандры. Значение по умолчанию: /var/lib/cassandra/saved_caches. На Windows: d:\cassandra_data\saved_caches


  • seeds - список IP-адресов сидов, т.е. узлов, которые распространяют информацию о кластере. Обычно сидами делают от 5% до 30% машин в кластере. На нашем кластере из двух машинок будет всего лишь один сид - это будет машина с Ubuntu. Запишем ее адрес сюда: 192.168.1.101. По-идее, список сидов должен быть одинаков для всех машин в кластере. Так что, повторюсь, на двух наших машинах мы запишем одинаковой значение - 192.168.1.101.


  • listen_address - адрес нода с Кассандрой. По умолчанию - localhost. Это ОК, если только запущен один узел с кассандрой. Но у нас два узла! Так что для каждой машинки в кластере записываем сюда ее адрес. Для Убунты - 192.168.1.101, для машины с Windows XP - 192.168.1.100. Еще важное замечание - сюда нельзя записать адрес 0.0.0.0 - чтобы Кассандра слушала все имеющиеся интерфейсы. Нельзя - потому что для общения узлов кластера используется Gossip. Подробнее см. FAQ - Why can't I make Cassandra listen on 0.0.0.0 (all my addresses)?


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

Во-первых, это порты. Apache Cassandra по-умолчанию использует для работы в кластере два порта - 7000 и 9160. Есть еще порт 8080, который используется для JMX - через JMX можно настроить каждую ноду отдельно.

Порт 7000 используется для общения узлов кластера между собой - это так называемый storage port. Он устанавливается в параметре storage_port. Через него идут на узел команды и данные.

Второй порт - 9160 - это Thrift-port. Он устанавливается в параметре rpc_port. Thrift-port используется для подключения сторонних клиентов к Кассандре.

Параметр rpc_address определяет адрес для Thrift-клиентов. По-умолчанию, используется localhost. Сюда можно записать любой адрес, в том числе и 0.0.0.0 (в отличие от listen_address).

Наконец, рассмотрим параметр auto_bootstrap. Этот параметр по-умолчанию установлен в false. Если он установлен в true, то данная нода с Кассандрой, когда подключается к кластеру, автоматически копирует часть данных к себе с уже запущенных нод. Для сидов нельзя ставить auto_bootstrap в true. Т.е. для нашего кластера на машине 192.168.1.101, которая является сидом, следует оставить auto_bootstrap: false. Для машины же с Windows XP можно (хотя и необязательно) поставить auto_bootstrap: true.

Итак, все необходимые каталоги созданы и соответствующие права на них поставлены, параметры настройки проставлены. Теперь запускаем Кассандру:

./cassandra -f

Опция -f используется, чтобы процесс был запущен не как демон, а как foreground process (не знаю, какой тут перевод подобрать!).

Сначала мы должны запустить сид, т.е. Кассандру на машине 192.168.1.101. После того, как она запущена, подсоединим к кластеру узел 192.168.1.100. Получим следующее сообщение на машине с адресом 192.168.1.101:


INFO 00:20:12,886 Binding thrift service to localhost/127.0.0.1:9160
INFO 00:20:12,888 Using TFramedTransport with a max frame size of 15728640 bytes.
INFO 00:20:12,892 Listening for thrift clients...
INFO 00:22:52,045 Node /192.168.1.100 is now part of the cluster
INFO 00:22:52,838 InetAddress /192.168.1.100 is now UP
INFO 00:22:52,838 Started hinted handoff for endpoint /192.168.1.100
INFO 00:22:52,841 Finished hinted handoff of 0 rows to endpoint /192.168.1.100


Это означает, что две наших ноды успешно сконнектились друг с другом!

Теперь загасим узел 192.168.1.100. На узле 192.168.1.101 получим следующее сообщение:

INFO 00:31:51,004 error writing to /192.168.1.100
INFO 00:31:56,005 InetAddress /192.168.1.100 is now dead.


Полезные ссылки:

Cassandra Wiki: Loading the Config
Cassandra Wiki: Frequently asked questions

четверг, 16 декабря 2010 г.

HyperGraphDB

Borislav Iordanov делает 20-минутную презентацию по архитектуре HyperGraphDB. HyperGraphDB - расширяемое распределенное хранилище для работы с гиперграфами. Гиперграфы широко используются в машинном обучении, AI, моделировании.

Проект выпущен под LGPL, хостится на Google Code. Сайт проекта - http://www.hypergraphdb.org.

Постоянные читатели