SmartOS — одна из ветвей дерева, растущего из корней легендарной ОС Solaris. Несмотря на экзотичную «родословную», эта платформа активно развивается и уже сегодня позволяет добиваться высокой скорости работы и внедрять некоторые фишки, недоступные в более привычном Linux. Эта статья рассказывает о нашем опыте работы со SmartOS.

 

Введение

В конце 2012 года у меня на проекте не хватало JS-программеров для изучения Node.js. И я решил восполнить пробел самостоятельно. Изучил фреймворк, написал «Hello world» и даже немножко больше, ведь на Node.js основан яндексовский инструментарий для работы по методологии БЭМ, который мы захотели использовать в том проекте. А когда что-то берешь для своего проекта, это почти всегда нужно патчить… Но речь пойдет о другом.

Посмотрев, кто основной спонсор развития Node.js, я узнал, что это компания Joyent, которая в том числе развивает проект SmartOS — облачной операционной системы. Сначала я подумал, что SmartOS — это какая-то специальная ОС, модифицированный линукс, под которой особенно хорошо живет Node.js. Но когда я почитал побольше, меня постиг культурный шок!

Оказалось, что SmartOS — это потомок ОС OpenSolaris, которая была похоронена компанией Oracle, купившей Sun Microsystems в 2010 году… Надо отметить, что я с девяностых годов был поклонником Sun. Еще до появления линухов весь роутинг в моей компании, которая продавала dial-up доступ в интернет, крутился на FreeBSD. А мечтой был какой-нибудь SparcStation под Solaris8. Тогда эти системы были несомненными лидерами на коммерческом рынке серверов и серверных ОС. И надо сказать, не зря. Система действительно была надежная, а инженеры в Sun работали одни из лучших в мире.

Когда в 2005-м Sun открыла код Solaris, я подумал, что наконец в мире может появиться что-то мощное, альтернативное линуксу. Я даже заказал на Амазоне книжку OpenSolaris Bible (зачем? Ведь есть интернет).

Но в силу организационных причин и невозможности преодолеть коммерческие лицензионные ограничения, к которым все привыкли, система развивалась плохо. И в конце концов Oracle ее закрыла. Я тогда подумал: жаль, опять в мире исчезло что-то хорошее.

Теперь вы поймете мои чувства, когда спустя более чем два года после закрытия OpenSolaris я узнал, что достаточно крупная фирма развивает этот код. Она наняла для этого бывших инженеров Sun, хоть и не всех. А такие технологии, как ZFS и DTrace, продолжают развиваться, в том числе их создателями, которые работают уже в не Oracle, а в других компаниях. Для меня это было сравнимо с радостью, которую испытываешь при возрождении из пепла чего-то хорошего и прекрасного!

Я погрузился в чтение про SmartOS и стал играться с ней.

Официальный сайт SmartOS
Официальный сайт SmartOS
 

Немного истории

В августе 2010 года в Oracle решили прекратить развитие проекта c открытым кодом OpenSolaris и сосредоточиться на разработке SolarisExpress с закрытым кодом. Сразу вслед за этим сообщество независимых инженеров, ранее работавших в Sun Microsystems, запустило проект с открытым кодом illumos, как форк ядра из проекта OpenSolaris. При этом разработчики illumos не ставят перед собой задачу делать полный дистрибутив, этим занимаются проекты SmartOS, Nexenta OS, OmniOS, BeleniX, OpenIndiana и другие.

Одновременно из Oracle стали уходить инженеры, стоявшие у истоков таких технологий начала двухтысячных годов, как ZFS, DTrace, Zones, — Брайан Кантрилл (Bryan Cantrill), Адам Левенталь (Adam Leventhal), Дэйв Пачеко (Dave Pacheco), Брэндан Грегг (Brendan Gregg), Роберт Мустаччи (Robert Mustacchi) и другие. Инициатором проекта illumos стал Гаррет Д’Амор (Garrett D’Amore).

Многие из дистрибутивов развиваются отдельными компаниями — Joyent, Nexenta, Delphix и другими. Там, как правило, есть один или несколько человек, ранее работавших в Sun или имевших отношение к этой экосистеме. В настоящей статье мы поговорим о SmartOS — дистрибутиве illumos, созданном для управления облачными услугами. Развивает SmartOS сейчас компания Joyent, занимающая 8–9-е место на американском рынке облачных IaaS-услуг.

 

Грузимся с флешки, работаем из памяти

В чем же состоят основные отличия SmartOS от «обычных» операционных систем?

