РУССКАЯ ВЕРСИЯ
*BSD И ОБЛАКА В НОМЕРЕ: ИНТЕРВЬЮ С MARK PRICE ОБ ОБЛАКАХ УСТАНАВЛИВАЕМ FREEBSD В ОБЛАЧНОЕ ОКРУЖЕНИЕ AMAZON AWS EC2 ПРОХОДИМ ЭКЗАМЕН ПО СЕРТИФИКАЦИИ BSDA УСТАНАВЛИВАЕМ OPENBSD 5.0 НА VMWARE SERVER MIDNIGHTBSD: РАЗРАБОТКА ПРИЛОЖЕНИЙ С ПОМОЩЬЮ MPORT POSTGRESQL: РЕПЛИКАЦИЯ ДАННЫХ ИНТЕРВЬЮ С ИГОРЕМ СЫСОЕВЫМ (NGINX INC.) ПРЕИМУЩЕСТВА СВОБОДНОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ВЫПУСК 04/2012 (4)
В НОМЕРЕ Дорогие друзья, Вот и наступает пора, когда природа расцветает и начинает нас радовать тёплой погодой. А вместе с тем появляются и первые облака, как в реальном мире, так и в виртуальном пространстве. Тема этого номера посвящена знакомству с ними, а также установке BSD-систем в облачном окружении. В рубрике „Уголок разработчика” Caryn Holt расскажет, как можно использовать mport для разработки приложений в MidnightBSD. Не пропустите очередную статью от Dru Lavigne, посвящённой сертификации BSDA. В этот раз вы узнаете, как проводится сам экзамен. Кстати говоря, группа сертификации BSDCG ищет партнёров по организации экзаменов в России. Что особенно отрадно - один из корректоров журнала знает как проходит экзаменационный процесс от и до. Luca Ferrari продолжает знакомить нас с PostgreSQL. Встречайте просто потрясающий материал по различным схемам репликации, реализованных в этой базе данных. Нам удалось пообщаться с Игорем Сысоевым - разработчиком веб-сервера Nginx, а также организатором компании Nginx Inc. Узнали его взгляды на развитие продукта, как он оценивает сложность разработки, а также ряд интересных подробностей о самом веб-сервере.
Редактор английской версии: Patrycja Przybyłowicz patrycja.przybylowicz@software.com.pl Авторы: Diego Montalvo, Caryn Holt, Dru Lavigne, Toby Richards, Luca Ferrari, Paul Ammann Исполнительный директор: Ewa Dudzic ewa.dudzic@software.com.pl Русская редакция: editor@bsdmag.su (ru.bsdmag@gmail.com) Корректоры: corrector@bsdmag.su Особая благодарность Юрию Ластову Издатель : Software Press Sp. z o.o. SK ul. Bokserska 1, 02-682 Warszawa Poland worldwide publishing tel: 1 917 338 36 31 www.bsdmag.org Все торговые марки, задействованные в журнале, использованы для информационных целей. Права на них принадлежат соответствующим компаниям.
В завершение, в рубрике „Поговорим” расскажем о свободном программном обеспечении. Его плюсы и минусы, по сравнению с проприетарным. Чего можно ожидать в экономике в 21-м веке при использовании СПО и как заработать, используя или разрабатывая его - читайте на странице 52. P.S. Уважаемые рекламодатели, не стесняйтесь нам писать. Место для вашей продукции мы всегда найдем.
Команда русской редакции
2
04/2012
В НОМЕРЕ
Облако
Howto
и приплывают облака ... 04 Вот Diego Montalvo
FreeBSD в облачное 22 Устанавливаем окружение Amazon AWS EC2
Последние несколько лет термин “облако” был почти в каждой новостной ленте. Рекламировались как компании, предлагающие “облачные” вычисления, так и стартапы со своими “супер-пупер” сервисами, работающими в ”облаке”. Последнее может означать достаточно разные вещи. Всё зависит от того, в каком контексте оно было упомянуто.
Уголок разработчика приложений с помощью 08 Разработка mport Caryn Holt
В февральском выпуске вы увидели как конечный пользователь может использовать систему mport. Однако, в MidnightBSD вы можете получить доступ к функциям mport и в качестве разработчика, добавив вашему приложению поддержу mport.
Сертификация BSD
12
Проходим экзамен по сертификации BSDA Dru Lavigne
В сегодняшней статье мы рассмотрим как проходит экзамен. В конце же мы приведём информацию о том, где сдать экзамен и как подготовиться к нему, если рядом с вами нет центра тестирования или же не проводится данный экзамен.
С нуля OpenBSD 5.0 на 18 Устанавливаем VMware Server Toby Richards
Мы будем устанавливать OpenBSD 5.0. После ознакомления с данной статьей вы сможете поставить систему как на ваш собственный компьютер, так и в виртуальное окружение VMware Server. В примере будет использоваться аккаунт на хостинге bsdvm.com.
www.bsdmag.su
Diego Montalvo
Если у вас есть аккаунт на AWS (Amazon Web Services), то запустить FreeBSD в вычислительном сервисе Amazon - Elastic Compute Cloud (EC2), проще простого.
Репликация данных 28 PostgreSQL: Luca Ferrari
В предыдущих выпусках мы говорили о том, как установить кластер PostgreSQL, как настроить архивирование информации (как логически, так и физически) и как происходит обработка транзакций. В этой статье вы увидим, как реплицировать работающий кластер на другую машину, чтобы получить полностью зеркалированный узел, работающий в режиме “stand-by”.
Интервью с Mark Price 44 Интервью Diego Montalvo и BSD Team
Предприниматель из области высоких технологий, с большим стажем интеграции и работы со многими системами и различным оборудованием. Mark специализируется в сферах по управлению серверами, сетевым взаимодействием, веб-хостинга, Linux, BSD и открытого ПО. Он также глава RootBSD и президент Tranquil Hosting.
с Игорем Сысоевым 48 Интервью Команда журнала BSD Magazine RUS
“...Третья составляющая - кросс-платформенность. Это чисто инженерная задача. Хотелось написать такой код, который будет просто портироваться на новые архитектуры/операционные системы...“
Поговорим свободного ПО (СПО) 52 Преимущества Paul Ammann
В отличие от патентованного ПО, производимого большинством коммерческих организаций, СПО создаётся и совершенствуется добровольцами, которые не держат свой программный код в секрете, раздавая его всем желающим.
3
ОБЛАКО
Вот и приплывают облака ...
Последние несколько лет термин “облако” был почти в каждой новостной ленте. Рекламировались как компании, предлагающие “облачные” вычисления, так и стартапы со своими “супер-пупер” сервисами, работающими в ”облаке”. После продожительного осмысления и переопределения, я решил, что “облако” может означать достаточно разные вещи. Всё зависит от того, в каком контексте оно было упомянуто. Например, “облако”, само по себе, является сокращением для обозначения сети Интернет, или же для сложной инфраструктуры – веба.
Я
думаю, что важно разделять понятия “облачные вычисления” и “службы”. “Облачные вычисления” - это такой термин от маркетологов, для обозначения служб виртуального хостинга, которые можно администрировать через Интернетсоединение. “Облачные службы” – достаточно модная фраза для служб, работающих в глобальной сети. В 2006 году облачное вычисление начало набирать популярность с дебютом Elastic Compute Cloud (EC2) компании Amazon. Виртуальные сервера стали доступны для массовой аудитории. Облачные же службы были ещё тогда, когда гуманитарии даже и не подозревали о существовании электронной почты. Где-то в 1996 году Hotmail
(работающий на FreeBSD) представил ту модель, которая изначально была известна как облачная почтовая система. В сегодняшние дни, облачные вычисления предлагают “виртуальные машины” или “экземпляры”, которые можно масштабировать, и которыми можно удаленно управлять: через SSH-соединение, с помощью VNC-клиента, либо же через какой-либо веб-интерфейс (Рис. 1). Облачные вычисления предлагают новую модель представления и доставки информационных служб, которые основаны на Интернет-протоколах. Эта модель обычно предполагает резервирование динамически изменяемых и зачастую
Рис 1. - Веб-интерфейсы к вычислительным облакам Amazon и HP
4
04/2012
Вот и приплывают облака ...
Рис. 2 – Мобильные приложения и взаимодействие с облаком виртуализованных ресурсов. Wiki Я помню, как в начале 2000 года, мне пришла мысль, что было бы круто, построить текстовый редактор, такой как Word, но основанный на веб-технологиях. Хотя и тогда это было не плохой идеей, однако достаточно развитые средства в области облачных и веб-технологий появились только сейчас. Когда-то популярное ПО на рабочих столах становится менее востребованным, в отличие от своих веб-аналогов, например, Google Docs. Также, как веб-сервисы начали заменять программное обеспечение, облачные сервисы начали заменять малые серверные фермы и системных администраторов, обслуживающих эти фермы. Зачем в сегодняшнем быстрошагающем мире покупать много серверов и оплачивать работу системного администратора, когда вы можете просто смасштабировать и сконфигурировать вашу вебслужбу, имея всего лишь кредитную карту, а затем несколько раз пощелкать мышкой. Облачное вычисление так соотносится с аппаратным обеспечением, как и облачные сервисы с программным обеспечением. Оба направления являются эволюцией технологии, и оба являются замещающей технологией. Интернет сегодня состоит из текста, картинок, видео, музыки, видео-по-требованию, мгновенных коммуникаций, запросов котировок и т.д. Хотя в основе интернета всё ещё лежит тот же самый
www.bsdmag.su
язык HTML, тем не менее количество информации обрабатываемой каждую секунду, каждый день, увеличилось на порядок. Объемы данных возросли неимоверно. Когда-то для популярного веб-сайта было достаточно одного единственного сервера. Сейчас востребованные сайты работают на сотнях, если не на тысячах серверах. И постоянно обновляют оборудование. С самого начала изобретения Интернета было много фантазий, что компьютеры в Сети заменят обычные. На данный момент такое и происходит с облачными компьютерами и облачными сервисами. С развитием Интернет-технологий и появлением усовершенствованных веб-служб, всё больше и больше пользователей переходят на облачные сервисы, нежели работают на настольных программах. Облачные сервисы могут быть найдены и в небольших устройствах. Смартфоны и большая часть мобильных приложений зависят от данных, получаемых или отсылаемых в облака (Рис. 2). Многие мобильные операторы предлагают сейчас услуги по безопасному хранению пользовательских контактов из телефона, а также другую информацию. Недавно компания Apple представила на радость публике iCloud – сервис хранения, который позволяет хранить в централизованном месте данные пользователя. И обращаться к ним с любого устройства от Apple.
5
ОБЛАКО
Облачные вычисления также начали проникать в различные версии BSD: Amazon Elastic Compute Cloud (EC2) предлагает пользвоателям на выбор FreeBSD и NetBSD (в качестве образов виртуальных операционных систем). Компания RootBSD предлагает BSD-системы, работающих в виртуальном частном пространстве, построенном на базе XEN с полноценной технической поддержкой. В 2006 году на базе веб-сервисов Amazon (AWS) было организована служба EC2, которя предоставляла пользователям доступ к простаивающим серверным мощностям этой компании. EC2 позволяет пользователям выбрать из сотен образов виртуальных систем (AMI), включая различные варанты FreeBSD и NetBSD. EC2 также дает пользователям управлять через веб-консоль. Настройка под свои требования производится через любой SSH-клиент, такой как Putty, либо через терминал. Компания RootBSD является провайдером виртуальных выделенных серверов, которая специализируется на FreeBSD, но по требованию может предложить и другие BSD-дистрибутивы. Предлагаются гибкие ежемесячные тарифные планы. Виртуальные сервера, что предлагает RootBSD, основаны на XEN, и позволяют пользователям администрировать сервисы используя любой SSHклиент с полноценной технической поддержкой. Веб-сервис BuildaSearch (BaS), который я создал, работает полностью на базе облака в виртуальном FreeBSD и под XEN. В реальном времени BaS повзоляет пользователям производить индексацию и поиск по тысячам страниц в реальном времени. Облачная основа позволяет масштабировать сервисы парой нажатий на мышке.
В сети • • • • • • • •
http://www.wikipedia.org http://hpcloud.com/ https://www.icloud.com http://aws.amazon.com http://rootbsd.net http://buildasearch.com http://duckduckgo.com http://xen.org/
Поисковый движок DuckDuckGo (DDG), делающий акцент на анонимность, так же задействует облачную инфраструктуру для своего функционирования. Выдаваемые им результаты является сборной солянкой от многих источников, включая Yahoo! Seach Boss, Bing, Wikipedia, Wolfram Alpha и своего собственного движка. Для индексирования и управления используется FreeBSD (Рис. 3). За прошедшие 6 лет облачные вычисления выросли из экспериментальной концепции Amazon, до существенной бизнес-модели, которая полностью меняет взгляд на информационные технологии. Сегодня облачные технологии держат на себе Twitter, DuckDuckGo, Digg, Crunchbase, BuildaSearch и даже огромную торговую площадку Amazon. В реальности, первые облака уже здесь, перед нами. Они начинают влиять на нашу повседневную жизнь, начиная от доступа к социальных сетям, до заполнения налоговой декларации через Интернет. По мере развития интернет-технологий, будет появляться больше и интеллектуальных облаков. Даже если облака сегодня и кажутся громоздкими, то надо понимать, что это только начало дороги к миру, заполненному облаками, который, в ближайшем будущем, сможет похвастаться и облачным тостером, и горшком для еды, генерирующим твиты по мере приготовления еды.
ОБ АВТОРЕ
Рис. 3 – Поисковая система DuckDuckGo 6
Diego Montalvo – основатель сайтов BuildaSearch. com (поисковая веб-служба) и Urloid.com (сервис сокращения ссылок). Diego по своей натуре вебразработчик и технический писатель, любящий пляж, социальные сети, ночные разработки и не прочь пропустить пару пинт горячительных напитков. Не стесняйтесь писать ему по адресу: diego@earthoid.com
04/2012
Вот и приплывают облака ...
Вы предоставляете услуги хостинга и работаете на *BSD? Разместите рекламу у нас!
7
УГОЛОК РАЗРАБОТЧИКА
Разработка
приложений с использованием mport В февральском выпуске вы увидели как конечный пользователь может использовать систему mport. Однако, в MidnightBSD вы можете получить доступ к функциям mport и в качестве разработчика, добавив вашему приложению поддержу mport. Вы узнаете… • Как добавить управление с помощью mport уже существующим приложениям на C, C++ или Objective C
К
огда Вы работаете с mport имейте ввиду, что все функции, помеченные как MPORT_PUBLIC_API, предназначены для использования сторонними приложениями. Это не значит, что Вы не можете использовать любые другие функции, но гарантированно работать будут только отмеченные. Для того, чтобы понять, помечена функция как публичная или нет, посмотрите на её реализацию. Заголовочный файл mport.h Изначально mport API создавался для того, чтобы позволить разработчикам MidnightBSD быстро создавать новые инструменты работы с mport. Однако, в процессе обсуждения новых инструментов работы с портами выяснилось, что многие сторонние разработчики так же хотели бы добавить своим приложениям функциональность mport. На данный момент в MidnightBSD доступен только C API mport, но мы работаем над тем, чтобы добавить поддержку и скриптов, в частности Python.
Инициализация mport Для того, чтобы использовать различные вызовы mport Вам необходимо создать новый экземпляр mport_instance. В этом простом примере я создаю указатель mportInstance а затем создаю сам экземпляр с помощью функции mport_instance_new().
8
О чем вы должны знать… • C, C++ или Objective C
После того, как я создал экземпляр mport я инициализирую его используя mport_instance_ init(). В случае успеха мне возвращается значение MPORT_OK.
Работа с индексами mport Для выполнения многих действий Вам сперва потребуется загрузить индекс mport. Для этого воспользуйтесь вызовом mport_index_load(). int result = mport_index_load(mport);
В случае успеха Вам будет возврещено значение MPORT_OK. Для того, чтобы установить, обновить или удалить пакет Вам сперва потребуется найти его в индексе. В данном примере Вы видите как используются элементы индекса. Структура mportIndexEntry определена в mport.h. Для высвобождения элемента индекса используйте mport_index_entry_free_vec().
Установка и удаление пакетов Для того, чтобы установить порт Вам нужно иметь уже загруженный индекс. const char *packageName
04/2012
Разработка приложений с использованием mport
Листинг 1 - Создание и инициализация экземпляра mport mportInstance *mport; mport = mport_instance_new(); if (mport_instance_init(mport, NULL) != MPORT_OK) { ... }
Листинг 2 - Поиск пакета по имени const char *packageName = “test pkg”; mportIndexEntry **indexEntries; if (mport_index_lookup_pkgname(mport, packageName, &indexEntries) != MPORT_OK) { ... }
Листинг 3 - Чтение и отображение информации mport
int info(mportInstance *mport, const char *packageName) { mportIndexEntry **indexEntry; mportPackageMeta **packs; char *status, *origin; if (packageName == NULL) { fprintf(stderr, „Specify package name\n”); return 1; } indexEntry = lookupIndex(mport, packageName); if (indexEntry == NULL || *indexEntry == NULL) { fprintf(stderr, „%s not found in index.\n”, packageName); return 1; } if (mport_pkgmeta_search_master(mport, &packs, „pkg=%Q”, packageName) != MPORT_OK) { warnx(„%s”, mport_err_string()); return 1; } if (packs == NULL) { status = „N/A”; origin = „”; } else { status = (*packs)->version; origin = (*packs)->origin; } printf(„%s\nlatest: %s\ninstalled: %s\nlicense: %s\norigin: %s\n\n%s\n”, (*indexEntry)->pkgname, (*indexEntry)->version, status, (*indexEntry)->license, origin, (*indexEntry)->comment); mport_index_entry_free_vec(indexEntry); return 0; }
www.bsdmag.su
9
УГОЛОК РАЗРАБОТЧИКА
В сети • •
http://www.midnightbsd.org – сайт проекта MidnightBSD http://www.midnightbsd.org/documentation/mports/ - документация по mport
char *buf, *packagePath;
mportIndexEntry **indexEntry;
После поиска пакета в индексе мы конструируем путь для пакета. MPORT_LOCAL_PKG_PATH это локальное место загрузки. Для установки по умолчанию оно должно быть равно /var/db/mport/downloads. asprintf(&packagePath, “%s/%s”, MPORT_LOCAL_PKG_PATH, (*indexEntry)->bundlefile);
Для того, чтобы убедиться в наличии пакета в системе вызовите функцию mport_package_exists(). Если Вам потребуется загрузить пакет, используйте mport_fetch_bundle(). Опять же в случае успешного выполнения этой операции Вы получите MPORT_OK.
которая возвращает сообщение об ошибке
Вывод
Библиотека mport позволяет разработчикам интегрировать некоторые или даже все функциональные возможности mport в свои собственные приложения без вызова exec(). Данная статья лишь коротко описывает обширные возможности, доступные для разработчиков MidnightBSD ПО. Я рекомендую посетить сайт MidnightBSD для получения более подробной информации.
mport_fetch_bundle(mport, (*indexEntry)->bundlefile)
Кроме того, Вы можете проверить пакет с помощью mport_install_primative(). Для удаления пакета используется функция mport_delete_primative().
Обновление существующего пакета Вы можете обновить пакет и, по желанию, все его зависимости. Для примера мы обновим только сам пакет. Так же как при установке пакета, Вам необходимо найти элемент индекса и построить путь для пакета. Но вместо вызова mport_install_primative() используйте mport_update_primative().
Другие полезные функции mport Ещё одним важным элементом mport является mportPackageMeta. Данная структура содержит дополнительную информацию, такую как язык пакета и его категория.Кроме того, чтобы получить все зависимости (с помощью функций mport_pkgmeta_ get_updepends() и mport_pkgmeta_get_downdepends()) Вам тоже потребуется метаинформация.
ОБ АВТОРЕ
Библиотека mport содержит две функции для сообщения об ошибках - mport_err_code(), которая возвращает код ошибки (integer) и mport_err_string()
Caryn Holt - разработчик MidnightBSD и инженер разработки ПО в компании Rovi, расположенной в Ann Arbor, Michigan
10
04/2012
Настраиваем рабочее место PC-BSD 9.0 Редакция русской версии журнала открыта для сотрудничества!
Пишите нам: editor@bsdmag.su
www.bsdmag.su
11
СЕРТИФИКАЦИЯ BSD
Проходим экзамен по сертификации BSDA В первой статье этой серии (опубликованной в февральском выпуске за 2012 год) мы разобрали некоторые широкораспространенные заблуждения относительно сертификации и рассказали, зачем вам стоит сертифицироваться по программе BSDA. Во второй статье (см. мартовский выпуск) обсуждалось, как готовиться к сертификационному экзамену BSDA. В сегодняшней статье мы рассмотрим как проходит экзамен. В конце же мы приведём информацию о том, где сдать экзамен и как подготовиться к нему, если рядом с вами нет центра тестирования или же не проводится данный экзамен.
С
ертификационный экзамен BSDA появился в феврале 2008 года. У сертификационной группы BSD (BSD Certification Group – BSDCG) было несколько целей при запуске данной сертификации: • • • •
Поддержка психометрической целостности экзамена. Использовать, если возможно, операционные системы BSD и открытое программное обеспечение при проведении экзамена. Поддерживать доступную стоимость экзамена по всему миру. Обеспечить доступную стоимость экзамена и возможность сдать его в любой точке мира.
Так как эти цели влияют на то, как преподносится экзамен, давайте взглянем более пристально на каждую из них:
Поддержка психометрической целостности экзамена Владение практическими навыками системного администрирования явлется важнейшим компонентом экзамена BSDA. Много усилий вкладывается в процесс создания экзамена, чтобы резуьтирующий сертификат
12
был бы психометрически верным. Для поддержания целостности экзаменовки, при прохождения теста должны быть соблюдены определенные требования, например: •
•
Идентичность личности, проходящего экзамен, должна быть проверена с помощью идентификации по фото государственного образца. Это необходимо для того, что убедиться, что человек пришедший на экзамен действительно тот, за кого себя выдает. А также для того, чтобы кто-либо другой не сдал за него экзамен. Человек, проходящий экзамен, должен во время экзамена быть под присмотром, т.е. он не пользуется дополнительной ифнормацией, не искажает экзаменационные материалы, копирует вопросы или же выносит экзаменационные данные из комнаты, где проводится сертификация.
Экзамен будет бессмысленным, если кандидат окажется не тем, за кого он себя выдаёт, или если он находит способ списать. Вот почему должна быть проверка кандидатов до начала экзамена и наблюдение за ними в процессе сдачи теста.
04/2012
Проходим экзамен по сертификации BSDA
Человек, проверяющий документы и наблюдающий за ходом экзамена называется поверенным и сертификационная комиссия должна безусловно ему доверять. Требования к наличию поверенного налагают особые ограничения на то, как проводится экзамен. Например, мы частно слышим такой вопрос - “почему я не могу сдать тест из дома по сети?”. Для такого типа экзаменов трудно обеспечить мониторинг по ряду причин. Проверка личности человека потребует либо фотокопии, либо же изучения удостоверения личности через веб-камеру, что даёт возможность использовать поддельные документы. Мониторинг также не очень надежен – веб-камеру можно направить на экзаменуемого, однако определить, использует ли человек записи вне пределов видимости камеры, достаточно трудно. Также невозможно будет заметить, если человек свернул приложение и занимается поиском ответа в интернете. Или хуже того, запустил программу по захвату видео-изображения и копирует содержимое экзамена. Для этих целей потребуется отдельный надзирающий человек, который бы следил за ситуацией в камере или же за рабочим столом пользователя. Такой подход не слишкомто и масштабируется, поэтому проще расположить одного человека, который бы следил сразу за всеми экзаменуемыми в одной аудитории.
Использование открытого ПО, поддерживание цены на приемлимом уровне, организация экзамена в доступной форме для всех Когда заходит речь о проведении экзамена, то на арену выходят эти три цели. Коммерческие вендоры, у которых есть центры тестирования по всему миру, существуют (самые известные, это VUE и Prometric), но они могут быть недостаточно хороши по ряду причин: •
Для тестирования не используется открытое ПО (обычно применяется Microsoft Windows, Flash и Internet Explorer). Данное обстоятельство накладывает ограничения на некоторые экзаменационные вопросы и создает трудность при организации лабораторных работ. Хотя и существует возможность создать тестовые примеры на Flash, однако они дороги при разработке и не обеспечивают ту гибкость, как живая операционная система в
www.bsdmag.su
•
•
•
виртуализованном пространстве, либо же в простом FreeBSD jail. Эти вендоры подразумевают, что будет проводиться интенсивная экзаменовка и требуют соответствующей оплаты, что мешает установить доступную цену. В частности, существует ежегодный взнос (обычно в рамках суммы с четырьмя-пятью нолями), который нужно оплачивать каждый год, вне зависимости от количества проведенных экзаменов. Если организация, которая проводит тесты не в состоянии провести нужное количество экзаменов для оплаты данного взноса, то она понесет убытки. Психометрически правильный экзамен претерпевает постоянную статистическую проверку для определения необходимости изменения некоторых вопросов (т.е. они считаются или слишком легкими, или же слишком трудными). Коммерческие вндоры запрашивают еще один сбор за перепубликацию (обычно уже сумма с меньшим количеством нулей), что происходит при изменении экзаменационных вопросов или же при выходе новых экзаменов. Всё это приводит к тому, что становится финансово невыгодно поддерживать экзамен в актуальном состоянии или предоставлять дополнительные версии экзамена. Крупные сертификационные комапнии стараются размещать свои центры тестирования в большинстве стран по всему миру, но в таком случае они вынуждены платить большой годовой взнос. Малые компании платят меньше, но расположены в основном в Северной Америке с органиченным количеством представительств в других частях мира.
Для того, чтобы выяснить, подходят ли организации коммерческие тесты, необходимо сразу попытаться определить: сколько людей в год будет проходить данный экзамен и сколько они могут позволить себе потратить на него. Если количество экзаменующихся будет низким (меньше нескольких тысяч в год), или же они живут в местах, удаленных от места тестирования, либо же находятся в странах, где экзаменационный сбор в 200 долларов (обычная цена за экзамен) считается неприемлимым, то нужно рассматривать другие способы организации и проведения экзамена. Перед BSDCG
запуском экзамена BSDA, провела тестовый опрос с
группа целью
13
СЕРТИФИКАЦИЯ BSD
выяснения потребностей в тестах среди системных администраторов BSD. Отчет по опросу можно найти здесь – http://www.bsdcertification.org/downloads/delivery_survey.pdf. Одним из выводов в отчете был - “70% кандидатов не желают платить более 100 долларов; стоимость должна быть ниже этой отметки и в то же время быть достаточной, чтобы оплачивать психометрические анализы тестов и покрывать хозяйственные расходы организации BSDCG”. Результаты также выявили, что кандидаты раскиданы по всему миру” (в опросе участвовали люди из 58 стран) и что “большинство кандидатов готово для сдачи экзаменов немного проехаться”. Когда экзамен BSDA был запущен в 2008 году, то не существовало открытой платформы для организации экзамена. Годовая плата за существующие коммерческие разработки была намного выше запланированного бюджета BSDCG. Было принято решение предлагать бумажную версию экзамена на целевых мероприятиях, проводимых по всему миру и выяснить возможность разработки открытого решения для проведения тестирования, либо же поиска приемлемой коммерческой платформы. На данный момент сушествует два метода организации экзамена: бумажный экзамен, проводимый на специальных мероприятиях и компьютерный экзамен в центре тестирования. Содержание одно и то же, вне зависимости от выбранной методики.
Письменные экзамены Первый экзамен прошёл во время выставки Southern California Linux Expo в 2008 году. С тех пор было организованно более 120 экзаменов на технических конференциях, в школах и в компаниях на рабочих местах по всему миру. Вы можете посмотреть прошедшие и планируемые мероприятия тут: https://register.bsdcertification.org/register/events Проведение экзамена в бумажной форме содержит несколько преимуществ: • •
14
возможность встретится и пообщаться с другими системными администраторами, которые также работают с BSD системами т.к. стоимость проведения экзамена в основном зависит от стоимости доставки материлов на экзамен и возврата заполненых тестов, можно поддерживать его цену на доступном уровне в
75 долларов по всему миру. Однако, у него есть и свои недостатки: • •
Не так много проводится специализированных событий по всему миру Организация и размещение информации о планируемых событиях возможна только при помощи сообщества
Усилия, прикладываемые местным сообществом для организации и продвижения экзаменационых мероприятий в данной местности, напрямую зависит от успеха экзаменационной кампании. В свою очередь, успешно проведенные мероприятия оказывают благотворное влияние на локальное сообщество системных администраторов и содействуют продвижению BSD в этом округе.
Подготовка к экзаменам Если тесты проходят в вашем городе, у Вас есть несколько плюсов: • •
• •
Вам не нужно ждать, когда экзамен придет в ваш город В качестве члена вашего местного сообщества, вы имеет лучшее представление о том, какие местные ресурсы могут послужить местом для проведения экзамена Появляется возможность найти и познакомиться с другими администраторами BSD. Время подготовки к экзамену дает возможность встретиться лично и помочь друг другу в изучении экзаменационных целей
Если вы заинтересованы в проведении экзамена в вашем городе, проконсультируйтесь у вашего работодателя, местных учебных заведений или учебных центров, в ваших пользовательских группах, или же на ближайших технических конференциях – могут ли они выделить у себя место для экзаменационных мероприятий. Для этого заинтересованная организация должна предоставить: •
Тихую комнату, где может комфортно разместиться 6-8 человек, не слишком близко к друг другу. Интернет не требуется, т.к. экзамен письменный. Подходящее помещение
04/2012
Проходим экзамен по сертификации BSDA
•
• •
•
обычно просто организовать в компанииработодателе или же в школе. Если мероприятие организовывается пользовательской группой, у которой нет таких возможностей по размещению людей, проверьте, может быть Вам пойдут на встречу в местной библиотеке или даже в мэрии – наверняка получится зарезервировать комнату в муниципальном здании (не принимайте американские реалии близко к сердцу — прим. корректора). Если вы общаетесь с организатором конференции, уточните, можно ли зарезервировать одно из помещений конференции часа на два в обед, или в конце дня. Нужно доверенное лицо для работы в роли смотрителя. Им может быть: достаточно известный в сообществе BSD человек, преподаватель в аккредитованном учебном заведении, работник, которому вы доверяете или же докладчик с конференции. Он также же должен быть следовать пунктам соглашения о неразглашении, чтобы исключить возможность утечки экзаменационных данных и не может сам иметь сертификата того экзамена, который он проверяет. В зависимости от месторасположения, команда BSDCG может сама найти такого человека в данном городе, найти того, кто сможет приехать или помочь в поиске подходяй персоны. Обеспечить запас времени в 6-8 недель для того, чтобы BSDCG могла бы объявить об организации мероприятия и выслать экзамены. Набрать по крайней мере 4 человек, заинтересованных в прохождении экзамена. Поговорите с вашими коллегами с работы, однокурсниками, членами пользовательских групп, или же разместите объявление в социальных сетях для привлечения внимания. Как только найдете организацию, готовую провести на своей территории экзамен, то напишите на chair@bsdcertification.org указав место и дату. Команда BSDCG свяжется с Вами, чтобы убедиться, что есть нужный человек, который будет курировать мониторинг, событие размещено на веб-сайте и прорекламировано в соцсетях, экзаменационные материалы отосланы к моменту проведения мероприятия.
Компьютерные экзамены Начиная с апреля 2011 года, группа BSDCG вступила
www.bsdmag.su
в сотрудничество с SMT (Schroeder Measurement Technologies) для предоставления компьютерной версии экзамена BSDA в центрах тестирования IQT (вы можете прочитать детальный пресс-релиз на сайте – http://bsdcertification.org/news/pr061.html). Данное партнерство дает следующие преимущества: •
•
Вам не нужно ждать, проведения соответствующего экзаменационного мероприятия, т.к. вы сами можете запланировать ваш экзамен в любое время. Вам не нужно ждать результатов экзамена, т.к. оценка готова сразу по окончании экзамена.
В зависимости от того, где вы живете, у Вас может возникнуть несколько проблем с такой формой экзамена: •
•
Большинство центров тестирования находится в Северной Америке, хотя есть несколько и за ее пределами. Список центров размещен здесь: http://www.isoqualitytesting.com/mlocations.aspx Стоимость экзамена выше, потому, что нужно учитывать стоимость центров тестирования. Цена в этом случае составит 150 долларов, что всё еще является доступной платой для Северной Америки и Западной Европы, но может быть не совсем по карману для остальных частей света.
Если вы являетесь руководителем центра тестирования или же знаете таковые центры в вашем городе, которые хотят быть добавленными в сеть IQT, то напишите подробное письмо на адрес chair@ bsdcertification.org. Мы особенно заинтересованы в появлении хотя бы одного центра тестирования в России, т.к. в этой стране есть очень много лиц, заинтересованных в BSD-сертификации.
Регистрация на экзамен Чтобы пройти экзамен BSDA, вам нужно записаться и получить уникальный номер BSDCG ID по адресу: https://register.bsdcertification.org/register/get-a-bsdcgid. Как только он у вас на руках, посетите страницу с ближайшими событиями (https://register.bsdcertification.org/register/register-for-an-exam) чтобы узнать, есть ли недалеко возможность сдать тест. Если такой возможности нет, то сообщите нам, есть ли в вашем городе заинтересованнная в его проведении организация, чтобы мы могли разместить о ней
15
информацию у себя на веб-сайте. Если Вы ориентируетесь на бумажный экзамен, то поверенный человек будет уведомлен о вашей регистрации. Он будет знать, сколько всего людей планируют принять участие в тесте и сможет Вас проинформировать в случае каких-либо изменений. Если выбираете компьютерный экзамен, то вам нельзя будет выбрать график его прохождения, пока не пройдет оплата. После прохождения платежа, вам будет выслана ссылка с информацией о том, что вам нужно выбрать дату экзамена. У вас будет время в течение одного года, чтобы запланировать экзамен. Большинство платежей за экзамены проводятся через PayPal. Если вам нужен чек или квитанция об оплате или же вы не в состоянии оплатить через PayPal, пришлите письмо на register@bsdcertification.org.
В заключение В этой статье мы описали какие бывают методы организации и проведения экзамена BSDA, как подготовиться к экзаменационному мероприятию и как зарегистрироваться на экзамен. В июньском выпуске журнала мы продолжим рассказывать о том, как создаются экзаменационные вопросы и как заинтересованные системные администраторы могут поучаствовать в создании экзамена и в процессе рецензии.
ОБ АВТОРЕ
Dru Lavigne — автор книг BSD Hacks, The Best of FreeBSD Basics и The Definitive Guide to PCBSD. В качестве директора по развитию в проекте PC-BSD, она руководит работой команды по документированию, помогает новым пользователям, оказывает содействие в поиске и исправлении ошибок, работает с сообществом для выяснения потребностей. Она бывший редактор журнала Open Source Business Resource — бесплатного ежемесячного издания посвященного open source и коммерциализации продуктов на его основе. Она также является основателем и председателем совета BSD Certification Group Inc., некоммерческой организации, миссия которой — создание единого стандарта для сертификации системных администраторов BSD систем. Кроме этого, Dru Lavigne является членом совета FreeBSD Foundation.
16
04/2012
Ваш продукт основан на FreeBSD? Расскажите о нем на страницах нашего журнала! editor@bsdmag.su
www.bsdmag.su
17
С НУЛЯ
Устанавливаем OpenBSD 5.0 на VMware Server
Мы собираемся установить OpenBSD 5.0. После ознакомления с данной статьей вы сможете поставить систему как на ваш собственный компьютер, так и в виртуальное окружение VMware Server. В моем примере я буду использовать свой собственный аккаунт на сервер bsdvm.com. Вы узнаете… • Как устанавливать новый экземпляр OpenBSD 5.0
Н
асколько мне известно, это единственный хостинг-провайдер, который предоставляет консольный доступ к виртуальному частному серверу (VPS). Если вы хотите установить OpenBSD 5.0 на ваш собственный компьютер, то просто перейдите к шагу 5.
Что Вам понадобится: Одно из следующих • Компьютер и компакт-диск с OpenBSD 5.0 • Учетная запись на сайте bsdvm.com и компьютер с Windows (из-за ограничений VMware Server) • Собственная инсталляция VMware Server 2.0 Рис. 2 показано, где найти консольный экран, после чего будет предложено установить сам плагин для этой консоли.
Шаг 1
Получаем аккаунт на bsdvm.com
Шаг 2
Отправляем письмо на support@bsdvm.com, и делаем запрос на следующие действия: подключить ISO-образ с BSD 5.0 к вашей виртуальной машине и предоставить информацию для доступа к консоли.
Шаг 3
Настраиваем Internet Explorer, чтобы он принимал сертификаты SSL 2.0. Такое условие связано с ограничениями VMware Server. Плагин для VMware (исполняемый .exe файл для Windows-среды) работал и с Firefox, пока они не начали играться с постоянно увеличивающимися версиями браузера. Сама компания VMware также не предоставляет поддержки чего-либо более современного, нежели SSL 2.0.
Шаг 4
Перейдите по адресу, выданному вам службой поддержки bsdvm.com и войдите в личный кабинет. На
18
Рис. 1 - Настройки Internet Explorer 04/2012
Устанавливаем OpenBSD 5.0 на VMware Server
Шаг 5
DNS Domain Name?
Обратите внимание на кнопки PowerOff/Pause/PowerOn/Reset которые выполнены в качестве иконок и на которые можно нажимать. Как только начнётся ваша сессия в консоли, нажмите F2 чтобы попасть в BIOS. Установите в порядке загрузки первым источником CDROM. Теперь мы готовы к установке OpenBSD 5.0. Если Вас устраивает вариант по умолчанию, указаный в скобках, можете нажимать ENTER. Шаг за шагом и пройдет установка. Вот те вопросы, которые будут заданы: (I)nstall, (U)pgrade, or (S)hell?
Выберите “i” для установки OpenBSD 5.0 Choose your keyboard layout.
Большинство пользователей выбирают стандартную раскладку клавиатуры. Нажмите “?” чтобы посмотреть, какие есть еще. System hostname?
Имя хоста зависит от вашего вкуса. Which network interface do you want to configure? [vic0]
Для выбора стандартного сетевого интерфейса vic0 нажмите ENTER. От службы поддержки support@bsdvm.com вы должны получить ответы на следующие вопросы: IPv4-адрес, сетевая маска, IPv6-адрес (может быть не предоставлен) Теперь переходим к конфигурированию других сетевых интерфейсов. Нажмите ENTER, чтобы выбрать none и, таким образом, отменить конфигурование интерфейсов. Default IPv4 route?
Получите ответ от support@bsdvm.com
Рис. 2 - Страница доступа к консоли www.bsdmag.su
Доменное имя опять зависит от вашего вкуса. DNS Nameservers?
Имена DNS-серверов поддержки.
получите
от
службы
Do you want to do any manual network configuration? [no]
Нужно ли проводить ручную настройку сетевой конфигурации? Ответ – нет. Password for root account?
Пароль для root-аккаунта выбираете сами. Не забудьте его подтвердить. Start sshd(8) by default? [yes]
Запускать ли службу SSHD по умолчанию? Да! Именно так мы будем подключаться к системе после того, как завершим установку. Start ntpd(8) by default? [no]
Запускать ли демон ntdp по умолчанию? Да! Таким образом мы будем синхронизировать время. Do you expect to run the X Window System? [yes]
Предполагаете ли вы использовать X Window System? Нет! Так как по условиям нашего сегодняшнего задания у нас ограниченные ресурсы, то использовать графическую подсистему мы не будем. Change default console to com0? [no]
Поменять стандартную консоль на com0? Нет! Setup a user (enter a lower-case login name or ‘no’) [no]
Зарегистрируйте пользователя. Впишите его имя. У меня используется “toby”. Чуть позже, мы настроим сервер так, что пользователь root не смог бы заходить в систему по SSH-протоколу. Full username for user [toby]
Впишите полное имя пользователя. Я вставил в этом поле “R. Toby Richards”.
Рис. 3 - Клиентское окно от VMware BIOS 19
С НУЛЯ
Теперь мы подошли к процедуре разбиения диска. Я не буду приводить тут весь текст, который выведен Вам на экран. Для начала нажмите “w”, чтобы задействовать всё дисковое пространство. Затем Вы можете нажать “a”, чтобы принять стандартную схему разбиения. Если же Вы хотите разбить диск по своему - нажимайте “c”. Процедура разбиения в таком случае приведена ниже. Мы будем использовать следующие команды:
Рис. 4 - Финальные шаги в установке OpenBSD 5.0
Password for toby account?
Наберите пароль для пользователя. И подтвердите его. Since you set up a user, disable sshd(8) logins for root? [yes]
Т.к. был зарегистрирован новый пользователь, то можно заблокировать вход по SSH для пользователя root. Определенно это стоит сделать - это обеспечит большую безопасность нашей системе. What timezone are you in?
Для поиска вашей временной зоны введите “?”.
• • • • •
z: удалить все разделы a: добавить раздел m: изменить раздел w: записать на диск таблицу разделов q: выйти
Я приведу параметры для диска 10Гб и объема ОЗУ 512Мб. Я не хочу иметь дело с номерами блоков, поэтому я создам раздел, который использует весь диск, а затем изменю этот раздел, чтобы было место для раздела подкачки. Для подкачки стоит выделить столько же места, сколько ОЗУ у Вас в системе. Вы увидите, что я использую параметр “-512M”. Вам нужно поступить аналогичным образом, учитывая ваши реалии.
Available disks are: sd0 Which one is the root disk (or ‘done’)? [sd0]
Использовать диск sd0 для корневого раздела.
Листинг 1 - Настройка единственного раздела > z > a partition: [a] offset: [64] size: [20964761] FS Type: [4.2BSD] mount point: [none] / > m partition to modify: [] a offset: [64] size: [20964736] -512M FS type: [4.2BSD] mount point: [/] > a partition: [b] offset: [19920576] size: [1044249] FS type: [swap] > w > q
20
Теперь у нас есть корневой раздел в 9.5Гб и раздел подкачки в 512Мб. Далее мы получим вопрос, какие пакеты нужно установить. Как я уже отмечал, пакеты для X-подсистемы нам не нужны, поэтому при появлении списка с названиями я набрал “-x*” для исключения ненужных пакетов. Однако нам нужно будет установить пакет xbase для использования портов. Поэтому я затем набрал “+xbase*”. Подготовка к установке на этом практически завершена. После этого пройдет стадия инсталляция выбранных пакетов и можно будет перезагрузиться. См. Рис. 4. Запомните! Как только начнётся перезагрузка, Вам нужно будет зайти в BIOS (нажав F2) и выставить в качестве источника загрузки жесткий диск. На этом наша работа завершена. Наслаждайтесь вашим новым и свежим сервером OpenBSD.
ОБ АВТОРЕ
Toby Richards работает сетевым администратором с 1997 года. Каждая его статья — следствие вынесенных уроков из новых проектов на *BSD системах. Toby рекомендует bsdvm.com для вашего хостинга, так как они предоставляют консольный доступ к вашей виртуальной машине.
04/2012
<<TOP>>
Редакция русской версии журнала открыта для сотрудничества! Пишите нам: editor@bsdmag.su
www.bsdmag.su
21
HOWTO
Устанавливаем FreeBSD в облачное окружение Amazon AWS EC2 У меня есть аккаунт на AWS (Amazon Web Services) ещё с тех пор, как Amazon представил свой вычислительный сервис Elastic Compute Cloud (EC2). Но, честно говоря, тогда запустить на нём виртуальную среду было ещё то шаманство: веб-интерфейс к службе находился в зачаточном состоянии, а сама документация была ограниченной. Вы узнаете… • Как устанавливать FreeBSD в Elastic Compute Cloud (EC2) • Как запускать виртуальный сервер в облаке • Как настраивать виртуальный сервер с помощью PC-BSD или Windows
И
О чем вы должны знать… • Базовые знания по Terminal или Putty • Команды shell типа chmod • Базовое знание по SSH
хотя мне удалось запустить некое подобие виртуального окружения Linux, все-таки цены на эти услуги были несколько крутыми для таких одиноких рейнджеров как я.
или Windows.
С начала презентации EC2, было много желающих запустить в нем FreeBSD, но это было не возможно изза конфликтов между AWS XEN и FreeBSD. Однако, в декабре 2010 года, было объявлено об успешном запуске нашей любимой операционной системы в “облаке” Amazon. В 2012 году я запустил сайт BuildaSearch – поисковую службу, которая, как вы догадались, работает на FreeBSD. Зная, что она теперь может запускаться на EC2, я решил организовать выделенный виртуальный экземпляр ОС, чтобы оттестировать некоторые новые функции моего движка.
1) Прежде, чем мы начнем работать с сервисами Amazon, вам нужно будет загрузить клиенты Putty и PuttyGen с сайта разработчика.
Начнем
В этой статье приводятся шаги, необходимые для запуска виртуального сервера FreeBSD в облаке EC2 используя PC-BSD
Рис. 1 - Консоль управления Amazon AWS 22
04/2012
Устанавливаем FreeBSD в облачное окружение Amazon AWS EC2
Рис. 2 - Создаем ключевую пару средствами Amazon 2) Войдите в свой AWS-аккаунт и нажмите на ссылку EC2 Virtual Server in the Cloud (Рис. 1) 3) Чтобы войти в ваш виртуальный EC2-сервер используя терминал или Putty, вам потребуется создать пару ключей. В рабочем поле EC2 в рубрике Network & Security щелкните на Key Pairs, а затем на Create Key Pair > “название_вашего_ключа” > Finish (Рис. 2)
Рис. 3 - Загружаем ключ в PuttyGen 4) Затем вам будет предложено загрузить ваш ключ - “key.perm” (Windows). Как только сделаете – запускайте PuttyGen.exe. Из меню File выбирайте Load Private Key. Откройте диалог и загрузите “key. perm”. После этого (Рис. 3) щелкайте на кнопку Save Private Key. 5) В ответ на вопрос “Are you sure you want to save this key without a passphrase to protect it?”, нажмите на кнопку Yes (Рис. 4). У вас теперь должен появиться файл “key.ppk”, который в дальнейшем будет использоваться с Putty и сервисами EC2.
Рис. 4 - Сохраняем ключ, совместимый с Putty
www.bsdmag.su
Теперь мы готовы к построению виртуального сервера FreeBSD в облаке EC2. 23
HOWTO
Рис. 5 - Создаем новый (AMI) виртуальный сервер
Рис. 6 - Выбираем FreeBSD (AMI)
6) Внутри панели EC2 щелкните на кнопку запуска экземпляра ОС – Launch Instance. Затем на название экземпляра – Name Your Instance – и выбрав конфигурацию Choose a Launch Configuration увидите дополнительные образы виртуальных машин – More Amazon Machine Images. После этого нажмите на кнопку продолжения Continue (Рис. 5) 7) Впишите “freebsd” в поисковую строку и нажмите поиск – кнопка Search. Все доступные варианты FreeBSD будут показаны. В этом примере мы выберем FreeBSD/EC2 8.2b-RELEASE i386/XEN FreeBSD 8.2b-RELEASE AMI for t1.micro instances (ami-b55f99dc). Как только выбрали нужный образ в формате AMI (Amazon Machine Image), нажмите на кнопку продолжения – Continue (Рис. 6). 8) Вы можете изменить настройки вашего виртуального сервера нажав на Edit Details. Для нашего примера, настроек по умолчанию будет достаточно. Нажимайте на запуск – Launch (Рис. 7), а затем закройте окно Create a New Instance.
Рис. 7 - Конфигурируем и запускаем ваш новый сервер из образа AMI 24
04/2012
Устанавливаем FreeBSD в облачное окружение Amazon AWS EC2
9) Вернитесь в контрольную панель EC2 и скопируйте оттуда адрес вашей машины из поля Public DNS; в моем случае это был: ec2-123413.compute-1.amazonaws. com. После этого вы сможете подключиться к нему либо с помощью терминала, либо с помощью Putty (Рис. 8)
Рис. 8 - Скопируйте и вставьте адрес от Public DNS 10) (Windows) Запустите Putty и в поле Host Name вставьте адрес из Public DNS. В меню Category, которое находится в разделе Connection, нажмите на SSH, а затем на Auth, после чего появятся опции, ответственные за аутентификацию SSH (Рис. 9).
Рис. 9 - Загружаем ppk-ключ в Putty (PC-BSD) # chmod 400 your_key.pem (снимаем ненужные биты
доступа
(PC-BSD) # ssh -i your_key.pem 13.your_aws.amazonaws.com
к
файлу)
root@ec2-1234(Рис. 12).
(PC-BSD) В ответ Вы получите что-то вроде этого: The authenticity of host ‘ ec2-1234-13.your_aws.amazonaws.com (10.254.142.33)’ can’t be established.
Рис. 10 - Открываем приватный ключ в Putty www.bsdmag.su
RSA key fingerprint is 00:00:00:00:00:00:00:00:00:0
0:00:00:00:00:00:00.
Are you sure you want to continue connecting (yes/no)?
25
HOWTO
11) (Windows) Нажимите на кнопку Browse и найдите тот приватный ключ, который был сгенерирован на предыдущем шаге. Нажмите затем на Open (Рис. 10)
Рис. 11 - Подсоединяемся к EC2 с помощью Putty Введите “yes”. Теперь вы подключены к виртуальному серверу с помощью рабочей станции на PC-BSD.
12) (Windows) Выскочит окошко предупреждения от Putty – “The host key is not cached in the registry...”. Нажмите на Yes, если доверяете подключению к хосту (Рис. 11).
13) (Windows) Зайдите под пользователем root. Теперь вы подключены к виртуальному серверу.
Рис. 12 - Теперь вы подключены к виртуальному серверу
В сети • • • •
26
http://aws.amazon.com/ http://www.freebsd.org/ http://www.chiark.greenend.org.uk/~sgtatham/putty/ http://www.daemonology.net/blog/
Успехов! (Рис. 12)
ОБ АВТОРЕ
Diego Montalvo – основатель сайтов BuildaSearch.com (поисковая веб-служба) и Urloid.com (сервис сокращения ссылок). Diego по своей натуре веб-разработчик и технический писатель, любящий пляж, социальные сети, ночные разработки и не прочь пропустить пару пинт горячительных напитков. Не стесняйтесь писать ему по адресу: diego@earthoid.com
04/2012
<<TOP>>
Ваш продукт основан на FreeBSD? Расскажите о нем на страницах нашего журнала! editor@bsdmag.su
www.bsdmag.su
27
HOWTO
PostgreSQL: Репликация данных В предыдущих выпусках мы говорили о том, как установить кластер PostgreSQL, как настроить архивирование информации (как логически, так и физически) и как происходит обработка транзакций. В этой статье вы увидим, как реплицировать работающий кластер на другую машину, чтобы получить полностью зеркалированный узел, работающий в режиме “stand-by”. Вы узнаете… • Что такое репликация • Как настроить внутренний кластер для репликации • Как производить мониторинг подчиненного узла в схеме репликации
Б
ольшая часть конфигурирования будет произведена с помощью простых shell-скриптов, чтобы показать как работают инструкции и дать возможность читателям самим немножко “поиграться”. Заметьте, что приведённые в этой статье конфигурации даны только для обучения и предназначены в качестве отправной точки при работе с репликацией данных.
Быстрый взгляд на репликацию
Репликация кластера базы данных означает создание клона мастер-кластера, который постоянно синхронизирован с мастером и готов к работе сразу же, как только мастер-узел откажет. Репликация — это путь к высокой доступности (HA – High Availability): вы можете реплицировать вашу главную базу данных на подчинённый узел (или несколько узлов), чтобы быть уверенным в том, что при падении главного узла или же его недоступности, подчинённый узел сразу же займёт место отказавшего мастера. Так как суть репликации — создание клонов, крайне рекомендуется создавать максимально идентичные рабочие окружения начиная с версии PostgreSQL и заканчивая операционными системами и даже аппаратной начинкой. В идеале Вы можете разместить узлы репликации там, где Вы сами
28
О чем вы должны знать… • базовые знания SQL • базовые знания PostgreSQL и конфигурационных параметров • основные shell-команды
считаете нужным: это может тот же самый узел или же другая машина, расположенная далекодалеко. Конечно, нельзя забывать, что в конечном счёте надёжность репликации (а, следовательно, и высокой доступности) основывается на надёжности аппаратного обеспечения, сетевого соединения и прочих факторов. Конфигурация сети для репликации зависит от той цели, которую вы ставите перед собой – нужно ли вам сделать простой узел для горячей замены, требуется ли окружение для разработки или же нужна система с высокой доступностью (HA). Для PostgreSQL существует несколько репликационных решений, как открытого (OpenSource), так и коммерческого характера. В этой статье мы покажем только родные методы репликации, доступные с 9-й версии. Следует отметить, что репликация в PostgreSQL достаточно развита, т.к. на её развитие ушли годы разработки и тестирования; таким образом её вполне можно использовать для промышленного применения. Также стоит отметить, что в версии PostgreSQL до 9-й ветки, также есть внешние утилиты репликации. Многие из них всё ещё можно найти и они доступны администраторам баз данных, поэтому последние имеют достаточно широкое пространство для маневров в зависимости
04/2012
PostgreSQL: Репликация данных
от требований, рабочего окружения и опыта.
Настраиваем рабочее окружение
Для включения репликации у вас должен быть по крайней мере один кластер с ролью “мастер” и другой узел с ролью “stand-by”. Для целей данной статьи мы будем использовать рабочие копии на одной и той же машине: /postgresql/cluster1 в качестве “мастера” и управляемый через переменные окружения; /postgresql/clusterX (в качестве X будет выступать номер) – экземпляр базы в режиме ожидания, работающий на этой же машине, но на других портах TCP/IP. Чтобы дать возможность читателям поэкспериментировать с репликацией, были созданы несколько shell-скриптов. Они позволяют сконфигурировать и протестировать standby-узел репликации, запускаемый на локальной машине. В частности, кластер X будет работать на стандартном для PostgreSQL TCP/IP-порту, увеличенном на значение X, для того, чтобы отличать его от мастерузла, который работает на этой же машине. В дальнейшем мы рассмотрим все детали репликации, но пока запомните следующую схему организации кластеров: • • • •
кластер 1 – это мастер-узел (работает на порту 5432); кластер 3 – узел репликации в ждущем режиме и на основе log-shipping (порт 5435); кластер 4 – узел репликации в ждущем режиме и на основе log streaming (порт 5436); кластер 5 – узел репликации в режиме горячей замены (порт 5437).
Кластер с номером 2 пропущен, т.к. он использовался в предыдущей статье для показа возможностей Point-in-Time-Recovery, и мы хотим сохранить ту конфигурацию. Также отметьте, что для каждого примера репликации будет использоваться только мастер-узел (кластер 1) и соответствующий этой схеме репликации узел. Учтите, что в этой статье мы будем использовать такие понятия как “мастер-узел” и “standby-узел” для определения активного кластера и узла, на который происходит репликация. Хотя в реальном окружении такое разделение зачастую условно, т.к. ожидающий узел может быть сконфигурирован как мастер, а сам мастер как standby-узел, и наоборот. Более того,
www.bsdmag.su
вы можете увидеть также выражение “активация узла”, которое означает перевод ожидающего узла в активное состояние в связи с отказом или сбоем мастера. Скрипт 01-createAndConfigureStandby.sh (см. Листинг 4) создаёт конфигурацию для ожидающего узла. В качестве параметра используется номер узла и тип желаемой репликации. Скрипт 00-workload.sh (см. Листинг 5) создаёт простейшую нагрузку на мастер-узел и standby-узел чтобы показать как происходит процесс репликации. В этих примерах машина, хранящая все кластеры, имеет IP-адрес 192.168.200.2.
WAL-логи управляют миром!
Решение, предлагаемое собственными средствами PostgreSQL для выполнения репликации, является элегантным и эффективным: каждый standby-узел управляется мастером таким образом, чтобы к данным на нём применялись те же самые изменения, что и к мастер-узлу, так что после некоторой паузы, данные на этом узле будут идентичны данным мастер-узла. Такое управление выполняется с помощью WALлогов (Write Ahead Logs), в которых хранятся снимки данных, а также изменения, произошедшие в недавних транзакциях. Рассылка WAL-логов на узлы позволяет последним провести аналогичные транзакции, чтобы изменения в данных были идентичны. Такой подход на самом деле похож на выполнение физического архивирования, которое мы рассматривали в первой части статьи (см. статью о PITR): экземпляр базы на standby-узле воспроизводит с помощью WAL-логов те же самые транзакции, которые были ранее сделаны на мастере (вроде того, что происходит при сбоях). Этот standby-узел постоянно исполняет присылаемые ему транзакции, и, таким образом, всегда синхронизирован с главным, мастер-узлом. Имейте ввиду, что каждый standby-узел должен быть первоначально восстановлен из физической копии мастер-кластера и, следовательно, для каждого вида репликации необходимо запустить pg_start_backup(), провести физическое архивирование и выполнить pg_stop_backup() на мастере, прежде чем запустить клонированный узел (см. Листинг 4).
Репликация в режиме Log-shipping
Первый метод репликации, который мы будем рассматривать в данной секции – это репликация в
29
HOWTO
режиме “Log Shipping”. Принцип и реализация очень похожа на механизм PITR, который мы рассматривали в первой статье на эту тему. Мастер-узел архивирует WAL-логи в место, доступное для standby-узла(ов); последний подхватывает их и проводит постоянное воспроизведение хранимых там транзакций (см. Рис. 1). В нашем примере директория /postgresql/ pitr используется для хранения архивов WAL, поэтому конфигурационный файл postgresql.conf мастер-узла должен включать следующие опции:
archive_mode=on
archive_command=’cp -i %p /postgresql/pitr/%f’
Узел в режиме ожидания является только клоном, поэтому ему не нужно архивировать WAL-логи самому и, следовательно, его конфигурационный файл будет содержать:
archive_mode=’off’
standby_mode=’on’
restore_command=’cp /postgresql/pitr/%f %p’
archive_cleanup_command=’pg_archivecleanup /postgresql/ pitr %r’
trigger_file=’/postgresql/standby.3.trigger’
wal_level=’archive’
wal_level=’minimal’
Очень важно указать ждущему узлу, что он является именно standby-узлом, а не одиночным мастерсервером и где искать архивированные WAL-логи. Для этой реализации, нужно создать файл recovery.conf.
Первая строка (standby_mode) указывает кластеру, что он должен работать как ожидающий узел и, таким образом, постоянно производить обработку транзакций из WAL-логах. Строка restore_command используется для захвата WAL-логов, сгенерированных мастер-узлом. Естественно, что эта вызываемая команда должна быть идентична используемой в конфигурационном файле postgresql.conf мастерузла в разделе archive_command. Эта команда может быть любой, какой угодно, в зависимости от того, где хранятся WAL-логи и способа доступа к
Рис. 1 - Сценарий репликации в режиме log-shipping 30
04/2012
PostgreSQL: Репликация данных
ним. Директива archive_cleanup_command является опциональной: в ней выставляется команда, которая будет запущена для упаковки уже сгенерированных WAL-логов. Обычно это команда на удаление старых логов для освобождения дискового пространства. Это и делает команда pg_archivecleanup, удаляя уже обработанные логи (%r) с диска. Стоит отметить, что команда pg_archivecleanup не знает, сколько именно standby-узлов забирают WAL-логи из репозитория. Другими словами, представьте, что существует несколько ждущих узлов, сконфигурированных по приведённому выше примеру, которые обращаются к одному и тому же WAL-хранилищу. Один из узлов теоретически может удалить логи, которые ещё не были обработаны другими standby-узлами. Для решения этой проблемы администраторы баз данных должны тщательно подходить к конфигурированию архивного WAL-пространства, например, выделяя отдельную директорию для каждого standby-экземпляра базы данных. Таким образом гарантируется, что каждый узел сможет проводить операцию очистки дискового пространства, которая не повлияет на работу других узлов. Последняя директива – trigger_file – используется для “активации” ждущего узла (promotion). Фактически, если у вас ждущий кластер сконфигурирован также, как в нашем примере, то он на самом деле работает, но не принимает никаких входящих подключений. Другими словами, если вы попытаетесь к этому standby-узлу, то вы увидите следующее сообщение об ошибке: $ psql -U bsdmag -p 5435 bsdmagdb psql: FATAL:
the database system is starting up
Кластер уже запущен, но ещё не готов, т.к. он воспроизводит WAL-логи. Как только standby-узел находит trigger_file, то останавливает транзакции из WAL-логов и начинает жить своей жизнью в качестве самостоятельного кластера: с этого времени мастер-узел и ждущий узел перестают хранить синхронную информацию. Суть в том, что этот триггерный файл может служить в качестве уведомления, сигнализирующей о том, что чтото произошло на стороне мастера и ждущий узел должен его подменить. Читатели, думаю, могут сами придумать собственные скрипты по опросу состояния мастер-узла, включающие standby-узел при аварии. В приводимых примерах для активизации ждущего узла используется следующая команда: $ touch /postgresql/standby.3.trigger
www.bsdmag.su
Если подвести итог, то порядок действий для выполнения репликации в режиме log-shipping такой: • • • •
•
настраивается мастер-узел, который генерирует WAL-логи; производится физическое архивирование мастер-узла для создания standby-кластера; конфигурируется ожидающий (standby) узел, который не генерирует WAL-логи (подробнее об этом чуть позже); создаётся файл recovery.conf с помощью которого задаётся управление ждущим узлом и в котором содержится команда для получения (и возможно, для удаления) WAL-логов; при необходимости создаётся триггерный файл, который информирует ждущий узел что пора отделиться от мастер-узла и начать принимать соединения от пользователей.
В этом примере ждущий узел был сконфигурирован таким образом, чтобы он не смог сам генерировать WAL-логи; это означает, что как только ждущий узел становится активным, а затем мастер-узел восстанавливает свою работу, то две базы будут в рассинхронизированном состоянии. В зависимости от ваших рабочих требований, вы можете сделать так, чтобы ждущий узел начал бы сам уже в качестве мастера генерировать WAL-логи, а восстановившийся мастер заработал был в роли ждущего. Конечно, возможны и другие сценарии. В листинге 1 приведён механизм репликации logshipping в действии: ждущий кластер идёт под номером 3, а рабочей нагрузкой будет вставка одного миллиона записей в таблицу magazine и генерация таблицы test с 500 тысячами записей. Финальный результат — оба кластера хранят одинаковые данные: Activating the stand-by node...
========================================== Tuples in the master node (magazine table) 100000
Tuples in the master node (test table) 50000
========================================== Tuples in the slave node (magazine table) 100000
Tuples in the slave node (test table) 50000
==========================================
31
HOWTO
Репликация в режиме передачи логов (log streaming) При настройке репликации в режиме log-shipping, WAL-логи передавались от мастера на ждущий узел(ы) с помощью внешних инструментов и внешнего хранилища. В примере использовалась общая директория и команда cp(1). Репликация в режиме передачи логов (log streaming) в свою очередь не требует общего хранилища, т.к. каждый ждущий узел автономно запрашивает мастер-узел на предмет WAL-логов используя TCP/IP-соединение (см. рис. 2). В этом случае не нужно выделять разделяемое хранилище, которое может быть потенциальным звеном при отказе в первой схеме. Более того, вторая схема выглядит как целостное решение на базе PostgreSQL, т.к. все соединения от одной базы к другой устанавливаются напрямую посредством PostgreSQL. Для целей безопасности, мастер-узлу требуется дополнительный пользователь с правом выполнения репликации (REPLICATION) для обслуживания входящих WAL-запросов. Ждущие узлы будут подключаться к мастеру с правами этого пользователя (можно создать общего пользователя, либо создать уникальных пользователей для каждого кластера). Для создания пользователя с правами репликации на мастер-узле нужно запустить следующую команду: CREATE USER replicator WITH REPLICATION LOGIN CONNECTION
LIMIT 1 PASSWORD ‘replicatorPassword’;
Помимо выдачи ему права REPLICATION, этому пользователю должено быть разрешено подключение к мастер-узлу, т.е. в файл pg_hba.conf на мастере должна быть добавлена новая строка, которая разрешает установление соединения для этого пользователя: host replication replicator 192.168.200.0/24 trust
Можно ограничить соединения конкретным узлом вместо целой сети, кроме того можно запрашивать пароль на подключение (вместо опции trust). Однако
Листинг 1. Конфигурируем и запускаем узел репликации в режиме log-shipping ~> sh 01-createAndConfigureStandby.sh 3 logshipping ~> /usr/local/bin/pg_ctl -D /postgresql/cluster3 start ~> sh 00-workload.sh 3 promote
для нашего примера такая конфигурация сгодится. Мастер-узел так же требуется переконфигурировать, т.к. требуется обслуживать несколько выделенных потоков, которые генерируют WAL-логи для ждущих узлов. В этом сценарии не требуется прописывать команду archive_command для WAL-логов, поэтому можно просто разместить в строке выражение, возвращающее значение “true”. Следовательно, в файле postgresql.conf будет достаточно разместить следующие директивы: wal_level=’archive’ archive_mode=on
archive_command=’test 1 = 1’ archive_timeout=30 max_wal_senders=1
wal_keep_segments=50
В нашем примере на мастере выделяется единичный процесс для обслуживания входящих WAL-запросов от standby-узла. Параметр wal_keep_segments указывает мастеру хранить определенное количество WAL-файлов (каждый по 16 Мб) в директории pg_xlog на тот случай, если соединение со standby-узлом разорвется. В этом случае, при восстановлении связи со ждущим узлом, он сможет позднее забрать нужные WAL-логи, требуемые для синхронизации. Другими словами, соединение со ждущим узлом может быть прервано не более, чем на время, определяемое в wal_keep_segments. После этого синхронизация не гарантируется, т.к. мастер может уже удалить у себя нужные для standby-узла WAL-логи. Обратите внимание, что в строке archive_command может быть любое значение, которое возвращает значение True, а также то, что каждые 30 секунд генерируется новый WAL-лог, и который записывается на диск (и становится, таким образом, доступен ждущим узлам). Аналогично, в конфигурации для ждущего узла не нужно задавать строку команды acrhive_cleanup_command. Всё, что нужно теперь ждущим узлам, так это параметры для подключения к мастер-узлу, чтобы запросить у последнего необходимые WAL-логи. Это определеяется в файле recovery.conf следующим образом: standby_mode=’on’
primary_conninfo=’ host=192.168.200.2 user=replicator’ trigger_file=’/postgresql/standby.4.trigger’
Также, как и в режиме репликации log-shipping,
32
04/2012
PostgreSQL: Репликация данных
Листинг 2. Конфигурирование и запуск узла репликации на основе передачи логов (log-streaming)
Activating the stand-by node...
~> sh 01-createAndConfigureStandby.sh 4 logsstreaming ~> /usr/local/bin/pg_ctl -D /postgresql/cluster4 start ~> sh 00-workload.sh 4 promote
Tuples in the master node (test table)
ждущий узел должен быть проинформирован, что он должен работать как клон, а не выделенный кластер (инструкция standby_mode=’on’) и что пора начинать действовать самостоятельно сразу же, как только будет найден файл trigger_file. Как читатели могут видеть, ждущий узел подключается к мастер-узлу используя информацию в primary_conninfo, в частности, IP-адрес хоста и имя пользователя для соединения. Режим репликации передачи логов можно настроить используя команды из листинга 2. В них производится выполнение перечисленных выше шагов, а также запуск загрузки для мастера и дальнейшнее активирование ждущего узла в качестве отдельно-работающего. Как и в предыдущем случае, результатом загрузки будет одинаковое количество записей как в мастер-узле, так и в ждущем узле (теперь активизированном).
========================================== Tuples in the master node (magazine table) 1000000 500000
========================================== Tuples in the slave node (magazine table) 1000000
Tuples in the slave node (test table) 500000
==========================================
Действия по выполнению репликации в режиме передачи логов выполняются в следующей последовательности: • • • •
конфигурирование мастер-узла для генерирования WAL-логов; выполнение физического архивирования с мастер-узла для создания ждущего кластера; конфигурирование ждущего кластера таким образом, чтобы он не генерировал WAL-логи; создание файла recovery.conf, который заставит ждущий узел работать в режиме ожидания и запрашивать с мастер-узла свежие WAL-логи;
Рис. 2 - Сценарий репликации с помощью передачи логов (log-streaming)
www.bsdmag.su
33
HOWTO
Листинг 3. Конфигурирование и запуск узла репликации в режиме „горячей замены” ~> sh 01-createAndConfigureStandby.sh 5 hotstandby ~> /usr/local/bin/pg_ctl -D /postgresql/cluster5 start ~> sh 00-workload.sh 5 show
Когда потребуется, мы создаём переключающий файл (trigger_file), чтобы ждущий узел отключался от мастера и начинал работать самостоятельно, т.е. принимал подключения от сторонних пользователей. Как видим, процедура конфигурации почти идентична той, что мы рассматривали в предыдущем случае (режим log-shipping), за исключением нескольких параметров.
Переключаемся на Standbу-узел в горячем режиме! В двух предыдущих сценариях репликации оба ждущих узла были сконфигурированы так, чтобы не принимать входящих соединений, пока они не переключатся и не станут главными узлами. Однако в PostgreSQL возможно задание так называемой “поточной репликации”, также известной как “горячая
замена” (Hot Standby). В этом режиме ожидающие узлы могут принимать соединения от клиентов, выполняющих запросы на чтение (например, запрос SELECT), но запрещающих клиентам изменять данные. Другими словами, ожидающий узел можно использовать как еще один активный узел в сетевой архитектуре, например, для организации балансировки нагрузки. Конфигурация для “горячей замены” очень похожа на схему репликации log-streaming – ожидающий узел запрашивает WAL-логи с мастер-узла, который, в свою очередь, информируется, что надо работать в конфигурации “горячей замены”. Более того, ожидающий узел также знает, что надо работать в этом режиме и, следовательно, нужно принимать клиентские подключения и выполнять запросы от пользователей в режиме “только-для-чтения” (см. рис. 3). Следующие параметры должны присутствовать в конфигурационном файле postgresql.conf на мастерузле: wal_level=’hot_standby’ archive_mode=on
archive_command=’test 1 = 1’ archive_timeout=30 max_wal_senders=1
Рис. 3 - Сценарий для репликации в режиме Hot Standby 34
04/2012
PostgreSQL: Репликация данных
Листинг 4.1. Скрипт для создания с нуля конфигурации узла реплицирования #!/bin/sh STANDBY_CLUSTER_NUMBER=$1 REPLICATION_MODE=$2 REPLICATION_SYNC=$3 POSTGRESQL_ROOT=/postgresql WAL_ARCHIVES=${POSTGRESQL_ROOT}/pitr MASTER_CLUSTER=${POSTGRESQL_ROOT}/cluster1 DEST_CLUSTER=${POSTGRESQL_ROOT}/cluster${STANDBY_CLUSTER_NUMBER} RECOVERY_FILE=$DEST_CLUSTER/recovery.conf HOST_IP=192.168.200.2 HOST_NET=192.168.200.0/24 REPLICATION_USER=”replicator” POSTGRESQL_CONF_TEMPLATE=/postgresql/postgresql.conf.template REPLICATION_MODE_LOGSHIPPING=”logshipping” REPLICATION_MODE_LOGSTREAMING=”logstreaming” REPLICATION_MODE_HOTSTANDBY=”hotstandby” REPLICATION_MODE_SYNC=”sync” REPLICATION_MODE_ASYNC=”async” # Функция для настройки файловой системы на standby узле # и для запуска бэкапа на мастере clone_master(){ # останавливаем кластер, если он запущен /usr/local/bin/pg_ctl -D $DEST_CLUSTER stop >/dev/null 2>&1 sleep 2 rm -rf $DEST_CLUSTER mkdir $DEST_CLUSTER chown pgsql:pgsql $DEST_CLUSTER chmod 700 $DEST_CLUSTER echo “Starting physical backup of the master node [$BACKUP_LABEL]” psql -U pgsql -c “SELECT pg_start_backup(‘REPLICA-$BACKUP_LABEL’);” template1 cp -R ${MASTER_CLUSTER}/* $DEST_CLUSTER rm -rf $DEST_CLUSTER/pg_xlog/* $DEST_CLUSTER/*.pid $DEST_CLUSTER/recovery.* $DEST_CLUSTER/*label* psql -U pgsql -c “SELECT pg_stop_backup();” template1 echo “Physical backup of the master node [$BACKUP_LABEL] finished” } # Создаём файл recovery.conf для standby узла при настройке в режиме log-shipping create_recovery_file_for_log_shipping(){ rm $TRIGGER_FILE > /dev/null 2>&1 echo “standby_mode=’on’” > $RECOVERY_FILE echo “restore_command=’cp $WAL_ARCHIVES/%f %p’” >> $RECOVERY_FILE echo “archive_cleanup_command=’pg_archivecleanup $WAL_ARCHIVES %r’” >> $RECOVERY_FILE echo “trigger_file=’$TRIGGER_FILE’” >> $RECOVERY_FILE } # Создаём пользователя для репликации на мастере, чтобы дать возможность для standby узла подключиться # используя этого же пользователя для получения WAL логов create_replication_user_on_master_if_not_exists(){ # проверяем, существует ли пользователь для репликации и имеет ли он необходимые для неё возможности REPLICATION_USER_EXISTS=`psql -U pgsql -A -t -c “SELECT rolreplication FROM pg_roles WHERE rolname = ‘$REPLICATION_USER’;” template1` if [ -z “$REPLICATION_USER_EXISTS” ] then echo “Creating the replication user $REPLICATION_USER”
www.bsdmag.su
35
HOWTO
Листинг 4.2. Скрипт для создания с нуля конфигурации узла реплицирования psql -U pgsql -c “CREATE USER $REPLICATION_USER WITH REPLICATION LOGIN CONNECTION LIMIT 1 PASSWORD ‘$REPLICATION_ USER’;” template1 else if [ $REPLICATION_USER_EXISTS = “t” ] then echo “Replication user $REPLICATION_USER already exists on the master cluster!” else if [ $REPLICATION_USER_EXISTS = “f” ] then echo “Replication user $REPLICATION_USER already exists but does not have replication capabilities! Altering the role...” psql -U pgsql -c “ALTER ROLE $REPLICATION_USER WITH REPLICATION;” template1 fi fi fi } # Добавляем запись в pg_hba.conf, чтобы разрешить подключение второго хоста для репликации add_entry_pghba_if_not_exists(){ grep $REPLICATION_USER ${MASTER_CLUSTER}/pg_hba.conf > /dev/null 2>&1 if [ $? -ne 0 ] then echo “adding an entry in the master pg_hba.conf” echo “host replication $REPLICATION_USER ${HOST_NET} trust” >> ${MASTER_CLUSTER}/pg_hba.conf fi } # Функция для проверки файла конфигурации на мастере, чтобы убедиться # что его конфигурация соответствует репликации методом log-shipping adjust_master_configuration_for_log_shipping(){ local CONF=${MASTER_CLUSTER}/postgresql.conf cp $CONF /postgresql/postgresql.conf.beforeLogShipping.$$ > /dev/null 2>&1 # wal_level = ‘archive’ sed -i .bak “s/wal_level[ \t]*=.*/wal_level=’archive’/g” $CONF # archive_mode = on sed -i .bak “s/archive_mode[ \t]*=.*/archive_mode=on/g” $CONF # archive command => copy to pitr directory sed -i .bak “s,archive_command[ \t]*=.*,archive_command=’cp -i %p /postgresql/pitr/%f’,g” # force a log segment every 30 seconds max sed -i .bak “s/archive_timeout[ \t]*=.*/archive_timeout=30/g” $CONF }
$CONF
# Функция для проверки файла конфигурации на мастере, чтобы убедиться # что его конфигурация соответствует репликации методом log-streaming adjust_master_configuration_for_log_streaming(){ local CONF=${MASTER_CLUSTER}/postgresql.conf cp $CONF /postgresql/postgresql.conf.beforeLogStreaming.$$ > /dev/null 2>&1 # wal_level = ‘archive’ sed -i .bak “s/wal_level[ \t]*=.*/wal_level=’archive’/g” $CONF # archive_mode = on sed -i .bak “s/#*archive_mode[ \t]*=.*/archive_mode=on/g” $CONF sed -i .bak “s,#*archive_command[ \t]*=.*,archive_command=’test 1 = 1’,g” $CONF # force a log segment every 30 seconds max sed -i .bak “s/#*archive_timeout[ \t]*=.*/archive_timeout=30/g” $CONF # esnure at least one wal sender sed -i .bak “s/#*max_wal_senders[ \t]*=.*/max_wal_senders=1/g” $CONF # log connections, so we can see how is connecting to the master node sed -i .bak “s/#*log_connections[ \t]*=.*/log_connections=on/g” $CONF # keep wal segments as emergency action sed -i .bak “s/#*wal_keep_segments[ \t]*=.*/wal_keep_segments=16/g” $CONF }
36
04/2012
PostgreSQL: Репликация данных
Листинг 4.3. Скрипт для создания с нуля конфигурации узла реплицирования # Функция для проверки файла конфигурации на мастере, чтобы убедиться # что его конфигурация соответствует репликации методом hotstandby adjust_master_configuration_for_hotstandby(){ local CONF=${MASTER_CLUSTER}/postgresql.conf cp $CONF /postgresql/postgresql.conf.beforeHotStandby.$$ > /dev/null 2>&1 # wal_level = ‘archive’ sed -i .bak “s/wal_level[ \t]*=.*/wal_level=’hot_standby’/g” $CONF # archive_mode = on sed -i .bak “s/#*archive_mode[ \t]*=.*/archive_mode=on/g” $CONF sed -i .bak “s,#*archive_command[ \t]*=.*,archive_command=’test 1 = 1’,g” $CONF # force a log segment every 30 seconds max sed -i .bak “s/#*archive_timeout[ \t]*=.*/archive_timeout=30/g” $CONF # esnure at least one wal sender sed -i .bak “s/#*max_wal_senders[ \t]*=.*/max_wal_senders=1/g” $CONF # log connections, so we can see how is connecting to the master node sed -i .bak “s/#*log_connections[ \t]*=.*/log_connections=on/g” $CONF # keep wal segments as emergency action sed -i .bak “s/#*wal_keep_segments[ \t]*=.*/wal_keep_segments=16/g” $CONF # terminate the connections if the standby has crashed sed -i .bak “s/#*replication_timeout[ \t]*=.*/replication_timeout=60/g” $CONF } # Активируем конфигурацию мастера для синхронной репликации adjust_master_sync_replication(){ local CONF=${MASTER_CLUSTER}/postgresql.conf SYNC_APP_NAME=”sync_replication_$STANDBY_CLUSTER_NUMBER” echo “Synchronous application name: $SYNC_APP_NAME” sed -i .bak “s/#*synchronous_standby_names[ \t]*=.*/synchronous_standby_names=$SYNC_APP_NAME/g” sed -i .bak “s/#*synchronous_commit[ \t]*=.*/synchronous_commit=on/g” $CONF sed -i .bak “s/#*replication_timeout[ \t]*=.*/replication_timeout=1000/g” $CONF }
$CONF
# Перезапускаем мастер restart_master_cluster(){ echo “Restarting the master cluster...” /usr/local/etc/rc.d/postgresql restart } # Создаём recovery.cong для standby узла для log-streaming create_recovery_file_for_log_streaming(){ rm $TRIGGER_FILE > /dev/null 2>&1 echo “standby_mode=’on’” > $RECOVERY_FILE echo “primary_conninfo=’ host=$HOST_IP user=$REPLICATION_USER’” >> $RECOVERY_FILE echo “trigger_file=’$TRIGGER_FILE’” >> $RECOVERY_FILE } create_recovery_file_for_log_streaming_sync_replication(){ rm $TRIGGER_FILE > /dev/null 2>&1 echo “standby_mode=’on’” > $RECOVERY_FILE echo “primary_conninfo=’ host=$HOST_IP user=$REPLICATION_USER application_name=$SYNC_APP_NAME ‘” >> $RECOVERY_ FILE echo “trigger_file=’$TRIGGER_FILE’” >> $RECOVERY_FILE } adjust_standby_configuration(){ local CONF=$DEST_CLUSTER/postgresql.conf sed -i .bak “s/#*port[ \t]*=[ \t]*\([0-9]*\)/port=$DEST_PORT/g” sed -i .bak “s/wal_level[ \t]*=.*/wal_level=’minimal’/g” sed -i .bak “s/archive_mode[ \t]*=.*/archive_mode=’off’/g” sed -i .bak “s/max_wal_senders[ \t]*=.*/#max_wal_senders=0/g” sed -i .bak “s/#*log_connections[ \t]*=.*/log_connections=off/g” }
www.bsdmag.su
$CONF $CONF $CONF $CONF $CONF
37
HOWTO
Листинг 4.4. Скрипт для создания с нуля конфигурации узла реплицирования # Функция для активации hot standby на узле activate_hot_standby_on_standby_node(){ local CONF=$DEST_CLUSTER/postgresql.conf sed -i .bak “s/#*hot_standby[ \t]*=.*/hot_standby=on/g” }
$CONF
activate_hot_standby_sync_on_standby_node(){ local CONF=$DEST_CLUSTER/postgresql.conf sed -i .bak “s/#*hot_standby[ \t]*=.*/hot_standby=on/g” $CONF sed -i .bak “s/#*wal_receiver_status_interval[ \t]*=.*/wal_receiver_status_interval=500/g”
$CONF
} # Выводим инструкции по использованию standby print_final_info(){ echo “Standby node $STANDBY_CLUSTER_NUMBER will listen on port $DEST_PORT” echo “Execute the following command to change the status of the standby” echo “in order to accept incoming connections:” echo echo “ touch $TRIGGER_FILE “ echo echo “To manage the cluster use:” echo echo “ /usr/local/bin/pg_ctl -D $DEST_CLUSTER {start | stop}” echo echo “To run a workload please execute” echo echo “ sh 00-workload.sh $STANDBY_CLUSTER_NUMBER [activate | show]” } # Проверяем количество аргументов if [ $# -lt 2 ] then echo “Usage:” echo “$0 <standby-number> <$REPLICATION_MODE_LOGSHIPPING | $REPLICATION_MODE_LOGSTREAMING | $REPLICATION_MODE_ HOTSTANDBY> [start]” exit fi # Проверка того, что мы действуем не на мастере if [ $STANDBY_CLUSTER_NUMBER -eq 1 ] then echo “Cluster #1 is the master!” exit fi # Вычисляем на каком TCP/IP порту standby узел будет принимать подключения DEST_PORT=`psql -U bsdmag -A -t -c “SELECT setting FROM pg_settings WHERE name = ‘port’;” template1` DEST_PORT=`expr $DEST_PORT + $STANDBY_CLUSTER_NUMBER` echo “Destination port $DEST_PORT” # где будет находиться файл recovery для данного standby узла RECOVERY_FILE=$DEST_CLUSTER/recovery.conf # which recovery file to use to activate the node? # какой recovery файл будет использоваться для активации данного узла TRIGGER_FILE=/postgresql/standby.${STANDBY_CLUSTER_NUMBER}.trigger # какой тип репликации я должен использовать? case $REPLICATION_MODE in ${REPLICATION_MODE_LOGSHIPPING}) echo “Log shipping replication”
38
04/2012
PostgreSQL: Репликация данных
replication_timeout=60 wal_keep_segments=16
По аналогии со схемой репликации в режиме “logstreaming”, ожидающий узел будет требовать наличия файла recovery.conf, в котором хранятся настройки для работы в “горячей замене” и где находится адрес мастер-узела (т.е. откуда забирать WAL-сегменты): standby_mode=’on’
Действия для выполнения репликации в режиме “горячего ожидания” выполняются в такой последовательности: • •
primary_conninfo=’ host=192.168.200.2 user=replicator’
•
Более того, для standby-узла требуется специальная опция в postgresql.conf, которая бы информировала кластер, что можно принимать подключения в режиме “только-для-чтения”:
•
trigger_file=’/postgresql/standby.4.trigger’
hot_standby=on
Интересно следить за процессом репликации: скрипт 00-workload.sh может отображать реплицируемую информацию, если будет запущен с параметром show, как показано в листинге 3. В этом случае вывод информации будет следующим: Showing replica information ====== MASTER =======
1116 postgres: archiver process =====================
====== STANDBY =======
1150 postgres: startup process ===================== xlog location: master
C9AF5F8
(9999598)
xlog location: standby C9AF5F8 (9999598) Difference is
0
На мастер-узле работает процесс archiver, который отвечает за сохранение WAL-логов и отсылке их на ждущие узлы; с другой стороны, есть процесс startup, который воспроизводит полученные WALлоги. Можно увидеть последний WAL-сегмент, сгенерированный на мастер-узле с помощью функции pg_current_xlog_location() и его же на standby-узле с помощью функции pg_last_xlog_replay_location(). Как показано в информационном выводе, разница между сегментами равна 0, что означает, что ждущий узел синхронизирован с мастер-узлом. Упомянутый скрипт в непрерывном режиме распечатывает информацию о сихронизации, пока не произойдёт ошибка в репликации.
www.bsdmag.su
конфигурирование мастер-узла, чтобы он генерировал WAL-логи в режиме “горячего ожидания”; выполнение физического архивирования мастерузла для создания ожидающего кластера; настройка ожидающего кластера для работы в режиме “горячего ожидания” и предотвращения генерации WAL-логов; создание файла recovery.conf, который заставит ожидающий узел работать в нужном режиме и запрашивать мастер-узел на предмет наличия WAL-логов;
При необходимости мы генерируем триггерный файл для уведомления ожидающего узла, что пора отсоединиться от мастера и начать принимать пользовательские подключения. Опять же, конфигурация почти такая же, что и в предыдущих сценариях репликации. Режим “горячего ожидания”, описанный выше, также называется асинхронной репликацией, т.к. мастерузел не отслеживает напрямую статус ожидающего узла. Другими словами, раз транзакция на мастерузле произведена, то мастер переводит её в разряд совершенных, даже если ожидающий узел не запросил информацию о ней и не провёл её на своих данных. Самое страшное, что сейчас может произойти — так это разрыв соединения между мастером и ожидающим узлом. В результате ожидающий узел не сможет полностью синхронизировать свое состояние с мастером. Для избежания таких ситуаций, начиная с версии 9.1 в PostgreSQL внедрена поддержка синхронной репликации: каждый раз, когда транзакция совершается на мастере, он будет ожидать подтверждения от standby-узлов, чтобы убедиться, что они тоже отработали эти транзакции. Предвидя вопрос читателей, что может сложиться такая ситуация, когда мастер-узел будет бесконечно ожидать подтверждения от своих узлов, что быстро превращается в БОЛЬШУЮ ПРОБЛЕМУ (например, такая ситуация возможна, если ждущие узлы не способны отослать обратно свои подтверждения), сообщаю Вам, что мастер-узел будет ждать подтверждения только определенное время, после чего в любом случае применит транзакционные изменения.
39
HOWTO
Листинг 4.5. Скрипт для создания с нуля конфигурации узла реплицирования BACKUP_LABEL=${REPLICATION_MODE_LOGSHIPPING} # 0) убеждаемся, что мастер имеет верную конфигурацию для log-shipping adjust_master_configuration_for_log_shipping restart_master_cluster # 1) клонируем мастера в файловую систему standby clone_master # 2) создаём recovery.conf create_recovery_file_for_log_shipping # 4) применяем postgresql.cong к standby узлу adjust_standby_configuration ;; ${REPLICATION_MODE_LOGSTREAMING}) echo “Log streaming replication” BACKUP_LABEL=${REPLICATION_MODE_LOGSTREAMING} # 0) убеждаемся, что мастер имеет верную конфигурацию adjust_master_configuration_for_log_streaming restart_master_cluster # 1) клонируем мастера в файловую систему standby clone_master # 2) создаём recovery.conf create_recovery_file_for_log_streaming # 3)создаём пользователя для репликации на мастере create_replication_user_on_master_if_not_exists # 4) позволяем standby узлу подключение к мастеру для репликации add_entry_pghba_if_not_exists # 5) выставляем в standby конфигурации не забирать логи adjust_standby_configuration ;;
# 3)создаём пользователя для репликации на мастере create_replication_user_on_master_if_not_exists # 4) позволяем standby узлу подключение к мастеру для репликации add_entry_pghba_if_not_exists # 5) выставляем в standby конфигурации не забирать логи adjust_standby_configuration activate_hot_standby_on_standby_node if [ “$REPLICATION_SYNC” = “$REPLICATION_MODE_SYNC” ] then restart_master_cluster fi ;; *)
esac
echo “Cannot proceed without the replication method” exit ;;
print_final_info # должен ли я запустить standby узел? if [ “$3” = “start” ] then echo “Starting the standby node $DEST_CLUSTER” /usr/local/bin/pg_ctl -D $DEST_CLUSTER start fi
${REPLICATION_MODE_HOTSTANDBY}) echo “Hot Standby replication” BACKUP_LABEL=${REPLICATION_MODE_HOTSTANDBY} # 0) убеждаемся, что мастер имеет верную конфигурацию adjust_master_configuration_for_hotstandby restart_master_cluster # 1) клонируем мастера в файловую систему standby clone_master # 2) применяем параметры к мастеру и создаём recovery для standby if [ “$REPLICATION_SYNC” = “$REPLICATION_MODE_SYNC” ] then echo “Synchronous replication” adjust_master_sync_replication create_recovery_file_for_log_streaming_sync_ replication else create_recovery_file_for_log_streaming fi
40
04/2012
PostgreSQL: Репликация данных
Для настройки синхронной репликации используя список ожидающих узлов, о которых сообщается мастер-узелу. Только один из этих ждущих узлов мастер будет опрашивать о проведении транзакции, остальные же будут переходить в статус сихронной репликации по мере отказа первого и невозможности получения ответа от него мастером. В файле postgresql.conf на мастер-узле должны быть выставлены следующие параметры: synchronous_standby_names=sync_replication_6 replication_timeout=1000 synchronous_commit=on
В этом случае, ожидающий узел называется “sync_ replication_6”. Параметр replication_timeout задает мастеру время, после истечения которого он будет считать соединение с узлом неактивным. Значение параметра задается в миллисекундах. В файле recovery.conf на каждом ожидающем узле должно будет присутствовать соответствующее имя:
Общие размышления Репликация в режиме log-streaming и “горячей замены” на самом деле похожи, если смотреть с точки зрения операций. Поэтому некоторые соображения по характеру их конфигурирования могут быть схожими. Первое касается архивирования WAL-логов, проивзодимых на мастер-узле: WAL-сегменты должны храниться достаточное время, чтобы ждущие узлы могли иметь возможность перезапросить их в случае проблем в сети. Поэтому к установке параметра wal_keep_segments следует подойти ответственно, принимая во внимание и объем доступного дискового пространства для хранения сегментов по 16Мб каждый. Второй факт касается параметра max_wal_ senders на мастер-узле, который должен отражать количество ждущих узлов, участвующих в репликации данных. Этот параметр фактически представляет собой количество процессов, выделяемых для обслуживания WAL-запросов от ждущих-узлов.
primary_conninfo=’ host=192.168.200.2 user=replicator
Если вдруг что-то идёт не так в процессе взаимодействия мастера и ждущего узла, например, мастер перестает отвечать из-за проблем в сети, то в логах standby-узла появится следующая запись:
trigger_file=’/postgresql/standby.6.trigger’
FATAL:
standby_mode=’on’
application_name=sync_replication_6 ‘
И, наконец, в конфигурации ждущего узла стоит поместить следующий конфигруационный параметр: wal_receiver_status_interval = 500
чтобы отсылать обратно мастеру информацию о статусе репликации с этого узла, что бывает полезным в случае, когда мастер-узел сбрасывает соединение слишком быстро из-за сетевых задержек. Конфигурация выше может быть получена с помощью скрипта из листинга 4, если передать дополнительный аргумент в конце: ~> sh 01-createAndConfigureStandby.sh 5 hotstandby sync ~> /usr/local/bin/pg_ctl -D /postgresql/cluster5 start
Теперь, если мастер-узел будет не уверен в отработке транзакции на ждущем узле, то в логах появится следующее сообщение: Что будет означать, что абсолютной гарантии в синхронности данных на standby-узле уже нет.
www.bsdmag.su
FATAL:
replication terminated by primary server
could not connect to the primary server: could not connect to server: Connection refused
Когда же мастер-узел снова станет видимым, ждущий узел начнет снова получать WAL-логи и таким образом, снова станет синхронизированным. Тем не менее, стоит отметить важность постоянного мониторинга статусов кластеров, участвующих в репликации данных, чтобы быть уверенным, что всё идет по плану. Пожалуйста, имеейте ввиду, что в режиме поточной репликации, как синхронной, так и асинхронной, мастер-узел не будет обрабатывать запрос на выключение системы, пока все WAL-сегменты не обработаны соответствующими прикрепленными standby-узлами. Как уже отмечалось, на узлах «горячей замены» выполняются транзакции только на чтение данных, в частности, на этих узлах транзации не будет присвоен уникальный номер операции (transaction id – xid), а также в ходе этой транзакции нельзя будет записать данные в “локальный” WAL-лог.
41
HOWTO
Листинг 5. Скрипт нагрузки STANDBY_CLUSTER_NUMBER=$1 STANDBY_OPERATION=$2 POSTGRESQL_ROOT=/postgresql WAL_ARCHIVES=${POSTGRESQL_ROOT}/pitr MASTER_CLUSTER=${POSTGRESQL_ROOT}/cluster1 DEST_CLUSTER=${POSTGRESQL_ROOT}/cluster${STANDBY_ CLUSTER_NUMBER} RECOVERY_FILE=$DEST_CLUSTER/recovery.conf STANDBY_OPERATION_ACTIVATE=”promote” STANDBY_OPERATION_SHOWREPLICATION=”show” if [ $# -le 0 ] then echo “Please specify the number of the cluster to configure!” echo echo “Usage: $0 <cluster-number> [ $STANDBY_ OPERATION_ACTIVATE | $STANDBY_ OPERATION_SHOWREPLICATION ]” exit fi if [ $# -eq 1 ] then STANDBY_OPERATION=$STANDBY_OPERATION_ACTIVATE fi if [ $STANDBY_CLUSTER_NUMBER -eq 1 ] then echo “Cluster #1 is the master!” exit fi DEST_PORT=`psql -U bsdmag -A -t -c “SELECT setting FROM pg_settings WHERE name = ‘port’;” template1` DEST_PORT=`expr $DEST_PORT + $STANDBY_CLUSTER_ NUMBER`
if [ “$STANDBY_OPERATION” = “$STANDBY_OPERATION_ ACTIVATE” ] then echo “Activating the stand-by node...” sleep 30 touch /postgresql/standby.${STANDBY_CLUSTER_NUMBER}. trigger sleep 10 echo “==========================================” echo “Tuples in the master node (magazine table)” psql -U bsdmag -A -t -c “$COUNT_QUERY_MAGAZINE” bsdmagdb echo “Tuples in the master node (test table)” psql -U bsdmag -A -t -c “$COUNT_QUERY_TEST” bsdmagdb echo “==========================================” echo “Tuples in the slave node (magazine table)” psql -U bsdmag -A -t -p $DEST_PORT -c “$COUNT_QUERY_ MAGAZINE” bsdmagdb echo “Tuples in the slave node (test table)” psql -U bsdmag -A -t -p $DEST_PORT -c “$COUNT_QUERY_ TEST” bsdmagdb echo “==========================================” else if [ “$STANDBY_OPERATION” = “$STANDBY_OPERATION_ SHOWREPLICATION” ] then WAL_DIFFERENCE=1 while [ $WAL_DIFFERENCE -gt 0 ] do echo “Showing replica information” # show log shipping processes echo “====== MASTER =======” pgrep -f -l -i archiver pgrep -f -l -i postgres | grep sender echo “=====================” echo “====== STANDBY =======” pgrep -f -l -i startup pgrep -f -l -i postgres | grep receiver echo “=====================”
echo “Operating mode is $STANDBY_OPERATION” echo “The stand-by node $STANDBY_CLUSTER_NUMBER is listening on $DEST_PORT” TEST_TABLE_NAME=”test$$” COUNT_QUERY_MAGAZINE=”SELECT count(*) FROM magazine;” COUNT_QUERY_TEST=”SELECT count(*) FROM $TEST_TABLE_ NAME;” echo “Inserting tuples into the master node” psql -U bsdmag -c “TRUNCATE TABLE magazine;” bsdmagdb psql -U bsdmag -c “INSERT INTO magazine(id, title) VALUES(generate_series(1,1000000), ‘TEST-REPLICA’);” bsdmagdb echo “Tuples in the master node (magazine table)” psql -U bsdmag -A -t -c “$COUNT_QUERY_MAGAZINE” bsdmagdb psql -U bsdmag -c “CREATE TABLE $TEST_TABLE_NAME(pk serial NOT NULL, description text);” bsdmagdb psql -U bsdmag -A -t -c “INSERT INTO $TEST_TABLE_NAME(pk, description) VALUES(generate_ series(1,500000), ‘NEW-TABLE-TEST’);” bsdmagdb
42
fi
fi
MASTER_XLOG_LOCATION=`psql -U pgsql -A -t -c “SELECT pg_current_xlog_location();” template1 | sed ‘s|[0-9]/\([09]\)*||g’` STANDBY_XLOG_LOCATION=`psql -U pgsql -p $DEST_PORT -A -t -c “SELECT pg_last_ xlog_replay_location();” template1 | sed ‘s|[0-9]/\([0-9]\)*||g’` obase=10; ibase=16 export obase; export ibase MASTER_XLOG_LOCATION_10=`echo $MASTER_XLOG_ LOCATION | bc` STANDBY_XLOG_LOCATION_10=`echo $STANDBY_ XLOG_LOCATION | bc` echo “xlog location: master $MASTER_XLOG_ LOCATION ($MASTER_XLOG_LOCATION_10)” echo “xlog location: standby $STANDBY_XLOG_ LOCATION ($STANDBY_XLOG_LOCATION_10)” WAL_DIFFERENCE=`expr $MASTER_XLOG_LOCATION_10 - $STANDBY_XLOG_LOCATION_10` echo “Difference is $WAL_DIFFERENCE” done
04/2012
PostgreSQL: Репликация данных
В сети • • • • • •
Официальный сайт PostgreSQL: http://www.postgresql.org Официальный сайт ITPUG: http://www.itpug.org Wiki-страницы по поточной репликации в PostgreSQL: http://wiki.postgresql.org/wiki/Streaming_Replication Документация по репликации в PostgreSQL: http://www.postgresql.org/docs/9.1/interactive/high-availability.html Учебные материалы Londiste: http://wiki.postgresql.org/ wiki/Londiste_Tutorial Сравнение схем репликации: http://wiki.postgresql.org/wiki/Replication,_Clustering,_ and_Connection_Pooling
Выводы. В следующей серии. Благодаря возможностям репликации PostgreSQL становится достаточно просто организовать зеркалирование данных, что позволяет администраторам базы данных предоставлять рабочее окружение высокой доступности (High Aavailability). В следующей статье мы вернёмся к SQL, чтобы взглянуть на некоторые функции, полезные как администраторам, так и разработчикам.
ОБ АВТОРЕ
Luca Ferrari живет вместе с женой и сыном в Италии. Он является адъюнкт-профессором в Nipissing University (Канада), а также сооснователем и вицепрезидентом итальянской группы пользователей PostgreSQL (ITPUG). Ему просто нравится OpenSource культура, поэтому он отказывается работать с не UNIX-системами. Найти его вы можете по адресу http://fluca1978.blogspot.com
www.bsdmag.su
43
ИНТЕРВЬЮ
Интервью с
Mark Price -
президентом Tranquil Hosting, главой RootBSD
Предприниматель из области высоких технологий, с большим стажем интеграции и работы со многими системами и различным оборудованием. Он специализируется в сферах по управлению серверами, сетевым взаимодействием, веб-хостинга, Linux, BSD и открытого ПО. Вступление
Можете ли Вы рассказать нашим читателям кто Вы и чем занимаетесь?
Ещё ребёнком, я любил играться с компьютером, как, возможно, и многие читатели BSD Magazine. Тогда я впервые открыл для себя одновременно и Linux (Slackware) и BSD (FreeBSD). В те времена для того, чтобы попробовать новую ОС, нужно было действительно этого захотеть, так как Вам надо было либо заказать CD-ROM или потратить несколько ночей на то, чтобы скачать дистрибутив с FTP-сайта по медленному модемному соединению. Позже, со взрывным ростом интернета, я воспользовался своими знаниями и интересом к UNIX-системам для постройки хостинга, обслуживающего растущую клиентскую базу.
По какой причине возникла RootBSD?
Как Вам известно, большинство популярных сервисов, предоставляющих веб-хостинг, построены на Linux. Пользователям BSD приходилось быть “мастером-на-все-руки”, которым не достаточно было только захотеть, чтобы запустить какой-нибудь автоматизированный установщик для получения готового сервера, в отличие от пользователей Linux. Так как мы были заинтересованы в BSD, мы занялись поиском BSD-хостов, чтобы понять, как их владельцы решали проблемы предоставления VPS, так как
44
многие технологии для этого были разработаны под Linux. К нашему удивлению, таких сервисов оказалось не так уж и много, поэтому-то мы и создали то, что создали. В основном тут присутствовал личный интерес, так как мы не думали, что это заинтересует большое количество BSD пользователей.
Почему же именно облака и хостинг? За этим стояла какая-то идея, или это было только совпадение?
Облачный хостинг - наиболее доступное решение для массового рынка, так как стоимость сопоставимого выделенного сервера в разы больше, чем виртуального сервера. Что же касается частных облаков, то объем ресурсов, необходимых для предоставления современных сервисов превосходит те возможности, которые можно сконцентрировать в одном сервере. Перенос же этих услуг в облако позволяет обойти это ограничение.
Какого рода трудности и технические проблемы Вам пришлось преодолеть?
Развивая BSD хостинг, нам пришлось иметь дело с большим количеством мелких проблем. Во первых – это была настройка и оптимизация кода jail во FreeBSD. Позже мы столкнулись со сложными сетевыми настройками Xen. И, конечно же, нам пришлось рассмотреть несколько разных способов автоматического развёртывания FreeBSD с автоматизированной установкой
04/2012
Интервью с Mark Price - президентом Tranquil Hosting, главой RootBSD
инструментов для обслуживания запросов клиентов. Именно эти технические проблемы, по моему мнения и мнению команды RootBSD, и делают нашу работу интересной!
Определение облака Что же в облаке нового?
Я не думаю, что облако - это что-то новое. Мне кажется, это лишь термин, который скорее описывает тренд в аутсорсинге, чем IT-функциональность. Мой опыт общения с айтишниками говорит, что они любят иметь под рукой большое количество серверов, которые выполняют различные задачи. “Облако” значит для них “хорошо, мы передадим на аутсорсинг некоторые скучные занятия и займемся тем, что на самом деле нам важно”.
Облако на BSD чем-то отличается от облаков на других системах?
На мой взгляд, “облако” в принципе для каждого человека значит что-то своё. Очень интересно наблюдать, как разработчики и пользователи BSD систем строят свои облачные решения, так как облака во многом не зависят от конкретной операционной системы. Например, Colin Percival выяснил, как запустить FreeBSD на облаке EC2 от Amazon, хотя сам Amazon не предоставляет поддержки этой операционной системы.
Каковы преимущества облаков для BSD пользователей?
Сама мысль об облаке даёт преимущество всем BSD пользователям и IT специалистам. Теперь, вместо того, чтобы тратить дни на установку и конфигурирование нового сервера у Вас есть миллионы способов, как мгновенно развернуть новую систему; сейчас доступны такие технологии “по запросу”, о которых нельзя было подумать 15 лет назад.
Реализация
Может Вы приведёте нам несколько примеров того, что используется для реализации облака на основе BSD?
Несомненно, было несколько интересных направлений развития BSD, которые хорошо вписались в концепцию облака. Файловая система ZFS компании Sun была реализована в FreeBSD и на данный момент невероятно стабильна и надёжна. ZFS предлагает сосредоточиться на хранении и не ограничивать себя
www.bsdmag.su
наследием аппаратных решений, таких как RAIDкарты, которые были разработаны для фиксированных конфигураций хранения данных. ZFS полезна для масштабируемых и тиражируемых решений хранения данных. Jail`ы годами использовались на FreeBSDсистемах для разделения приложений по различным контейнерам. Jail помогает системным администраторам и разработчикам разворачивать тестовое окружение без того, чтобы проводить традиционную инсталляцию ОС, создавать файловые системы и т.д. CARP – это замечательная сетевая технология, позволяющая нескольким хостам обслуживать один IP; замечательный пример того, как несколько машин могут повысить доступность системы. Этот протокол был разработан в OpenBSD, а теперь доступен и в других BSD системах.
Можете пошагово описать, как построить недорогое и стабильное облако на BSD?
Тут, конечно, нет универсального рецепта на все случаи жизни, и всё же я рекомендовал бы посмотреть в сторону jail во FreeBSD, чтобы научиться быстро их настраивать и сворачивать. Следующим шагом может быть использование ZFS, чтобы получить устойчивую основу для облака из jail. Это то, что может сделать каждый у себя дома из нескольких старых компьютеров.
Безопасность
Где у облаков слабые места?
В широком смысле слова, я бы сказал, что слабым местом является определение границ безопасности. Если вы используете поставщика облачных услуг для запуска виртуальных серверов и предоставления хранилищ информации, то какие меры безопасности применяет ваш провайдер? Что находится в зоне вашей ответственности? Я бы сказал, что простота использования некоторых облачных технологий привела к тому, что мало кто думает об их безопасной реализации.
Что делает ваша компания для обеспечения безопасности использования облака?
Мы всегда ищем пути повышения уровня безопасности. Нашим новым арендаторам VPS мы даём советы, как обеспечить свою безопасность. Время от времени, если мы предполагаем, что
45
ИНТЕРВЬЮ
некоторая проблема может затронуть наших клиентов, мы сканируем всю нашу сеть на наличие некоторых распространенных уязвимостей. Кроме того, мы предлагаем решения, например, частное облако для бизнес-клиентов, где мы обслуживаем всю их инфраструктуру с помощью выделенных файерволов.
Что Вы делаете со слухами про 0-day эксплоиты и тому подобным?
Я надеюсь, что системы с самого начала настроены так, что они не оставляют места для ненужного доступа или возможных векторов атак. Это достигается отключением ненужных демонов (к счастью, FreeBSD по умолчанию уже очень хорошо сконфигурирована в этом отношении) и блокированием ненужных портов с помощью файервола. Если же находится уязвимость, то мы полагаемся на ту грандиозную работу, которую проделывает команда безопасности FreeBSD для быстрого решения проблемы. Если Вы всё ещё не подписаны на рассылку FreeBSD по безопасности, то обратите своё внимание сюда: http://security.freebsd.org/
Будущее
Какое будущее, на ваш взгляд, ждёт облака на BSD?
В течение нескольких следующих лет облака станут обычным делом на всех платформах, в том числе и BSD. Хотя всегда будет потребность в некотором внутреннем или местом размещении ресурсов, тем не менее, со временем, мы увидим большой сдвиг в сторону более гибкой инфраструктуры. Компоненты облака, такие как виртуализация, SaaS и распределённые хранилища скоро станут стандартом, а не передовыми разработками. Преимущества облачной инфраструктуры настолько велики, что возможные проблемы не смогут заставить нас от неё отказаться, так что это вполне очевидный вывод.
46
04/2012
<<TOP>>
Неравнодушны к UNIX и системам на базе BSD? Поделитесь с остальными! editor@bsdmag.su
www.bsdmag.su
47
ИНТЕРВЬЮ
Игорь Сысоев об Игорь, все долгое время знали Вас как сотрудника Rambler. Расскажите, как Вы попали туда и почему именно Rambler? В 2000 году я работал в интернет-магазине XXL. Осенью 2000 года дела у компании были неважные, начались задержки зарплаты. В одном из списков рассылки я увидел предложение Алексея Тутубалина о работе в Рамблере. Сходил на собеседование, принял решение о переходе. Вот так и попал. Обычная история, никакой интриги.
Каковы были мотивы для создания nginx? Наверное, каких-то четких и далеко идущих планов не было. Было желание попробовать самому решить задачу, которую существующие на тот момент инструменты решали неважно. Речь идет об эффективном обслуживании вебтрафика в условиях высокой конкурентности: большого количества одновременных TCP соединений и HTTP запросов, большого количество запросов на установление новых соединений, неоднородность трафика (большие и маленькие веб-объекты, быстрые и медленные клиенты). Под эффективностью понималось и понимаются стандартные метрики, которые не претерпели существенных изменений по сию пору: минимальное потребление ресурсов CPU, памяти и системы I/O. Вторая часть проблемы проистекала из того, что уже тогда было понятно, что будущее за многопроцессорными системами. И нужно было решение, максимально эффективно работающее в таких средах. На тот момент из HTTP серверов, относящихся к классу легких, были thttpd, boa, mathopt. Через некоторое время появился lighttpd. Кроме
48
того, что эти сервера на тот момент имели ограниченную функциональность, работали только со статикой, они довольно плохо масштабировались на мультипроцессорных машинах. Третья составляющая - кросс-платформенность. Это чисто инженерная задача. Хотелось написать такой код, который будет просто портироваться на новые архитектуры/операционные системы. Четвертая важная проблема, которая на первый взгляд может показаться незначительной - конфигурация. Мне много раз приходилось сталкиваться со сложными конфигурациями Apache, которые невозможно было поддерживать. Любое незначительное изменение в одной части такого сайта могло быть чревато сложнодиагностируемыми поломками в других его частях. Задача состояла в том, чтобы найти баланс между простотой и гибкостью.
Nginx до 2011 - это продукт одного человека или всё же команды? Не думаю, что можно провести такое четкое разделение. Длительное время с 2002 года я в одиночку определял архитектуру, решения, алгоритмы, применяемые в nginx, сам формировал план развития продукта и расставлял приоритеты. Конечно, эти процессы не были никак формализованы, все происходило у меня в голове. С ростом популярности вокруг nginx стало образовываться сообщество пользователей, а в какой-то момент - и разработчиков. От них стали поступать сообщения об ошибках (bug reports), запросы об улучшениях (features requests), кто-то стал присылать патчи. Все это стало как-то влиять на nginx.
04/2012
Игорь Сысоев об NGINX
Но по большому счету, до 2011 года nginx оставался продуктом одного человека.
Заявлено, что веб-сервер поддерживается кроме большой тройки (Windows, Linux, BSD) еще и на ряде других систем, например, AIX. А какая, на Ваш взгляд, среда показалась наиболее сложной и интересной в плане портирования? Да, действительно. В списке поддерживаемых платформ еще Solaris, Mac OS X. Это платформы, для которых мы регулярно проверяем билды и проводим тесты. Подозреваю, что nginx без особых усилий заработает на любой UNIX-like OS. Знаю, что есть люди, которые использую nginx на QNX.
превосходит мои возможности, возможности одного человека, сконцентрированного на разработке. Тут нужно было или бросать проект, начинать заниматься чем-то другим, или попытаться вывести его на новый уровень. Так получилось, что я выбрал второе. И опять, никакой особенной интриги, все достаточно ординарно.
Как выглядит ваша сегодняшняя команда? Как она выглядит - можно в буквальном смысле увидеть на нашем сайте nginx.com. Там есть страничка с фотографиями. Это группа единомышленников, объединенных целью делать nginx лучше и через наш продукт приносить пользу окружающим.
Сложным портом оказался Windows. Сама система сложная, сильно отличается от того, что происходит в UNIX-мире. Наверное, этим и обусловлен тот факт, что текущее состояние nginx на Windows оставляет желать лучшего. Хотя, мы к этому вопросу периодически возвращаемся и не оставляем надежду привести этот порт в надлежащее состояние.
Компактная команда из взрослых, самостоятельных людей. Все с техническим бэкграундом. Все когдато работали в интернет индустрии и в телекомкомпаниях. БОльшая часть -- это, конечно, программисты и инженеры. Два человека занимаются управленческими вопросами, развитием бизнеса, PR и маркетингом, взаимодействием с инвесторами и т.п.
Интересными же являются, наверное, все системы. Например, есть планы на AIX поддержать специфичный для этой системы интерфейс для эффективного I/O pollset(2). Похожая задача, только для Windows – поддержка IOCP.
Воспользуюсь случаем и скажу, что мы ищем людей к себе в коллектив. Речь идет о программистах на C, на языке, на котором написан весь код nginx. Нам нужны талантливые, самостоятельные, ответственные люди -в обмен готовы предоставить бесконечное количество действительно интересной работы.
Из области забавных фактов: когда-то были мысли о поддержке для BeOS, OS/2, Novell Netware. Остановила слабая доступность этих платформ и неочевидность их будущего.
В середине прошлого года Вы заявили о своем уходе из интернет-холдинга и организации собственной фирмы. Вы выросли до „стеклянного” потолка или же сыграли другие факторы? Нельзя сказать, что потолок Рамблера. будет сказать, что
я
вырос и уперся в Скорее правильнее вырос сам проект.
В какой-то момент я понял, что nginx и все, что вокруг него происходило: рост его доли рынка, рост числа пользователей, числа обращений за новыми фичами, сообщений об ошибках, присылаемых патчей и т.п.,
www.bsdmag.su
Спустя почти год, можете ли Вы сравнить ведение бизнеса с точки зрения российского законодательства и, скажем так, калифорнийского? Я не могу сказать, что мы накопили какуюто значимую экспертизу в области ведения международного бизнеса вообще и в частности в США. Но пока никаких существенных сложностей мы не обнаружили ни в Штатах, ни в России. Это принимая во внимание то, что с большим количеством вопросов мы столкнулись и продолжаем сталкиваться в первый раз. Начиная от регистрации юридических лиц в различных юрисдикциях до оформления документов с венчурными фондами. Все решаемо. Да, бюрократии, наверное, в России немного больше. Но для компании нашего размера пока
49
ИНТЕРВЬЮ
разница несущественная.
бы неподъемными они ни казались. Дорогу осилит идущий.
Вам, наверняка, пришлось рекрутировать кадры в компанию. Наблюдался ли тренд по увеличению/снижению профессиональной подготовки на Ваш личный взгляд - ведь, например, десятилетие назад востребованность российских программистов была ярка выражена?
Редакция выражает признательность Максиму Коновалову за помощь в организации интервью.
Сегодня наша компания состоит из людей ближнего круга: кто-то кого-то знал, кто-то с кемто работал. Конечно, в первую очередь ищем людей к нам в компанию оттуда же, из круга знакомых и из nginx сообщества. У нас нет какого-то большого потока людей, с которыми мы общаемся о работе. Речь о единицах, причем единицах, которые уже прошли какието фильтры. Выборка нерепрезентативная, и какие-то общие выводы сделать нельзя. При этом кажется, что есть рост уровня, так как все больше российских специалистов вовлечены в интернациональные проекты, в том числе и opensource. Здесь, в интернете, нет границ и мало или нет вовсе барьеров для обмена знаниями, технологиями, идеями. Наверное, все это приводит к тому, что уровень людей, с которыми мы сталкиваемся, очень высокий.
Как Вы считаете, какими чертами должен обладать индивидуум, когда он задумывается над созданием нового продукта класса nginx? Как мне кажется, важными факторами являются усидчивость и концентрация на проекте. Недавно видел, что кто-то посчитал, что на написание nginx потрачено несколько десятков человеколет. Возможно, в этих расчетах есть существенная погрешность. Тем не менее, нужно понимать масштаб затеи и планировать свои силы.
Ваше пожелание читателям журнала. Пожелание вытекает из предыдущей мысли о масштабе: не бойтесь амбициозных задач, какими
50
04/2012
Балансировщики нагрузки
Ваш продукт основан на FreeBSD? Расскажите о нем на страницах нашего журнала! editor@bsdmag.su
www.bsdmag.su
51
ПОГОВОРИМ
Преимущества Свободного ПО (СПО) Когда Патриция попросила меня внести свою лепту в апрельский выпуск 2012 года, под рукой у меня не было ни одного готового к печати материала. Нет, у меня, конечно же, было несколько идей, но все они ещё не успели излиться на бумагу. Поэтому я решил пойти другим путём и просто написать о том, какие преимущества, на мой взгляд, предоставляет свободное ПО. Так как найти статистику по BSD ОС мне оказалось не по силам, я взял в качестве примера Apache.
В
отличие от патентованного ПО, производимого большинством коммерческих организаций, СПО создаётся и совершенствуется добровольцами, которые не держат свой программный код в секрете, раздавая его всем желающим. Согласно условиям большинства популярных СПО лицензий любой желающий может абсолютно совбодно и без зазрения совести как распространять так и модифицировать данное ПО, не забывая, конечно, что данная лицензия автоматически распространяется и на все внесённые им изменения. В последние годы идея СПО, выраженная в таких продуктах, как ОС системы BSD или Linux серьехно потеснили на рынке проприетарные продукты, вроде всем известного Microsoft Windows. Удельный рост СПО и их борьба с тёмной стороной силы (она же патентованное ПО) ялвяется лишь проявлением более глубокой борьбы общемирового добра (пусть это будут открытые системы) и зла (ничего личного, парни) в глобальной информационной инфраструктуре. Так как на IT серёзно давит экономика и политика, восход СПО стоит рассматривать в более широком свете нежли просто стремление сэкономить. Выражаясь в терминах марксизма-ленинизма, феномен СПО отражает развитие политэкономики в эру классой борьбы перешедшей в интернет, так что в данном разрезе мы можем отследить направление
52
дальнейшего развития общественных сил и происков капиталистов. Давайте же, наконец, рассмотрим СПО как рыночный феномен, отметим некоторые факты и разберёмся с некоторыми недоразуменями, которые в последнее время возникли вокруг этого явления. Во-первых, движение СПО, по сути, только ещё начинается. Появление методов совместой разработки ПО датируется ещё 1950-1960 годами, но свой нынешний вид, вместе со всеми правовыми и политическими проблемами, оно приобрело совсем недавно. Во-вторых, споры вокруг СПО зачастую основаны на дешёвых маркетинговых ходах и дезинформации. СПО — это не революция в капиталистической модели экономики, более того, такое понимание очень легко может увести нас от истинной уникальности данного движения. Ситуация лишь ухудшается тем, что заинтересованные стороны часто намеренно искажают истину, так как обеспокоены ростом СПО. Одно из широких заблуждений, например, что СПО является синонимом бесплатного ПО, что в корне неверно. «Свободное» - значит лишь, что его можно свободно распространять и изменять, а не то, что на нём невозможно делать деньги. Комерческие компании, такие как BSD Virtual Machines, зарабатывают на том,
04/2012
Преимущества Свободного ПО (СПО)
что за деньги предоставляют поддержку и услуги в обслуживании СПО. Хотя патентованное ПО всё ещё доминирует на рынке персональных компьютеров, СПО широко используется для серверов, обслуживающих интернет, что приводит к далеко идущим последствиям для индустрии ПО и интернет-экономики в целом. По состоянию на март 2012 года 65,2% веб-серверов работали на Apache, тогда как только на 13,8% было запущено ПО компании Microsoft (по данным Netcraft). Доля рынка, прнадлежащая Apache существенно выше, чем у других участников; более того, это единственный продукт, чья доля росла в последние три года, а это уже о многом говорит! По сути, то, что на вашем рабочем компьютере не стоит BSD, не играет никакой роли. Ваш ПК — всего лишь руль от машины, мотор же — интернент, который все больше строится именно на СПО. Кроме своего значения для экономики и разработки ПО, СПО является ещё и интересным социальным феноменом с широким, опять же, экономическим значеним. Больше всего социологов смущают два вопроса. Первый из них — почему программисты участвуют в разработке ПО не получая за это прямого вознаграждения? По сути, СПО — пример коллективной работы, при которой нет ясных стимулов для каждого отдельного члена коллектива вносить свой вклад.Частично можно ответить на этот вопрос сказав,
Рис. 1 - Данные Netcraft на 17 марта 2012 года: http://news.netcraft.com/archives/2012/03/05/ march-2012-web-server-survey.html#more-5719 www.bsdmag.su
что желание делиться заложено в человеческую культуру. Любой програмист, кроме того, всегда готов продемонстрировать глубину своего гения, выставив результат труда на публичное обсуждение. Более того, участие в СПО несёт ещё и экономическую выгоду, ибо репутация хорошего программиста играет главную роль при приёме на работу. Вот только если Вы уже работаете в коммерческой организации, скорее всего результат вашего труда известен только вашим же коллегам. Зато если Вы принимаете участие в разработке СПО, тут можно заявить о себе на весь мир. В каждом проекте указывается кто и какую часть кода внёс в него, так что ваш будущий работодатель может без труда составить о Вас своё мнение. На мой взгляд, это самый эффективный способ заработать себе репутацию. Более того, эта же репутация является основным фактором, обеспечивающим совершенствование кода, так как хороший программист с удовольствием предоставит свой код проекту, а посредственный постесняется (ну, я надеюсь) выносить своё творение на суд общественности. Второй вопрос, касающийся движения СПО, затрагивает макроменеджмент — каким образом группа управляет более чем 7000 участниками? Во-первых, СПО очень выиграло от развития сетей, так как появляется всё большее количество пользователей, а каждый пользователь (даже если он и не пишет код) является как минимум тестировщиком, отлавливающим ошибки и, тем самым, вносящим свою лепту в развитие проекта. Так что, чем большее распространение получает тот или иной продукт, тем ценнее он становится. Во-вторых, в СПО делят весь проект на небольшие автономные модули, каждый из которых может разрабатываться и совершенствоваться без точного знаия о том, как устроены другие модули. Это позволяет работать над проектом параллельно, минимизируя количество коллег, с которыми приходится координировать свою деятельность. В конце концов, хоть СПО движение и может выглядеть как хаос и анархия, оно всё равно содержит в себе группу, принимающую решения и набор правил, координирующих усилия и определяющих политику управления. Хотя методы СПО сообщества и произвели революцию в отрасли программного обеспечения,
53
ПОГОВОРИМ
механизм разработки СПО может оказать гораздо большее влияние на всю экономику в целом. Для этого надо просто понять, что само ПО является лишь продуктом данного процесса производста, который может иметь гораздо более широкое применение. Вот четыре момента, к которым приводит такой подход: •
•
•
•
Во-первых, СПО ещё раз демонстрирует, насколько развитие интернета содействовало облегчению географически разнесённого сотрудничества, сокращая расходы на коммуникации. Во-вторых, движение СПО показало значение рспределённых инноваций (куда уж без них) и открыло новые способы разделения труда в других отраслях экономики. В третьих, СПО показало, как можно соединить общество и коммерцию. Это уникальный пример того, как общество направляет свои силы на создание продукта, который потом покидает рамки самого общества. Эта модель может иметь успех и в других областях народного хозяйства. И наконец... СПО становится важным фактором в международной экономике 21 века. В производство BSD систем были включены программисты из тех стран, которые по экономическим причинам, или по причинам, связанным с безопасностью, не могут использовать патентованное ПО. Я думаю, что Вы легко можете представить каким мощным инструментом для стартапов является СПО, особенно в развивающихся странах.
Рекция Microsoft на СПО напоминала реакцию национальных телекоммуникациооных компаний на появление и распространение интерента, что угрожало их экономическим интересам. В этой борьбе у противником СПО есть большие политические возможности в лоббировании решений, пагубных для развития нашего движения. Microsoft вполне может оказаться могильщиком СПО. Первой реакцией компании было отрицание угрозы со стороны СПО, но затем она взяла на вооружение двойную тактику: с одной стороны компания сеет страх, ложь и неуверенность (тактика СЛоН, сиречь FUD), а с другой она бросается в объятия СПО, стремясь тем самым минимизировать урон себе. Олицитворением второго подхода является инициатива компании по открытию части кода для доступа других компаний, но при этом с запретом его изменения и дальнейшего
54
распространения. Таким образом Microsoft нагоняет тумана и пытается привлечь на свою сторону политиков. Если компания преуспеет в изменении закона о копирайте и будет использовать патенты для, например, запрета реинжиринга ПО, это может привести к страшным последствиям для движения СПО. Если же говорить с точки зрения безопасности, то я уверен, что СПО даст фору любому проприетарному ПО хотя бы потому, что огромное число программистов работает именно над тем, чтобы найти и скорее исправить ошибки, создающие дыры в безопасности. Некоторые, как, например, Alexis de Tocqueville Institution, предполагают, что программисты могут специально встраивать бэкдоры (код, который позже программист может использовать в незаконных целях) в разрабатываемые ими модули; но с тех пор, как СПО начало использоваться в корпоративном секторе, появился большой стимул следить и за этим. Если же говорить о бизнес модели, то СПО на данный момент популярно среди технически-подкованной части общества. Что делать с остальными? Ответ на этот вопрос уже даётся людьми из KDE и GNOME, которые разрабатывают дружественный интерфейс и предоставляют техническую поддержку. Кроме того, любой пользователь скажет, что он отдаст предпочтение более безопасному и стабильному продукту. Ещё один законный вопрос — как члены сообщества смотрят на тех, кто делает деньги на своих программах. Поскольку правила сообщества определяют свободные права доступа к исходному коду и не запрещают делать на нём деньги, то всё остаётся в рамках приличия. И наконец, свободный и доступный код является хорошим материалом обучения для студентов, так как они могут понять, как внутри устроены известные им программные продукты. После того, как они поймут устройство данной системы, они сами смогут создавать свои программы для неё.
ОБ АВТОРЕ
Paul Ammann живёт в New Fairfield, CT с женой и 4 кошками. С ним можно связаться по адресу: pq_aq@fastmail.us
04/2012
В следующем выпуске: • Анатомия компрометации FreeBSD • Подробнее о PostgreSQL • и многое другое!