Ключевые слова:solaris, virtual, crossbow, network, netflow, (найти похожие документы)
From: Сергей Яремчук
Date: Mon, 25 Sep 2010 17:02:14 +0000 (UTC)
Subject: Введение в технологию виртуальных сетей Solaris - CrossBow
Оригинал: http://www.tux.in.ua/articles/1864
Статья напечатана в журнале Системный Администратор
В OpenSolaris 2009.06 анонсирована поддержка технологии виртуальных
сетей CrossBow, с возможностями которой и познакомимся в статье.
Мощности современных систем уже давно достигли такого уровня, что на
одном компьютере могут без проблем работать несколько систем. Поэтому
не удивительно, что темой номер один в IT публикациях последних лет
является виртуализация. Часто под термином виртуализация подразумевают
виртуальные системы, реже говорят о приложениях. С реализацией нового
сетевого стека в Solaris 10, а затем и в OpenSolaris 2009.06 в этих
системах стала доступна технология сетевой виртуализации (Network
Virtualization), позволяющей скомбинировать все сетевые ресурсы системы
в единую виртуальную сеть, имеющую один центр управления.
Такой подход упрощает администрирование, администратор получает вместо
разрозненной целостную структуру, которая легко масштабируется,
настройки проще переносятся в другую систему, с минимумом переделок и
без потери функциональности. Виртуальные сети могут быть внешними
(например, VLAN) или внутренними, по сути являющимися сетью в отдельной
системе (network in a box). Проект CrossBow (http://ru.opensolaris.org/os/project/crossbow/)
позволяет реализовать в одном компьютере даже имеющем одну сетевую карту
целые внутренние виртуальные сети с коммутаторами.
Возможности CrossBow
Возможности CrossBow заложены в трех основных функциях:
* VNIC (Virtualized Network Interface) - виртуализированные сетевые
интерфейсы, которые настраиваются поверх физических, предоставляя
аналогичные возможности;
* IP instaces - выделенные копии TCP/IP-стека для выполнения задачи в
отдельной зоне, с возможностью использования своего IP-адреса,
таблицы маршрутизации, управления QoS, ограничения скорости
передачи между зонами и контроля.
* Bandwidth management and flow control -- управление пропускной
способностью и потоком для каждого VNIC интерфейса.
VNIC устройство создается при помощи специального драйвера
псевдоустройства Nemo/GLDv3 (http://ru.opensolaris.org/os/project/nemo/)
работающего на так называемом МАС уровне, который находится между драйвером
сетевого адаптера и стеком. Все клиенты обращающиеся через МАС уровень получают
доступ к нужному устройству, при этом каждому назначаются аппаратные
ресурсы, полоса пропускания, приоритет, потоки и так далее. Один
физический интерфейс может иметь несколько VNIC, каждый VNIC при
создании получает собственный MAC (а затем и) адрес. Для системных
утилит VNIC выглядят как реальные сетевые карты, и могут быть назначены
зонам и гостевым системам. Всего можно создать 899 VNIC (1-899), номера
900 - 999 зарезервированы для подсистем Xen.
Максимальное количество IP Instances, соответствует возможному
количеству неглобальных зон - 8191. Обмен данными между VNIC проходит
на системном уровне, не затрагивая физический интерфейс. Кроме
виртуальных адаптеров CrossBow позволяет создавать VLAN-ы, со всеми
возможностями для его управления и виртуальный коммутатор Etherstub,
при помощи которого можно связывать различные VNIC в сеть. По сути
Etherstub представляет собой VNIC, которому нельзя присвоить IP-адрес.
CrossBow может быть использован для настройки системы и сетевых
сервисов, изоляция зон Solaris и повышения безопасности. Например,
атака на один из сервисов работающем на виртуальном интерфейсе, будет
иметь влияние только для атакуемый сервис, на остальные зоны она не
распространится.
Создание виртуальной сети
Управление Crossbow производится при помощи утилиты dladm, для
настройки полосы пропускания, приоритета трафика используется flowadm.
Параметры dladm просты и понятны. Каждая состоит из двух частей в
первой заложено действие, во второй объект на которое оно направлено.
Так, например, для просмотра информации используется группа команд
show-*, создания create-*, удаления - delete-*. Поэтому освоиться в них
очень легко.
Для начала получим список datalink идентификаторов сетевых устройств:
# dladm show-link
LINK CLASS MTU STATE OVER
e1000g0 phys 1500 up --
pcn0 phys 1500 unknown --
Поле CLASS покажет класс устройства, он может принимать одно из четырех
значений - phys, aggr, vlan и vnic. В данном случае это физическое
устройство.
Другие команды начинающиеся на "show" покажут - show-phys (физические
устройства), show-ether (Ethernet устройства), show-wifi, show-vlan и
так далее. В последних версиях OpenSolaris в dladm появилась подкоманда
"rename-link ", при помощи которой можно изменить data-link имя
устройства на более удобное или единое, чтобы затем использовать в
скриптах:
# dladm rename-link e1000g0 eth0
Виртуальный интерфейс создается при помощи подкоманды "create-vnic" в
качестве параметра принимающего имя интерфейса и присваиваемого номера
vnic.
Список параметров каналов
В качестве имени интерфейса может выступать название физического
устройства или виртуального коммутатора. Для примера создадим по одному
VNIC, для каждого физического устройства.
# dladm create-vnic -l e1000g0 vnic1
# dladm create-vnic -l pcn0 vnic2
Для создания виртуального коммутатора достаточно указать его имя.
# dladm create-etherstub etherstub0
# dladm create-etherstub etherstub1
Теперь создадим VNIC поверх виртуального коммутатора.
# dladm create-vnic -l etherstub0 vnic3
# dladm create-vnic -l etherstub0 vnic4
Для etherstub1 по аналогии. По умолчанию MAC адрес генерируется
автоматически, но принеобходимости его можно указать вручную при помощи
параметра -m, принадлежность к VLAN (-v) и ряд других параметров.
Смотрим, что получилось.
# dladm show-link
LINK CLASS MTU STATE OVER
e1000g0 phys 1500 up --
pcn0 phys 1500 unknown --
vnic1 vnic 1500 up e1000g0
vnic2 vnic 1500 up pcn0
etherstub0 etherstub 9000 unknown --
vnic3 vnic 9000 up etherstub0
vnic4 vnic 9000 up etherstub0
# dladm show-vnic
LINK OVER SPEED MACADDRESS MACADDRTYPE VID
vnic0 e1000g0 1000 2:8:20:e5:e4:af random 0
vnic1 etherstub0 0 2:8:20:b7:c8:41 random 0
vnic2 etherstub0 0 2:8:20:98:32:e6 random 0
vnic3 etherstub1 0 2:8:20:83:d6:32 random 0
vnic4 etherstub1 0 2:8:20:1c:d4:9e random 0
vnic6 pcn0 0 2:8:20:b2:dd:fa random 0
vnic7 etherstub0 0 2:8:20:87:d:45 random 0
Список параметров и их значения установленные для каналов можно
получить при помощи "dladm show-linkprop". Выведем для одного из них.
# dladm show-linkprop vnic0
LINK PROPERTY PERM VALUE DEFAULT POSSIBLE
vnic0 autopush -w -- -- --
vnic0 zone rw -- -- --
vnic0 state r- unknown up up,down
vnic0 mtu r- 1500 1500 --
vnic0 maxbw rw -- -- --
vnic0 cpus rw -- -- --
vnic0 priority rw high high low,medium,high
vnic0 tagmode rw vlanonly vlanonly normal,vlanonly
Столбец PROPERTY показывает свойства адаптера, установленное значение
выведены в VALUE, в POSSIBLE даны возможные варианты. Чтобы указать
свое значение следует использовать параметр -p в вызове "dladm
create-vnic". Например, maxbw позволяет установить максимальную
скорость интерфейса, cpus - использование CPU. Поэтому полная команда
на создание VNIC может выглядеть так:
# dladm create-vnic -l etherstub0 -p maxbw=50,priority=high,cpus=2,3,4 vnic5
# dladm show-linkprop vnic5
...
vnic5 maxbw rw 50 -- --
vnic5 cpus rw 2,3,4 -- --
...
Интерфейсы созданы, но в выводе ifconfig они пока отсутствуют.
Подключаем и присваиваем IP-адрес. Эта процедура ничем не отличается от
работы с физическим устройством. Например, для интерфейса vnic1:
# ifconfig vnic1 plumb
# ifconfig vnic1 dhcp start
# ifconfig vnic1
И так далее.
Управление потоком
В свойствах VNIC можно задать общие установки характерные для обычной
сетевой карты, например, указать определенную скорость интерфейса.
Управление потоком дает возможность устанавливать пропускную
способность и ресурсы для конкретного сервиса, протокола, номера порта
или виртуальной машины. Установки управления потоком осуществляется при
помощи утилиты flowadm.
Параметры flowadm
С ее помощью можно указать ряд атрибутов и параметров, все требования и
параметры расписаны в "man flowadm". Так в правило можно добавить
следующие атрибуты: локальный (local_ip) и удаленный адрес (remote_ip),
локальный (local_port) и удаленный порт (remote_port), версию IP
протокола (ip_version) и ряд других. Создадим сопоставленный vnic1
поток, описывающий транспорт TCP, локальный порт 80 и присвоим ему
ссылку http-1.
# flowadm add-flow -l vnic1 -a transport=TCP,local_port=80 http-1
Второе правило будет содержать атрибуты версии IP протокола и
IP-адреса.
# flowadm add-flow -l vnic2 -a ip_version=4,local_ip=10.4.0.16 v4flow
Кроме атрибутов поток может принимать и параметры, некоторые из
установок (пропускная способность, приоритет, привязка к CPU и
некоторые) совпадают с create-vnic:
# flowadm set-flowprop -p maxbw=30,priority=high,cpus=2 http-1
Проверяем.
# flowadm show-flowprop http-1
FLOW PROPERTY VALUE DEFAULT POSSIBLE
http-1 maxbw 30 -- 30
http-1 priority high -- high
Теперь осталось подключить интерфейс к одной из зон Solaris (подробнее
Руководство по системному администрированию: контейнеры в Solaris
- управление ресурсами и зонами - http://dlc.sun.com/pdf/820-2979/820-2979.pdf ).
# zonecfg -z zone1
zone1: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zone1> create
// эксклюзивный IP
zonecfg:zone1> set ip-type=exclusive
// добавлем сетевой интерфейс, подключим к vnic1
zonecfg:zone1> add net
zonecfg:zone1:net> set physical=vnic1
zonecfg:zone1:net> info
net:
address not specified
physical: vnic0
defrouter not specified
zonecfg:zone1:net> end
zonecfg:zone1:net> verify
zonecfg:zone1:net> commit
zonecfg:zone1:net> exit
Теперь зона zone1 будет использовать vnic1 и управление потока http-1.
Объединение интерфейсов
При помощи dladm очень просто физические устройства поддерживающие
GLDv3, объединить в одно логическое (link aggregations). Такая
возможность востребована для возможности резервирования каналов,
увеличения пропускной способности сети, балансировки нагрузки. В случае
необходимости объединения интерфейсов лучше выбрать две одинаковые
сетевые карты, работающие в режиме full duplex с одной скоростью,
сетевые коммутаторы должны поддерживать протокол LACP (link aggregation
control protocol). Процесс достаточно прост. Останавливаем сетевые
интерфейсы:
# ifconfig e1000g0 unplumb
# ifconfig e1000g1 unplumb
Объединяем интерфейсы:
# dladm create-aggr -l e1000g1 -l e1000g2 default0
Проверяем, что получилось.
# dladm show-aggr
# dladm show-link
После этого включаем интерфейс обычным образом.
# ifconfig default0 plumb 10.0.17.1 up
Далее поверх интерфейса default0 можно настраивать VLAN.
# dladm create-vlan -v 2 -l default0 vlan0
# dladm create-vlan -v 3 -l default0 vlan2
Удаление виртуальных интерфейсов
Удаляются виртуальные интерфейсы и коммутаторы при помощи команд
delete-vnic и delete-etherstub. Перед удалением коммутатора следует
удалить все связанные VNIC, при наличии хотя бы одного активного VNIC,
команда завершится с ошибкой.
# dladm delete-etherstub etherstub1
dladm: vnic deletion failed: link busy
Виртуальные сетевые интерфейсы вначале следует остановить и удалить
управление потоком.
# dladm delete-vnic vnic1
dladm: vnic deletion failed: link still has flows
# flowadm remove-flow http-1
# ifconfig vnic1 umplumb
# dladm delete-vnic1
Получаем статистику
Утилиты dladm и flowadm умеют считывать статистику из внешнего файла
созданного при помощи команды acctadm. Активируем сетевую статистику.
# acctadm -e extended -f /var/log/net.log net
Проверим.
# acctadm net
Network accounting: active
Network accounting file: /var/log/net.log
Tracked Network resources: extended
Untracked Network resources: none
Просмотр осуществляется при помощи "flowadm" show-usage", в качестве
параметра принимающей созданный файл.
# flowadm show-usage -f /var/log/net.log
Дополнительные параметры позволяют отобрать статистику по дате, времени
и потоку.
Полученная статистика
Получим список дат из файла.
# flowadm show-usage -d -f /var/log/net.log
07/16/2009
Теперь просмотрим статистику за рабочий день (09:00-18:00).
# flowadm show-usage -s07/16/2009,09:00:00 -e07/16/2009,18:00:00 -f /var/log/log.net
FLOW START END RBYTES OBYTES BANDWIDTH
http-1 22:04:09 22:04:29 6586 896 1 Mbps
Заменив в вызове команду flowadm на dladm, узнаем статистику по
виртуальным интерфейсам.
# dladm show-usage -f /var/log/log.net
LINK DURATION IPACKETS RBYTES OPACKETS OBYTES BANDWIDTH
vnic0 2678 10 420 21 882 1 Mbps
e1000g0 2678 55 3530 112 9841 2 Mbps
Появление CrossBow в OpenSolaris дало в руки администратора гибкий и
простой инструмент позволяющий управлять сетевыми настройками.
Параметры для отдельного сервиса можно выставить действительно
индивидуально, при любых изменениях созданная структура легко
переносится.