Наверное, первое, о чем стоит сказать, — это отсутствие системных файлов ОС на локальном диске. SmartOS загружается с флешки или по сети и затем целиком располагается в памяти сервера. На диске находятся только данные (обычно данные виртуальных машин). Такое свойство позволяет системе очень быстро работать в связи с отсутствием дисковых операций, но, конечно, ценой более длительного времени загрузки и усложненным механизмом «запоминания» пользовательских данных сервера — его адресов, конфигураций и прочего, что должно настраиваться при загрузке ОС.

Второе важное отличие — встроенный механизм виртуализации, основанный на контейнерной технологии. В других ОС для виртуализации требуется дополнительное ПО гипервизора. Контейнерная виртуализация позволяет избежать дополнительного слоя гипервизора. Широкая система разделения прав, присутствовавшая в Solaris10 и OpenSolaris, позволила создать технологию Zones, благодаря ей виртуальная машина управляется той же самой ОС, которая стоит на всем сервере. Это похоже на OpenVZ и Virtuozzo Containers, но имеет совершенно другие и более глубокие корни, уходящие в семейство SunOS, развивавшееся с восьмидесятых — девяностых годов.

Третье важное отличие — это файловая система ZFS, используемая как основная. Рассказ о ZFS требует отдельной большой статьи. Здесь я скажу лишь, что эта файловая система несет в себе большое количество высокоуровневых функций и позволяет с легкостью обращаться с образами виртуальных машин — копируя и резервируя их очень гибко. Кроме того, ZFS имеет в своей основе принцип copy-on-write, который позволяет очень эффективно хранить резервные копии данных, занимая минимум физического дискового пространства. Также можно делать очень быстро и много snapshots (моментальные «снимки» папок файловой системы), для разных целей.

Благодаря мощному уровню сетевой виртуализации можно создавать виртуальные порты практически в неограниченном количестве, виртуальные сети между виртуальными машинами, осуществлять роутинг, фильтрацию пакетов и многое другое на одном физическом интерфейсе. Эта технология позволяет создавать сложные сетевые архитектуры с разными ролями и правами виртуальных серверов внутри одного физического сервера!

 

Ставим систему на сервер

В качестве сервера, на который мы решили поставить тестовую версию SmartOS, мы использовали машинку ASUS RS720-E6/RS12. В качестве дисковой системы в сервере было установлено четыре диска по 2 Тб и четыре SSD по 225 Гб. Для начала мы настроили на аппаратном RAID логические диски RAID-0, которые были равны физическим, — то есть мы получили восемь логических дисков, которые через BIOS отдавались на уровень ОС. ZFS хорошо умеет кешировать, поэтому лучше отдавать ей физические диски, однако в случае Dell его аппаратный RAID оказался более производительным. Если у тебя есть время измерить два варианта для своей системы — лучше измерить.

Качаем самый свежий образ системы с официального сайта, там нужно выбрать твой вариант образа. В нашем случае это был USB Image, который мы записали на флешку по инструкции. Вставляем флешку в сервер и указываем в BIOS, что грузиться надо именно с нее.

Загрузчик SmartOS
Загрузчик SmartOS

После загрузки система спрашивает нас имена дисков, которые надо подключить к ZFS, сетевую конфигурацию и просит ввести имя машины. Забавно, что после загрузки ты сможешь войти под root не с тем паролем, который ты скачал в дистрибутиве, а под паролем root. Ну все, система стоит, теперь можно посмотреть, как сконфигурированы диски при помощи команды zpool status, и настроить их немного по-другому, для лучшей производительности. Так, все SSD-диски, которые у тебя есть, нужно отдать под кеш при помощи команды, аналогичной приведенной ниже, но с твоими именами дисков:

# zpool create pool c0d0 c1d0 cache c2d0 c3d0

Если что-то не будет получаться, обращайся к мануалам :). А если что-то совсем не будет получаться — обращайся к нам.

Виртуалки создаются при помощи команды vmadm, сетевые настройки меняются при помощи dladm и ipadm. Все конфигурационные программы очень мощны, настроить можно практически любую сложную конфигурацию из виртуалок, специфически соединенных между собой разными сетевыми соединениями.

Окно логина в SmartOS
Окно логина в SmartOS

 

Warning!

Не покупай дешевые флешки для продакшена! Лучше купить нормальную: она будет стоять в теплом/горячем сервере. У меня одна так уже сгорела, когда я пытался обновить ее новым образом ПО.

 

А как насчет стандартного LAMP?

Какой у нас самый распространенный web stack? Правильно. Apache — PHP — MySQL. Посмотрим, как он ставится в виртуалку под SmartOS и как работает. Создадим новую виртуальную машину:

