xg-scale

changeset 0:4730a0d07d88 v0.1

Исходники курса после первого прочтения.
Правки (которых должно быть много),
ещё пока не вносились.
author Igor Chubin <igor@chub.in>
date Tue Jul 01 16:16:44 2008 +0300 (2008-07-01)
parents
children 6f6e0f706b86
files aoe.tex bridge.tex drbd.tex evms.tex lvm.tex raid.tex windowsxp.tex xen-drbd-install.tex xen-drbd.tex xen.tex xen/block-attach.tex xen/devices.tex xen/drbd.tex xen/export.tex xen/hvm2pv.tex xen/hw.tex xen/installation.tex xen/io.tex xen/linux.tex xen/net.tex xen/os.tex xen/pxe.tex xen/resources.tex xg-scale.tex
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/aoe.tex	Tue Jul 01 16:16:44 2008 +0300
     1.3 @@ -0,0 +1,424 @@
     1.4 +\section{ATA over Ethernet}
     1.5 +
     1.6 +Описываемая технология построения хранилищ даёт возможность строить дисковые массивы
     1.7 +для архивов, резервных копий или традиционного использования
     1.8 +на базе обычных дисков ATA, которые дешевле даже чем лента.
     1.9 +Эта технология может оказаться особенно интересной для тех, 
    1.10 +кто использует виртуализированные системы на базе Xen.
    1.11 +
    1.12 +Технология является альтернативой для iSCSI, но с более узким 
    1.13 +спектром задач, где она может использоваться. Подробнее об этом ниже,
    1.14 +в разделе \textit{\dq{}Преимущества и недостатки AoE\dq{}}.
    1.15 +
    1.16 +\subsection{Введение}
    1.17 +Данные некоторых видов огромны просто в силу своей природы.
    1.18 +Видео, например, как правило занимает большой объём диска.
    1.19 +В связи с широким распространением видеонаблюдения
    1.20 +потребность в хранении видео-данных становится ещё более актуальной.
    1.21 +
    1.22 +Резервное копирование и избыточность данных
    1.23 +имеет существенное значение для любого дела,
    1.24 +в котором используются компьютеры.
    1.25 +Похоже, не важно, какой объём хранилища -- всегда хочется иметь больше.
    1.26 +Даже почта может вырасти за пределы контейнера, в котором она лежит.
    1.27 +Это хорошо известно провайдерам Интернет-услуг.
    1.28 +
    1.29 +Хранилище неограниченного размера вполне имеет право на существование, 
    1.30 +если сделать так, чтобы диски можно было вынести за предел корпуса
    1.31 +и отвязать хранилище от компьютера, которые его использует.
    1.32 +Принцип развязки связанных компонент с целью достижения большей гибкости
    1.33 +хорошо показал себя во множестве различных областей,
    1.34 +не только при построении хранилищ.
    1.35 +Модульный код обладает гибкостью, которая позволяет 
    1.36 +применять его в непредвиденных ситуациях или
    1.37 +стерео-система, сделанная из компонентов,
    1.38 +может использоваться в различных интересных конфигурациях,
    1.39 +а не только как аудио-комбайн.
    1.40 +
    1.41 +Наиболее известный пример хранилищ, работающих из коробки это, наверное, SAN (storage area network).
    1.42 +Когда SAN\rq{}ы только появились вокруг них был большой шум и переполох.
    1.43 +Сложно было выяснить, что же это в действительности такое.
    1.44 +А когда в итоге это всё-таки получилось, выяснилось что это нечто 
    1.45 +сложное, проприетарное и дорогое.
    1.46 +
    1.47 +Однако, поддерживая SAN\rq{}ы Linux-сообщество сделало несколько полезных изменений в ядре.
    1.48 +Сегодня в ядрах Linux есть возможности, которых ещё несколько лет назад очень не хватало.
    1.49 +Они могут использоваться как гигантские блочные устройства, выходящие далеко
    1.50 +за старые пределы в два терабайта (именно терабайта! подробности, например, в \url{http://lkml.org/lkml/2002/5/9/217} и \url{http://kerneltrap.org/node/186}). Они поддерживают намного больше 
    1.51 +одновременно подключённых дисков. Также появились богатые возможности управления томами.
    1.52 +В дополнение ко всему прочему, файловые системы могут теперь расширяться до огромных размеров,
    1.53 +даже когда они смонтированы и используются.
    1.54 +
    1.55 +Здесь рассматриваются новые пути использования эти возможности ядра:
    1.56 +диски выносятся из компьютера старые пределы ёмкости преодолеваются.
    1.57 +Можно воспринимать ATA over Ethernet как способ заменить IDE-кабель
    1.58 +сетью Ethernet. Когда хранилище и компьютер развязаны и между ними стоит такая гибкая вещь
    1.59 +как Ethernet, возможности ограничены только воображением и желанием изучать новые вещи.
    1.60 +
    1.61 +\subsection{Что такое AoE}
    1.62 +ATA over Ethernet (AoE) — это сетевой протокол, зарегистрированный IEEE как Ethernet-протокол 
    1.63 +номер 0x88a2. AoE это низкоуровневый протокол, намного более простой чем TCP/IP или даже просто IP. 
    1.64 +TCP/IP и IP нужны обязательно, если требуется организовать (надёжную) передачу данных через Интернет,
    1.65 +но на компьютер в этом случае ложится намного большая нагрузка, для того чтобы 
    1.66 +обеспечить ту сложность, которая присуща этим протоколам.
    1.67 +
    1.68 +Особенно хорошо это известно пользователям iSCSI.
    1.69 +iSCSI позволяет перенаправить ввод/вывод поверх TCP/IP,
    1.70 +что в свою очередь даёт возможность заменить дорогое оборудование Fibre Channel на значительно
    1.71 +более дешёвое Ethernet и IP.
    1.72 +Зачастую iSCSI используется совместно с устройствами для разгрузки TCP (TCP offload engines, TOE).
    1.73 +Эти устройства довольно дорогие, но они снимают часть нагрузки TCP/IP
    1.74 +с центрального процессора машин, использующих iSCSI.
    1.75 +
    1.76 +Интересно, что в большинстве своём iSCSI не используется поверх собственно сети Интернет.
    1.77 +Чаще всего пакеты просто передаются на машину, стоящую в соседней серверной стойке,
    1.78 +и в этом случае вся мощь TCP/IP оказывается просто избыточной.
    1.79 +
    1.80 +Резонный вопрос, почему бы вместо того что разгружать TCP/IP вообще от него не избавиться?
    1.81 +Протокол AoE именно это и делает.
    1.82 +И вместо того чтобы полагаться на TCP/IP, он полагается на возможности современных коммутаторов,
    1.83 +у которых не бывает коллизий, есть возможность управления потоком и
    1.84 +постоянно растёт производительность.
    1.85 +В локальной сети сохраняется последовательность пакетов
    1.86 +и для каждого пакеты сетевым оборудованием вычисляется контрольная сумма.
    1.87 +
    1.88 +В каждом AoE пакете находится команда для ATA-диска или ответ от ATA-диска.
    1.89 +Драйвер AoE в ядре Linux выполняется AoE и делает диск доступным как обычное
    1.90 +блочное устройство, такое, например, как \texttt{/dev/etherd/e0.0} -- точно также
    1.91 +как IDE-драйвер делает диск, подключённый к концу IDE-кабеля, доступным как \texttt{/dev/hda}.
    1.92 +Драйвер, если нужно, ретранслирует пакеты, так что AoE-устройство выглядит для остального ядра как обычный диск.
    1.93 +
    1.94 +В дополнение к ATA командам, у AoE есть простая возможность идентификации
    1.95 +доступных устройств с помощью конфигурационных опросных пакетов (query config packets).
    1.96 +Это всё: ATA команды и конфигурационных опросные пакеты.
    1.97 +
    1.98 +Возникает вопрос:
    1.99 +если все диски находятся в сети, тогда как я могу ограничить доступ к дискам?
   1.100 +Как можно быть уверенным что, даже если машину А взломали, что диски машины B в безопасности?
   1.101 +
   1.102 +Ответ в том, что AoE немаршрутизируемый протокол. Можно легко определить какой компьютер 
   1.103 +будет видеть какие диски путём конфигурирования Ethernet-сети.
   1.104 +Поскольку AoE-устройствам не нужны IP-адреса, создать изолированные
   1.105 +Ethernet-сети несложно.
   1.106 +Большинство современных коммутаторов имеют возможность организации
   1.107 +VLAN\rq{}ов, что позволяет легко разделить коммутатор на несколько широковещательных доменов.
   1.108 +
   1.109 +Протокол AoE настолько легковесный, что его может использовать даже самое недорогое железо
   1.110 +(существует как минимум один производитель оборудования, поддерживаеющего ATA over Ethernet — Coraid).
   1.111 +Описание спецификаций AoE помещается на 8 страниц. Простота протокола выглядит контрастно
   1.112 +по отношению к iSCSI, который описывается на сотнях страниц,
   1.113 +включая спецификации по шифрованию, маршрутизации, контролю доступа
   1.114 +и множеству других вопросов.
   1.115 +
   1.116 +Простые примитивы могут быть очень мощными.
   1.117 +
   1.118 +\subsection{Стэн-архиватор}
   1.119 +Эта история основана на реальных событиях, случившихся с гражданином
   1.120 +одного другого государства.
   1.121 +
   1.122 +Стэн — вымышленный админ, работающий на государственной службе.
   1.123 +В соответствии с новым государственным законом той страны все официальные
   1.124 +документы должны архивироваться. Любой гражданин государства
   1.125 +может потребовать показать любой документ в любое время.
   1.126 +Из-за этого Стэну понадобилось огромное хранилище, которое может расти
   1.127 +без всяких ограничений. Производительность хранилища может не быть 
   1.128 +больше производительности локального диска. Любые данные из хранилища
   1.129 +должны доставаться легко и мгновенно.
   1.130 +
   1.131 +Стэн уверенно чувствует себя в системном администрировании Linux и Ethernet сетях,
   1.132 +и из-за этого он решает попробовать для своей задачи ATA over Ethernet.
   1.133 +Он покупает кое-какое оборудование, потратив на это меньше \$6.5K:
   1.134 +\begin{itemize}
   1.135 +\item  Одна двухпортовая гигабитная Ethernet-карта, вместо старой 100-мегабитной карты.
   1.136 +\item  Один 26-портовый коммутатор с двумя гигабитными портами.
   1.137 +\item  Одну полку Coraid EtherDrive и десять блэйдов EtherDrive.
   1.138 +\item  Десять 400GB ATA жестких дисков.
   1.139 +\end{itemize}
   1.140 +
   1.141 +Оборудование может быть объединеное в программный RAID-10 — чередование поверх зеркалированных пар.
   1.142 +Хотя этак конфигурация не даёт столько ёмкости как конфигурация RAID 5,
   1.143 +она максимизирует отказоустойчивость, надёжность, снижает нагрузку
   1.144 +на процессор и время реинициализации диска при замене.
   1.145 +
   1.146 +Имеет смысл поверх AoE-дисков использовать 
   1.147 +LVM и файловые системы с возможностью online-расширения, такие например,
   1.148 +как ext3, XFS или JFS.
   1.149 +Это даст возможность в дальнейшем, при необходимости купить новую заполненную 
   1.150 +полку, создать ещё один RAID 10, превратить его в физический том, 
   1.151 +и использовать этот том для расширения
   1.152 +объёма логических томов с файловыми системами.
   1.153 +
   1.154 +Для старых систем нужно скомпилировать драйвер
   1.155 +AoE с AOE\_PARTITIONS=1 (в частности, sarge не поддерживал большие минорные номера),
   1.156 +поэтому он выключает поддержку разделов, для того чтобы использовать побольше дисков.
   1.157 +
   1.158 +\begin{verbatim}
   1.159 +%# # Настройка хоста для работы с AOE 
   1.160 +
   1.161 +%# # Сборка и инсталляция драйвера aoe
   1.162 +%# tar xvfz aoe-2.6-5.tar.gz
   1.163 +%# cd aoe-2.6-5
   1.164 +%# make AOE_PARTITIONS=1 install
   1.165 +
   1.166 +%# # Настройка сети
   1.167 +%# # Для AoE IP-адрес не нужен
   1.168 +%# ifconfig eth1 up
   1.169 +
   1.170 +%# # Чтобы быть уверенным что интерфейс успел подняться, нужно подождать какое-то время
   1.171 +%# # И после этого загрузить драйвер aoe
   1.172 +%# sleep 5
   1.173 +%# modprobe aoe
   1.174 +
   1.175 +%# # Теперь можно посмотреть какие AoE-устройства есть в сети
   1.176 +%# aoe-stat
   1.177 +\end{verbatim}
   1.178 +
   1.179 +\subsection{Минорные номера устройств}
   1.180 +Программы, которые хотят использовать устройство, как правило, обращаются к нему
   1.181 +через специальный файл, соответствующий ему. Типичный пример -- файл \texttt{/dev/hda}.
   1.182 +Команда \texttt{ls -l} покажет для этого устройства, \texttt{/dev/hda}, номера 3 и 0.
   1.183 +Мажорный номер 3 и минорный номер 0. А у устройства \texttt{/dev/hda1} минорный номер 1,
   1.184 +в то время как мажорный номер тоже 3.
   1.185 +
   1.186 +До ядра 2.6 минорный номер был 8битный, ограничивая возможное количество номеров от 0 до 255.
   1.187 +Ни у кого и не было столько устройств, поэтому ограничение не имело существенного значения.
   1.188 +Теперь, когда диски могут быть отвязаны от серверов, ограничение стало важным --
   1.189 +в настоящее время ядро 2.6 использует до 20 бит для минорного номера устройства.
   1.190 +
   1.191 +Иметь 1048576 разных  значений для минорного номера это большая помощь для систем, в которых 
   1.192 +много устройств, но не всякое программное обеспечение может с этим разобраться.
   1.193 +Если glibc или другая программа всё ещё думает, что минорные номера 8-битные,
   1.194 +будет проблематично заставить её использовать номера превышающие 255.
   1.195 +
   1.196 +Для облегчения перехода, драйвер AoE может быть скомипилирован 
   1.197 +без поддержки разделов.
   1.198 +Это позволит вместо 16 номеров на диск использовать только один.
   1.199 +Так что, даже на системах, которые до сих пор не поддерживают большие
   1.200 +минорные номера как ядро 2.6, можно использовать до 256 AoE дисков.
   1.201 +
   1.202 +Команды для создания файловой системы и логических томов показаны на листинге 2.
   1.203 +Стэн решил назвать группу ben и логический том franklin.
   1.204 +После этого нужно сделать небольшие изменения в конфигурации LVM2.
   1.205 +Во-первых, нужно добавить строку с типом = [\dq{}aoe\dq{}, 16],
   1.206 +так чтобы LVM распознал AoE-диски. Во-вторых, нужно указать md\_component\_detection = 1,
   1.207 +чтобы диски внутри RAID 10 игнорировались, как только весь RAID 10 
   1.208 +стал физическим томом.
   1.209 +
   1.210 +\begin{verbatim}
   1.211 +%# # ускорить инициализацию массива
   1.212 +%# for f in `find /proc | grep speed`; do echo 100000 > $f done
   1.213 +
   1.214 +%# создать массив (mdadm will manage hot spares)
   1.215 +%# mdadm -C /dev/md1 -l 1 -n 2 /dev/etherd/e0.0 /dev/etherd/e0.1
   1.216 +%# mdadm -C /dev/md2 -l 1 -n 2 /dev/etherd/e0.2 /dev/etherd/e0.3
   1.217 +%# mdadm -C /dev/md3 -l 1 -n 2 /dev/etherd/e0.4 /dev/etherd/e0.5
   1.218 +%# mdadm -C /dev/md4 -l 1 -n 2 -x 2 \
   1.219 +          /dev/etherd/e0.6 /dev/etherd/e0.7 \
   1.220 +          /dev/etherd/e0.8 /dev/etherd/e0.9
   1.221 +%# sleep 1
   1.222 +
   1.223 +%# распределение по зеркалам
   1.224 +%# mdadm -C /dev/md0 -l 0 -n 4 \
   1.225 +           /dev/md1 /dev/md2 /dev/md3 /dev/md4
   1.226 +
   1.227 +%# # превращаем RAID10 в физический том, и добавляем его в группу
   1.228 +%# pvcreate /dev/md0
   1.229 +%# vgcreate TURBO /dev/md0
   1.230 +
   1.231 +%# # смотрим количество экстентов
   1.232 +%# vgdisplay TURBO | grep -i 'free.*PE'
   1.233 +
   1.234 +%## создаём том, занимающий всё свободное пространство
   1.235 +%# lvcreate --extents 88349 --name vol1 TURBO
   1.236 +%# modprobe jfs
   1.237 +%# mkfs -t jfs /dev/TURBO/vol1
   1.238 +%# mkdir /vol1
   1.239 +%# mount /dev/TURBO/vol1 /vol1
   1.240 +\end{verbatim}
   1.241 +
   1.242 +На системе Debian Sarge с двумя процессорами
   1.243 +Athlon MP, 1 GB памяти, сетевой картой Intel PRO/1000MT и 40GB дисками
   1.244 +и коммутатором Netgear FS526T
   1.245 +с RAID 10 работающим поверх 8 блэйдов EtherDrive в полке Coraid
   1.246 +была зафиксирована произодвительность 23.58MB/s на чтение 
   1.247 +и 17.45MB/s на запись.
   1.248 +Измерения делались  
   1.249 +путём копирования 1GB файла в /dev/null после сброса кэша.
   1.250 +Во время копирования включена также команда sync.
   1.251 +
   1.252 +RAID 10 в данном случае состоит из четырёх stripe\rq{}ов,
   1.253 +каждый из которых это пара зеркалированных дисков.
   1.254 +Вообще, можно вычислить производительность
   1.255 +набора блэйдов EtherDrive исходя только из количества stripe\rq{}ов в нём.
   1.256 +Для RAID 10 stripe\rq{}ов будет в два раза меньше чем дисков, 
   1.257 +поскольку каждый диск зеркалируется на другой диск.
   1.258 +Для RAID 5 один диск выделяется под чётность, оставляя остальные диски для stripe\rq{}ов.
   1.259 +
   1.260 +Ожидаемая пропускная способность чтения равна количеству stripe\rq{}ов умножить на 6MB/s.
   1.261 +Это означает, что если Стэн изначальное купил бы две полки 
   1.262 +и собрал бы из них 18-блэйдный RAID 10 вместо своего 8-блэйдного, он мог ожидать 
   1.263 +прироста производительности более чем в два раза.
   1.264 +Стэну не нужна такая большая производительность и он хочет начать с маленькой файловой системы, 
   1.265 +размером 1.6TB.
   1.266 +
   1.267 +Ниже показано как можно расширить файловую систему. 
   1.268 +
   1.269 +На листинге не показан файл \#mdadm-aoe.conf\# и стартовые/стоповые скрипты. 
   1.270 +Конфигурационный файл mdadm указывает процессу mdadm, работающему в режиме монитора,
   1.271 +как выполнять горячую замену, чтобы можно было заменить сбойный диск в зеркале.
   1.272 +Подробности о группах резервирования (spare groups) можно прочитать на man-странице
   1.273 +по mdadm.
   1.274 +
   1.275 +Увеличить файловую систему без размонтирования, установить массив RAID 10, добавить его в группу томов и затем увеличить файловую систему:
   1.276 +
   1.277 +\begin{verbatim}
   1.278 +%# # когда для второй полки сделан RAID10, добавляем его в группу томов
   1.279 +%# vgextend TURBO /dev/md5
   1.280 +%# vgdisplay TURBO | grep -i 'free.*PE'
   1.281 +
   1.282 +%# # увеличиваем логический том и файловую систему
   1.283 +%# lvextend --extents +88349 /dev/TURBO/vol1
   1.284 +%# mount -o remount,resize /vol1
   1.285 +\end{verbatim}
   1.286 +
   1.287 +Стартовый и стоповый скрипты легко создать.
   1.288 +Стартовый скрипт просто собирает зеркалированные пары RAID 1,
   1.289 +собирает все RAID 0 и запускает процесс мониторинга mdadm.
   1.290 +Стоповый скрипт останавливает монитор mdadm,
   1.291 +останавливает RAID 0 и, в последнюю очередь,
   1.292 +останавливает RAID 1.
   1.293 +
   1.294 +\subsection{Совместный доступ к блочным хранилищам}
   1.295 +Теперь, после того как мы увидели конкретный пример ATA over Ethernet в действии, 
   1.296 +может возникнуть вопрос: \dq{}А что произойдёт, если другой хост попытается получить
   1.297 +доступ к данным, когда с ними уже работает какой-то хост в сети?\dq{}
   1.298 +Сможет ли этот второй хост подмонтировать файловую систему JFS и получить доступ
   1.299 +к тем же данным? Короткий ответ такой: \dq{}Да, но это не безопасно!\dq{}.
   1.300 +JFS, как и ext3, как и многие другие файловые системы спроектированы
   1.301 +для использования на отдельном хосте. И для таких файловых систем
   1.302 +одновременный доступ с нескольких хостов приведёт к повреждениям.
   1.303 +Причина -- в кэш-буфере, который унифицирован с кэшем страниц в ядре 2.6.
   1.304 +
   1.305 +Linux кэширует данные файловых систем в оперативной памяти 
   1.306 +везде, где это только возможно, дабы избежать использования
   1.307 +медленного блочного устройства и добиться хорошего прироста производительности.
   1.308 +Вы могли видеть результат наглядно, 
   1.309 +когда, например, запускали \textbf{find} дважды
   1.310 +поверх одного и того же каталога.
   1.311 +
   1.312 +Некоторые файловые системы спроектированы так, что они могут использоваться одновременно 
   1.313 +несколькими хостами — такие файловые системы называют \textit{кластерными}.
   1.314 +Они имеют механизмы для проверки, синхронизирован ли кэш на всех
   1.315 +машинах с нижележащей файловой системой. 
   1.316 +Отличный пример такой системы с открытым кодом это GFS.
   1.317 +GFS использует кластерное программное обеспечение 
   1.318 +для того чтобы отследить, кто из группы хостов
   1.319 +работает с файловой системой.
   1.320 +Для того чтобы убедиться,
   1.321 +что разные хосты договариваются друг с другом
   1.322 +при совместном доступе к файловой системе,
   1.323 +в GFS используются блокировки.
   1.324 +
   1.325 +Когда используются кластерные файловые системы, такие как GFS,
   1.326 +становится возможным совместный доступ множества хостов
   1.327 +к одному и тому же блочному устройству по сети.
   1.328 +Не нужно ничего типа NFS-сервера, поскольку
   1.329 +каждый хост работает с хранилищем непосредственно.
   1.330 +
   1.331 +Но есть одна загвоздка.
   1.332 +Чем больше дисков вы используете, тем выше шансы, 
   1.333 +что один из дисков засбоит.
   1.334 +В этой ситуации обычно используется RAID, 
   1.335 +который добавляет избыточность.
   1.336 +К сожалению, программный RAID Linux
   1.337 +пока что не умеет работать с кластерными файловыми системами.
   1.338 +Это означает, что каждый хост 
   1.339 +в сети не сможет запускать mdadm.
   1.340 +
   1.341 +Кластерное программное обеспечение для Linux развивается 
   1.342 +с большой скоростью. Есть надежда что рано или поздно RAID будет поддерживать кластерные файловые системы.
   1.343 +До этого момента мало вариантов использования AoE в кластерных системах.
   1.344 +Основная идея — централизовать функциональность RAID.
   1.345 +Можно купить один или два Coraid RAIDblade
   1.346 +и сделать чтобы кластерные узлы использовали их.
   1.347 +RAIDblade\rq{}ы будут управлять EtherDrive\rq{}ами, 
   1.348 +которые должны подключаться за них.
   1.349 +Или тоже самое можно сделать на обычной Linux-системе,
   1.350 +которая подключит массивы, сделает на них RAID
   1.351 +и с помощью ATA over Ethernet экспортирует его как готовое устройство.
   1.352 +Это может сделать, например, программа [vblade].
   1.353 +
   1.354 +\subsection{Резервное копирование}
   1.355 +Поскольку AoE выводит недорогие диски в Ethernet-сеть, многие админы
   1.356 +могут заинтересоваться в использовании AoE для создания резервных копий.
   1.357 +Часто в стратегиях резервного копирования используются двухуровневые хранилища,
   1.358 +которые не такие быстрые как on-line хранилища, но и не такие медленные для доступа как лента.
   1.359 +ATA over Ethernet даёт возможность легко использовать дешёвые ATA-диски как хранилище второго уровня.
   1.360 +
   1.361 +Но вообще говоря, с такими дешёвыми жёсткими дисками и стабильным программным RAID, 
   1.362 +почему бы не использовать диски как носитель для хранения резервных копий?
   1.363 +В такой системе резервного копирования, в отличие от ленточной,
   1.364 +есть возможность непосредственного доступа к заархивированным файлам.
   1.365 +
   1.366 +В нескольких программах резервного копирования при создании резервных копий
   1.367 +используются преимущества возможностей файловых систем.
   1.368 +Например, используя жёсткие ссылки они могут делать полные бэкапы
   1.369 +с эффективностью инкрементальных. Подробности 
   1.370 +здесь ([rsync Backups http://www.mikerubel.org/computers/rsync\_snapshots])
   1.371 +и здесь ([Backup PC http://backuppc.sourceforge.net/]).
   1.372 +
   1.373 +\subsection{Заключение}
   1.374 +Размещение недорогих дисков в локальной сети это одна из тех идей, 
   1.375 +которая заставляет подумать \dq{}Почему это интересно раньше никто не сделал?\dq{}.
   1.376 +С помощью простого сетевого протокола можно развязать хранилища 
   1.377 +и сервера, не используя при этом дорогого аппаратного обеспечения
   1.378 +и сложной сетевой инфраструктуры. В простой Ethernet сети нет необходимости
   1.379 +в сложном, развитом но требовательном к ресурсам стеке протоколов TCP/IP.
   1.380 +
   1.381 +Если вы используете хранилища в локальной сети, и если настройки
   1.382 +доступа к хранилищу путём конфигурирование сети Ethernet достаточно, 
   1.383 +тогда ATA over Ethernet подойдёт вас лучше всего.
   1.384 +Если вас интересуют такие вещи как шифрование, возможность маршрутизации
   1.385 +и контроль доступа, посмотрите iSCSI.
   1.386 +
   1.387 +С AoE появляется простое альтернативное решение для организации хранилищ на Linux, 
   1.388 +которой ранее явно не хватало. С простотой появляются и возможности.
   1.389 +AoE может использоваться как строительный блок в любом решении для хранения.
   1.390 +Дальше уже ваша фантазия.
   1.391 +
   1.392 +\subsection{Преимущества и недостатки AoE}
   1.393 +Преимущества и недостатки AoE в сравнении с iSCSI.
   1.394 +
   1.395 +Преимущества:
   1.396 +\begin{itemize}
   1.397 +\item  Низкая стоимость 
   1.398 +\item  Высокая производительность
   1.399 +\item  Простота
   1.400 +\end{itemize}
   1.401 +
   1.402 +Недостатки:
   1.403 +\begin{itemize}
   1.404 +\item  Низкая масштабируемость, возможность использования только в пределах одной Ethernet-сети
   1.405 +\item  Отсутствие механизмов обеспечения безопасности
   1.406 +\item  Отсутствие механизмов контроля ошибок передачи данных, за исключением тех, что есть у самой сети Ethernet (см, например \url{http://lists.xensource.com/archives/html/xen-devel/2005-05/msg00832.html})
   1.407 +\end{itemize}
   1.408 +
   1.409 +\subsection{Дополнительная информация}
   1.410 +\begin{itemize}
   1.411 +\item \htmladdnormallinkfoot{ATA over Ethernet}{http://xgu.ru/wiki/aoe} (рус.)
   1.412 +\item \htmladdnormallinkfoot{ATA over Ethernet}{http://en.wikipedia.org/wiki/ATA\_over\_Ethernet}(англ.) в Wikipedia
   1.413 +\item \htmladdnormallinkfoot{ATA Over Ethernet: Putting Hard Drives on the LAN}{http://www.linuxjournal.com/article/8149} — статья в Linux Journal
   1.414 +\item \htmladdnormallinkfoot{Resources for "ATA Over Ethernet: Putting Hard Drives on the LAN"}{http://www.linuxjournal.com/article/8201} (англ.)
   1.415 +\item \htmladdnormallinkfoot{Resources for "ATA Over Ethernet: Putting Hard Drives on the LAN"}{http://www.linuxjournal.com/article/8201} (англ.) — дополнительные ссылки в Linux Journal
   1.416 +\item \htmladdnormallinkfoot{The ATA over Ethernet (AoE) Protocol}{http://www.linux-mag.com/index.php?option=com\_content\&task=view\&id=2069\&Itemid=2307} (англ.) — статья на Linux Magazine (требуется регистрация)
   1.417 +\item \htmladdnormallinkfoot{Using AoE in FreeBSD}{http://www.coraid.com/support/freebsd/usingaoe.html} — Поддержка AoE в FreeBSD
   1.418 +\item \htmladdnormallinkfoot{Протоколы сетей хранения данных. Часть I — ATA over Ethernet}{http://www.samag.ru/cgi-bin/go.pl?q=articles;n=09.2005;a=15} — статья в журнале Системный администратор
   1.419 +\item \htmladdnormallinkfoot{The Coraid Linux NAS HOWTO}{http://www.coraid.com/support/cln/CLN-HOWTO.html} (англ.) — HOWTO по разворачиванию NAS на базе ATA over Ethernet
   1.420 +\item \htmladdnormallinkfoot{(Xen-users) HOWTO: AOE in domU and boot from it.}{http://lists.xensource.com/archives/html/xen-users/2006-07/msg00595.html} (англ.
   1.421 +\item \htmladdnormallinkfoot{Access over Ethernet Insecurities in AoE SLIDES}{http://www.slideshare.net/amiable\_indian/access-over-ethernet-insecurites-in-aoe/} (англ.)
   1.422 +\item \htmladdnormallinkfoot{"iSCSI killer" Native in Linux}{http://hardware.slashdot.org/article.pl?sid=06/07/31/1143230} (англ.) — обсуждение AoE на Slashdot
   1.423 +\item \htmladdnormallinkfoot{OpenNews: ATA over Ethernet в Linux}{http://www.opennet.ru/openforum/vsluhforumID3/36130.html} — обсуждение статьи на OpenNet
   1.424 +\item \htmladdnormallinkfoot{OpenNews: Построение SAN для Xen на основе DRBD, LVM и GNBD" }{http://www.opennet.ru/openforum/vsluhforumID3/36804.html} — другое обсуждение на OpenNet, где затрагиваются вопросы сравнения AoE и iSCSI
   1.425 +\end{itemize}
   1.426 +
   1.427 +
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/bridge.tex	Tue Jul 01 16:16:44 2008 +0300
     2.3 @@ -0,0 +1,563 @@
     2.4 +\section{Программный мост в Linux}
     2.5 +
     2.6 +\textbf{Бридж} (англ. \textit{bridge}, мост) — это способ соединения двух сегментов Ethernet на канальном уровне, т.е. без использования протоколов более высокого уровня, таких как IP. Пакеты передаются на основе Ethernet-адресов, а не IP-адресов (как в маршрутизаторе). Поскольку передача выполняется на канальном уровне (уровень 2 модели OSI), все протоколы более высокого уровня прозрачно проходят через мост.
     2.7 +
     2.8 +Термины коммутатор, мост и бридж могут использоваться на данной странице как взаимознаменяемые.
     2.9 +
    2.10 +Код bridge в Linux является частичной реализацией стандарта  \htmladdnormallinkfoot{ANSI/IEEE 802.1d}{http://standards.ieee.org/getieee802/}.
    2.11 +Впервые бриджинг в Linux появился в 2.2, затем код был переписан
    2.12 +Леннертом Буйтенхеком (Lennert Buytenhek).
    2.13 +Код bridge интегрирован в ядра серий 2.4 и 2.6.
    2.14 +
    2.15 +\subsection{Коммутация и фильтрация}
    2.16 +Linux-мосты более мощные чем простые аппаратные мосты и коммутаторы,
    2.17 +поскольку они могут ещё фильтровать и регулировать трафик.
    2.18 +Комбинация коммутатора и брандмауэра выполняется с помощью
    2.19 +родственного проекта
    2.20 +ebtables.
    2.21 +
    2.22 +\subsection{Состояние}
    2.23 +Код обновляется как часть ядра Linux 2.4 и 2.6, доступного на kernel.org.
    2.24 +
    2.25 +Возможные будущие усовершенствования:
    2.26 +\begin{itemize}
    2.27 +\item  Описать фильтрацию STP
    2.28 +\item  Использовать Netlink interface для управление бриджами (прототип в 2.6.18)
    2.29 +\item  Добавить поддержку в user space
    2.30 +\item  Сделать поддержку RSTP и других расширений 802.1d STP
    2.31 +\end{itemize}
    2.32 +
    2.33 +\subsection{Скачивание}
    2.34 +Поддержка бриджинга есть в текущих ядрах 2.4 и 2.6
    2.35 +всех основных дистрибутивов Linux. Требуемый комплект утилит для администрирования 
    2.36 +\textit{bridge-utils} есть практически во всех дистрибутивах.
    2.37 +
    2.38 +Инсталляция утилит выполняется стандартным для дистрибутива способом.
    2.39 +Например, в Debian GNU/Linux:
    2.40 +\begin{verbatim}
    2.41 + # apt-get install bridge-utils
    2.42 +\end{verbatim}
    2.43 +
    2.44 +Исходный код последнего релиза утилит можно получить со \htmladdnormallinkfoot{этой}{http://sourceforge.net/project/showfiles.php?group\_id=26089} страницы.
    2.45 +
    2.46 +Как вариант можно сделать свою самую последнюю сборку кода 
    2.47 +с kernel.org
    2.48 +и собрать утилиты bridge-utils из GIT-репозитория.
    2.49 +
    2.50 +\begin{verbatim}
    2.51 + $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git
    2.52 + $ cd bridge-utils
    2.53 + $ autoconf
    2.54 + $ ./configure
    2.55 +\end{verbatim}
    2.56 +
    2.57 +\subsection{Ручная конфигурация}
    2.58 +\subsubsection{Сетевые карты}
    2.59 +Перед тем как вы приступите к настройке коммутатора, убедитесь, 
    2.60 +что сетевые карты работают нормально.
    2.61 +Не устанавливайте на них IP-адресов, и не позволяйте начальным скриптам
    2.62 +выполнять DHCP-запрос с них.
    2.63 +IP-адреса должны устанавливаться уже после того как бридж сконфигурирован.
    2.64 +
    2.65 +Команда ifconfig должна показывать обе (или больше, если их больше) сетевые карты, и они должны быть выключены, т.е. находиться в состоянии DOWN
    2.66 +(это на момент начала настройки, дальше они будут переведены в UP).
    2.67 +
    2.68 +\subsubsection{Загрузка модуля}
    2.69 +В большинстве случаев код коммутатора оформляется в виде модуля.
    2.70 +Если модуль сконфигурирован и установлен корректно,
    2.71 +он автоматически загружается при первом вызове команды \textbf{brctl}.
    2.72 +
    2.73 +Если ваши утилиты bridge-utilities корректно установлены,
    2.74 +и ядро и его модуль bridge в порядке, вызовом команды \textbf{brctl}
    2.75 +можно будет просмотреть маленькую сводку о синтаксисе команды:
    2.76 +\begin{verbatim}
    2.77 +# brctl
    2.78 +# commands:
    2.79 +    addbr           <bridge>                add bridge
    2.80 +    delbr           <bridge>                delete bridge
    2.81 +    addif           <bridge> <device>       add interface to bridge
    2.82 +    delif           <bridge> <device>       delete interface from bridge
    2.83 +    setageing       <bridge> <time>         set ageing time
    2.84 +    setbridgeprio   <bridge> <prio>         set bridge priority
    2.85 +    setfd           <bridge> <time>         set bridge forward delay
    2.86 +    sethello        <bridge> <time>         set hello time
    2.87 +    setmaxage       <bridge> <time>         set max message age
    2.88 +    setpathcost     <bridge> <port> <cost>  set path cost
    2.89 +    setportprio     <bridge> <port> <prio>  set port priority
    2.90 +    show                                    show a list of bridges
    2.91 +    showmacs        <bridge>                show a list of mac addrs
    2.92 +    showstp         <bridge>                show bridge stp info
    2.93 +    stp             <bridge> <state>        turn stp on/off
    2.94 +\end{verbatim}
    2.95 +
    2.96 +\subsubsection{Создание и удаление коммутатора}
    2.97 +Команда
    2.98 +\begin{verbatim}
    2.99 + brctl addbr bridgename
   2.100 +\end{verbatim}
   2.101 +
   2.102 +создаёт экземпляр логического коммутатора с именем \textit{bridgename}.
   2.103 +Для того чтобы выполнять коммутацию пакетов, нужно создать хотя бы один коммутатор .
   2.104 +Можно воспринимать логический бридж как контейнер интерфейсов, 
   2.105 +принимающих участие в коммутации.
   2.106 +Каждый экземпляр коммутатора представлен новым сетевым интерфейсом.
   2.107 +
   2.108 +Соответствующая команда для удаления коммутатора:
   2.109 +\begin{verbatim}
   2.110 + brctl delbr bridgename
   2.111 +\end{verbatim}
   2.112 +
   2.113 +\subsubsection{Включение устройства в коммутатор}
   2.114 +Команда
   2.115 +\begin{verbatim}
   2.116 + brctl addif bridgename device
   2.117 +\end{verbatim}
   2.118 +\noindent включает сетевое устройство \textit{device}
   2.119 +в коммутатор с именем \textit{bridgename}.
   2.120 +Все устройства, включенные в один бридж работают как одна большая сеть.
   2.121 +Нельзя добавить устройство в несколько бриджей одновременно, 
   2.122 +поскольку это не имеет никакого смысла.
   2.123 +Коммутатору потребуется небольшое время после того как устройство
   2.124 +подключено, для того чтобы узнать его Ethernet-адрес, а затем
   2.125 +он начинает делать перенаправление (forward).
   2.126 +
   2.127 +Соответствующая команда для выключения устройства из коммутатора:
   2.128 +\begin{verbatim}
   2.129 + brctl delif  bridgename device
   2.130 +\end{verbatim}
   2.131 +
   2.132 +\subsubsection{Просмотр устройств}
   2.133 +Команда \textbf{brctl} \verb|show| показывает состояние всех работающих коммутаторов:
   2.134 +\begin{verbatim}
   2.135 + # brctl addbr br549
   2.136 + # brctl addif br549 eth0
   2.137 + # brctl addif br549 eth1
   2.138 + # brctl show
   2.139 + bridge name     bridge id               STP enabled     interfaces
   2.140 + br549           8000.00004c9f0bd2       no              eth0
   2.141 +                                                         eth1
   2.142 +\end{verbatim}
   2.143 +Если выполнить команду \textbf{brctl} \verb|showmacs|,
   2.144 +будет показана информация о сетевых адресах 
   2.145 +источников трафика, прошедшего через коммутатор
   2.146 +(и самого коммутатора тоже):
   2.147 +
   2.148 +\begin{verbatim}
   2.149 + # brctl showmacs br549
   2.150 + port no mac addr                is local?       ageing timer
   2.151 +   1     00:00:4c:9f:0b:ae       no                17.84
   2.152 +   1     00:00:4c:9f:0b:d2       yes                0.00
   2.153 +   2     00:00:4c:9f:0b:d3       yes                0.00
   2.154 +   1     00:02:55:1a:35:09       no                53.84
   2.155 +   1     00:02:55:1a:82:87       no                11.53
   2.156 +  ...
   2.157 +\end{verbatim}
   2.158 +
   2.159 +Время жизни (aging time) -- это количество секунд, которое
   2.160 +MAC-адрес будет находится в таблице forwarding database
   2.161 +после получения пакета с этим адресом.
   2.162 +Записи в таблице периодически удаляются по тайм-ауту,
   2.163 +для того чтобы не получилось, что они будут находиться там вечно.
   2.164 +В нормальной ситуации, не понадобится менять данные параметры,
   2.165 +но это сделать можно (время указывается в секундах)
   2.166 +
   2.167 +\begin{verbatim}
   2.168 +  # brctl setageing ''bridgename'' ''time''
   2.169 +\end{verbatim}
   2.170 +
   2.171 +Если установить время в ноль, запись становится постоянной.
   2.172 +
   2.173 +\subsubsection{Spanning Tree Protocol}
   2.174 +Если используется несколько коммутаторов, для того чтобы избежать петель коммутации, нужно включить поддержку протокола
   2.175 +Spanning Tree Protocol (Протокол остовного дерева).
   2.176 +
   2.177 +\begin{verbatim}
   2.178 + # brctl stp br549 on
   2.179 +\end{verbatim}
   2.180 +
   2.181 +Посмотреть параметры STP можно так:
   2.182 +
   2.183 +\begin{verbatim}
   2.184 + # brctl showstp br549
   2.185 + br549
   2.186 +  bridge id              8000.00004c9f0bd2
   2.187 +  designated root        0000.000480295a00
   2.188 +  root port                 1                    path cost                104
   2.189 +  max age                  20.00                 bridge max age           200.00
   2.190 +  hello time                2.00                 bridge hello time         20.00
   2.191 +  forward delay           150.00                 bridge forward delay      15.00
   2.192 +  ageing time             300.00                 gc interval                0.00
   2.193 +  hello timer               0.00                 tcn timer                  0.00
   2.194 +  topology change timer     0.00                 gc timer                   0.33
   2.195 +  flags
   2.196 + 
   2.197 + eth0 (1)
   2.198 +  port id                8001                    state                   forwarding
   2.199 +  designated root        0000.000480295a00       path cost                100
   2.200 +  designated bridge      001e.00048026b901       message age timer         17.84
   2.201 +  designated port        80c1                    forward delay timer        0.00
   2.202 +  designated cost           4                    hold timer                 0.00
   2.203 +  flags
   2.204 + 
   2.205 + eth1 (2)
   2.206 +  port id                8002                    state                   disabled
   2.207 +  designated root        8000.00004c9f0bd2       path cost                100
   2.208 +  designated bridge      8000.00004c9f0bd2       message age timer          0.00
   2.209 +  designated port        8002                    forward delay timer        0.00
   2.210 +  designated cost           0                    hold timer                 0.00
   2.211 +  flags
   2.212 +\end{verbatim}
   2.213 +
   2.214 +\paragraph{Настройка STP}
   2.215 +Конфигурироваться может несколько параметров, имеющих  отношение к Spanning Tree Protocol.
   2.216 +Код автоматически определяет скорость соединения и другие параметры, 
   2.217 +поэтому, как правило, вручную их менять не нужно.
   2.218 +
   2.219 +\paragraph{Приоритет коммутатора}
   2.220 +У каждого коммутатора есть относительный приоритет (priority) и стоимость (cost).
   2.221 +Каждый интерфейс коммутатора ассоциируется с номером порта в коде STP. У каждого есть приоритет и стоимость, на основе которых принимается решение о том, какой путь для передчи пакета является кратчайшим. Всегда используется путь с наимеьшей стоимостью (за исключением случая, когда этот путь разорван).
   2.222 +Если у вас несколько коммутаторов и интерфейсов,
   2.223 +может понадобиться отрегулировать приоритеты, чтобы достичь максимальной
   2.224 +производительности.
   2.225 +
   2.226 +\begin{verbatim}
   2.227 +  # brctl setbridgeprio ''bridgename'' ''priority''
   2.228 +\end{verbatim}
   2.229 +
   2.230 +Бридж с наименьшим приоритетом избирается как \textit{корневой}. 
   2.231 +Корневой бридж является центром остовного дерева (spanning tree) 
   2.232 +коммутационных связей.
   2.233 +
   2.234 +\paragraph{Приоритет и стоимость}
   2.235 +У каждого интерфейса моста может быть своя собственная скорость, и её значение
   2.236 +используется при выборе какое соединение должно использоваться.
   2.237 +У более быстрых интерфейсов должна быть более низкая стоимость.
   2.238 +
   2.239 +\begin{verbatim}
   2.240 + # brctl ''setpathcost bridge port cost''
   2.241 +\end{verbatim}
   2.242 +
   2.243 +Для разных портов, имеющих одинаковую стоимость
   2.244 +существует ещё \textit{приоритет}.
   2.245 +
   2.246 +\paragraph{Задержка передачи (Forwarding delay)}
   2.247 +Задержка передачи (forwarding delay) это время
   2.248 +в течение которого порт находится в состояниях
   2.249 +Listening и Learning, прежде чем перейти в состояние Forwarding.
   2.250 +Это время нужно для того чтобы мост, когда он включается в
   2.251 +сеть, сначала должен ознакомиться с трафиком, прежде чем включаться
   2.252 +в работу.
   2.253 +
   2.254 +\begin{verbatim}
   2.255 + #  brctl setfd ''bridgename'' ''time''
   2.256 +\end{verbatim}
   2.257 +
   2.258 +\paragraph{Время Hello}
   2.259 +Время от времени 
   2.260 +корневой мост (Root Bridge)
   2.261 +и выделенные мосты (Designated Bridges)
   2.262 +отправляют пакет \textit{hello}. 
   2.263 +Пакеты hello нужны для обмена информацией
   2.264 +о топологии все коммутироемой локальной сети.
   2.265 +
   2.266 +\begin{verbatim}
   2.267 + # brctl sethello ''bridgename'' ''time''
   2.268 +\end{verbatim}
   2.269 +
   2.270 +\paragraph{max age -- таймаут hello}
   2.271 +Если другой коммутатор в дереве spanning tree не отправляет пакет hello 
   2.272 +в течение долгого времени, считается, что он не в порядке (dead).
   2.273 +Таймаут устанавливается командой:
   2.274 +\begin{verbatim}
   2.275 + # brctl maxage  ''bridgename'' ''time''
   2.276 +\end{verbatim}
   2.277 +
   2.278 +\subsubsection{Пример настройки}
   2.279 +Базовая настройка моста выполняется так:
   2.280 +
   2.281 +\begin{verbatim}
   2.282 + # ifconfig eth0 0.0.0.0
   2.283 + # ifconfig eth1 0.0.0.0
   2.284 + # brctl addbr mybridge
   2.285 + # brctl addif mybridge eth0
   2.286 + # brctl addif mybridge eth1 
   2.287 + # ifconfig mybridge up
   2.288 +\end{verbatim}
   2.289 +
   2.290 +Хост настраивается как обычный мост.
   2.291 +У него самого нет IP-адреса, поэтому к нему 
   2.292 +нельзя получить доступ (ил