# vmadm -f newmachine.json

В файле newmachine.json находится описание JSON нашей виртуалки:

{
"zonename": "myvm",
"autoboot": true,
"brand": "joyent",
"cpu_shares": 100,
"image_uuid": "9eac5c0c-a941-11e2-a7dc-57a6b041988f",
"max_physical_memory": 768,
"hostname": "myhostname",
"quota": 30,
"zfs_io_priority": 100,
"resolvers": [
"8.8.8.8",
"8.8.4.4"
],
"nics": [
{
"interface": "net0",
"nic_tag": "admin",
"vlan_id": 0,
"gateway": "10.17.0.1",
"ip": "10.17.0.2",
"netmask": "255.255.255.0"
}
]
}

В реальной конфигурации рекомендую заменить hostname, resolvers и IP на твои.

Конфигурование SmartOS
Конфигурование SmartOS

В качестве образа мы выбрали практически «пустую» 64-битную систему SmartOS. Создание машины происходит за несколько секунд, после чего в нее можно залогиниться из глобальной зоны:

# zlogin myvm

Теперь нам нужно установить Apache и/или nginx, PHP, MySQL/percona. В качестве менеджера пакетов в SmartOS используется программа pkgin:

// Обновляем список пакетов
# pkgin -y up
// Ищем наши пакеты
# pkgin av | grep "\(percona\|apache\|php\)"

В списке будут пакеты нескольких последних версий. Выберем нужные и установим:

# pkgin in apache-2.2 php-5.4 ap22-php54 percona-server

Затем нужно установить необходимые библиотеки для PHP (они разные для разных движков, но те, что ниже, обычно устанавливаются всегда, обратись к документации твоей PHP-программы):

pkgin in php54-mysql php54-mysqli php54-curl php54-gd php54-dom php54-iconv php54-mbstring

Теперь пришло время настроить сервисы:

// Стартуем сервер баз данных
# svcadm enable percona-server
// Устанавливаем пароль
# /opt/local/bin/mysqladmin -u root -p password 'your_new_password'
// Прогоняем скрипт безопасной установки
# /opt/local/bin/mysql_secure_installation

Затем создавай новую базу и загружай туда данные, как в обычном MySQL. Далее настраиваем Apache:

# vim /opt/local/etc/httpd/httpd.conf

Как ты уже понял, все настройки лежат в /opt/local/etc. Думаю, что настраивать Apache умеют все. Хочу лишь напомнить, чтобы ты не забыл загрузить модуль PHP:

LoadModule php5_module lib/httpd/mod_php5.so
AddHandler application/x-httpd-php .php

После изменений файла конфигурации перезапускаем сервис:

# svcadm restart apache

Теперь настроим PHP:

# vim /opt/local/etc/php.ini

Как минимум, нужно прописать в конфигурации наши расширения:

extension=mysql.so
extension=mysqli.so
extension=curl.so
extension=iconv.so
extension=mbstring.so
extension=dom.so
extension=gd.so

Или что там у тебя еще есть… Не забудь заставить Apache перечитать новую конфигурацию PHP:

# svcadm refresh apache

Осталось положить в document_root твой контент, и сайт можно смотреть в браузере. Если твой сервер использует SSD и ты настроил кеш ZFS на нем, то измерения скорости загрузки страниц, скорее всего, приятно тебя удивят.

Кстати, для того, чтобы посмотреть процессы в SmartOS, используется команда prstat. Это аналог top в Linux. А если интересует таблица соответствия команд SmartOS и Linux, ее можно найти по ссылке в INFO.

Фрагмент таблицы соответствий команд Linux и SmartOS
Фрагмент таблицы соответствий команд Linux и SmartOS
 

Ставим Zabbix

Конечно, если у тебя стоят виртуальные серверы и что-то делают, имеет смысл запустить на них мониторинг. Один из самых популярных пакетов мониторинга Zabbix прекрасно ставится на SmartOS. Качаем последнюю версию Zabbix в /opt/local/src:

# mkdir -p /opt/local/src; cd /opt/local/src
# wget http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.0.6/zabbix-2.0.6.tar.gz/download
# tar xzvf zabbix-2.0.6.tar.gz

Теперь надо скомпилировать исходники. Не забудь поставить GCC, если он еще у тебя не поставлен:

# pkgin in gcc47

Затем нужно сконфигурировать пакет. Ты можешь сконфигурировать сервер и агент одновременно, а можешь скомпилировать только сервер или только агент. Выбор за тобой. Мы компилировали и то и другое.

# cd zabbix-2.0.6
# ./configure --prefix=opt/local --enable-server --enable-agent --withh-curl --with-iconv=/opt/local

Если не было ошибок, копируем скомпилированные бинарники в место их назначения:

# make install

Надеюсь, компиляция прошла успешно и ты можешь приступить к конфигурационным сайтам Zabbix (обратись к сайту Zabbix, если необходимо).

  1. Создай пользователя и группу:# groupadd zabbix; useradd -g zabbix zabbix
  2. Создай базу данных и загрузи схему (мы использовали MySQL, если ты используешь другую СУБД, обратись к Zabbix site):
    # cd /opt/local/src/zabbix-2.0.6
    # mysql -u -p
    # create database zabbix character set utf8 collate utf8_bin;
    # quit;
    # mysql -u -p zabbix < database/mysql/schema.sql
    # mysql -u -p zabbix < database/mysql/images.sql
    # mysql -u -p zabbix < database/mysql/data.sql
    
  3. Отредактируй конфигурационные файлы. Мы предполагаем, что агент и сервер Zabbix находятся на одной виртуалке. Если это так, то конфигурация будет следующей. Содержание файла /opt/local/etc/zabbix_agentd.conf:LogFile=/var/log/zabbix/agentd.log Server=127.0.0.1 ServerActive=127.0.0.1

Оставь остальные параметры по умолчанию. А содержание /opt/local/etc/zabbix_server.conf будет таким:

LogFile=/var/log/zabbix/server.log
DBName=zabbix
DBUser=<your_user_with_acess_to_zabbix_db>
DBPassword=<password_for_above_user>

Остальные параметры также оставь по умолчанию.

  1. Стартуем демоны:
    # LD_LIBRARY_PATH=/opt/local/lib zabbix_server
    # LD_LIBRARY_PATH=/opt/local/lib zabbix_agentd
    

Переменные окружения LDLIBRARYPATH необходимы либо здесь, либо при компиляции (последнее предпочтительнее, конечно). Я компилировал без них, поэтому моя инсталляция не распознает библиотеку iconv, которая находится в папке /opt/local/lib. Вот почему я использую переменные окружения.

  1. Теперь пришло время скопировать файлы интерфейса Zabbix (.php) в папку документов твоего веб-сервера:
    # mkdir <htdocs>/zabbix
    # cd /opt/local/src/zabbix-2.0.6/frontends/php
    # cp -a . <htdocs>/zabbix
    

Если твой веб-сервер был настроен на использование PHP и его document_root смотрит в папку htdocs, то ты можешь продолжить установку из браузера, введя в адресной строке http://<адрес твоего сервера>/zabbix. Дальнейшие инструкции можешь взять на сайте Zabbix.

Настройка через веб-интерфейс достаточно сложна. Тем не менее ты должен знать, что в Заббиксе есть несколько предустановок для хостов Солярис, которые довольно неплохо работают и для SmartOS. Все дополнительное тебе придется настроить самостоятельно.

 

Выводы

Уже в течение года мы используем SmartOS в качестве основы инфраструктуры, на которой мы размещаем коммерческие проекты. Можем отметить, что по сравнению со стандартными Linux-системами решения на SmartOS удается делать более производительными и устойчивыми. Конечно, есть и минусы. База совместимого железа у SmartOS намного меньше, чем у Linux. Поэтому нужно тщательно относиться к выбору аппаратных платформ. Кроме того, несмотря на целенаправленную работу Joyent по пакетированию самого распространенного софта и наличию более 10 тысяч пакетов в репозитории, некоторых нужных пакетов, скорее всего, под SmartOS не окажется. Их придется компилировать, что может вырасти в отдельный геморрой. Тем не менее пакетов в репозитории становится все больше, а спектр поддерживаемого оборудования — все шире.

 

Git in Sky

Компания Git in Sky предоставляет услуги по оптимизации, настройке и поддержке серверных систем, построенных на базе Open Source Software. Большой опыт и компетенция инженеров, которые собрались в Git in Sky, позволяет настроить работу ваших серверов на максимальном уровне соотношения эффективность/стоимость.

Мы любим решения на SmartOS, так как эта ОС позволяет добиться максимума производительности веб-приложений и сервисов, но работаем с любыми Open Source системами, построенными на любых дистрибутивах Linux.

git-in-sky-logo 

 

2 комментария

  1. 06.10.2014 at 16:57

  2. 07.10.2014 at 09:12

    Ну а сие чудо годиться для десктопа?

Оставить мнение

Check Also

Google как средство взлома. Разбираем актуальные рецепты Google Dork Queries

Тесты на проникновение обычно требуют набора специальных утилит, но одна из них доступна к…