<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - TZ/RazrabotkaNuzhnyxProgramm/ClusterManager</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager</link>
<description>History/revisions of FreeSource/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager</description>
<language>en-us</language>
<item>
<title>2008-07-29 13:51:38</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2008-07-29+13%3A51%3A38</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".tz.razrabotkanuzhnyxprogramm.clustermanager" href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2008-07-29+13%3A51%3A38">2008-07-29 13:51:38&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager">2008-11-12 19:17:25&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="action" style="float:right; width:250px">&lt;div class="action-content">Эта&amp;nbsp;страница была перенесена на&amp;nbsp;&lt;a href="http://altlinux.org/Cluster_Manager" target="_blank" title="" class="outerlink">altlinux.org&lt;/a>. Текст на&amp;nbsp;freesource.info заморожен.&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-28 13:56:34</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-28+13%3A56%3A34</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-28+13%3A56%3A34">2007-09-28 13:56:34&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2008-07-29+13%3A51%3A38">2008-07-29 13:51:38&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="action" style="float:right; width:250px">&lt;div class="action-content">Эта&amp;nbsp;страница была перенесена на&amp;nbsp;&lt;a href="http://altlinux.org/Cluster_Manager" target="_blank" title="" class="outerlink">altlinux.org&lt;/a>. Текст на&amp;nbsp;freesource.info заморожен.&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-21 15:21:14</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-21+15%3A21%3A14</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-21+15%3A21%3A14">2007-09-21 15:21:14&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-28+13%3A56%3A34">2007-09-28 13:56:34&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;!--notypo-->{{backlinks}}&lt;!--/notypo-->&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-21 15:18:33</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-21+15%3A18%3A33</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-21+15%3A18%3A33">2007-09-21 15:18:33&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-21+15%3A21%3A14">2007-09-21 15:21:14&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Перед переходом из&amp;nbsp;одного состояния в&amp;nbsp;другое должен вызываться определенный пользователем скрипт, принимающий в&amp;nbsp;качестве параметров старое и&amp;nbsp;новое состояние. Если скрипт вернул значение, отличное от&amp;nbsp;0, необходимо перевести узел в&amp;nbsp;состояние ERROR. Изменение состояния узла должно протоколироваться.&lt;br />
Может быть полезен специальный механизм мониторинга корректности функционирования сервисов узла в&amp;nbsp;составе менеджера кластера (как это&amp;nbsp;сделано в&amp;nbsp;HAD) в&amp;nbsp;виде периодически вызываемого пользовательского скрипта &amp;ndash; если скрипт вернул значение, отличное от&amp;nbsp;0, необходимо также перевести узел в&amp;nbsp;состояние ERROR и&amp;nbsp;запротоколировать это&amp;nbsp;событие.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Перед переходом из&amp;nbsp;одного состояния в&amp;nbsp;другое должен вызываться определенный пользователем скрипт, принимающий в&amp;nbsp;качестве параметров старое и&amp;nbsp;новое состояние. Если скрипт вернул значение, отличное от&amp;nbsp;0, необходимо перевести узел в&amp;nbsp;состояние ERROR.&lt;br />
Может быть полезен специальный механизм мониторинга корректности функционирования сервисов узла в&amp;nbsp;составе менеджера кластера (как это&amp;nbsp;сделано в&amp;nbsp;HAD) в&amp;nbsp;виде периодически вызываемого пользовательского скрипта &amp;ndash; если скрипт вернул значение, отличное от&amp;nbsp;0, необходимо также перевести узел в&amp;nbsp;состояние ERROR.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-19 16:15:09</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-19+16%3A15%3A09</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+16%3A15%3A09">2007-09-19 16:15:09&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-21+15%3A18%3A33">2007-09-21 15:18:33&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Менеджер кластера должен выполнять следующие операции (реализовать связанные с&amp;nbsp;&lt;span class="missingpage">I&amp;nbsp;/&amp;nbsp;O&lt;/span>&lt;a href="http://freesource.info/wiki/I/O/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> с&amp;nbsp;помощью &lt;a href="http://monkey.org/~provos/libevent/" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />http://monkey.org/~provos/libevent/&lt;/a> ?):&lt;br />
&lt;ul>&lt;li> Отправлять UDP-пакеты c&amp;nbsp;текущим состоянием узла
&lt;/li>&lt;li> Принимать UDP-пакеты, сохранять последний пакет
&lt;/li>&lt;li> Реагировать на&amp;nbsp;сигнал TERM, сохранять информацию о&amp;nbsp;полученном сигнале&lt;/li>&lt;/ul>
||Timeout (последний UDP-пакет был&amp;nbsp;получен более чем&amp;nbsp;T&amp;nbsp;секунд назад)|STANDALONE|STANDALONE|STANDALONE|SAME|SAME||&lt;br />
Выше для&amp;nbsp;простоты предполагалось, что&amp;nbsp;между узлами кластера имеется только один линк, однако для&amp;nbsp;надежного определения отказа соседнего узла необходимо иметь как&amp;nbsp;минимум 2 линка на&amp;nbsp;случай отказа самого линка. В&amp;nbsp;этом случае состояние соседнего узла предлагается определять так: учитывать только последние UDP-пакеты с&amp;nbsp;тех узлов, которые пришли не&amp;nbsp;позже, чем&amp;nbsp;T&amp;nbsp;секунд назад, и&amp;nbsp;только в&amp;nbsp;случае отсутствия таковых считать, что&amp;nbsp;соседний узел действительно отказал. Если состояния разные, то&amp;nbsp;возможны различные стратегии: всегда переводить узел в&amp;nbsp;состояние ERROR, определять приоритеты линков и&amp;nbsp;учитывать только состояние того линка из&amp;nbsp;оставшихся в&amp;nbsp;живых, чей&amp;nbsp;приоритет выше, и&amp;nbsp;т.д. В&amp;nbsp;любом случае необходимо протоколировать отказы линков (и вызывать соответствующий скрипт, передавая ему&amp;nbsp;в&amp;nbsp;качестве параметра имя&amp;nbsp;линка) точно так&amp;nbsp;же, как&amp;nbsp;и&amp;nbsp;изменение состояния узла.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Менеджер кластера должен параллельно выполнять следующие операции (реализовать в&amp;nbsp;виде threads?):&lt;br />
&lt;ul>&lt;li> Отправлять UDP-пакеты, читая текущее состояние узла из&amp;nbsp;глобальной переменной
&lt;/li>&lt;li> Принимать UDP-пакеты, сохраняя последний пакет в&amp;nbsp;глобальную переменную
&lt;/li>&lt;li> Реагировать на&amp;nbsp;сигнал TERM, сохраняя информацию о&amp;nbsp;полученном сигнале в&amp;nbsp;глобальную переменную&lt;/li>&lt;/ul>
||Timeout|STANDALONE|STANDALONE|STANDALONE|SAME|SAME||&lt;br />
Выше предполагалось, что&amp;nbsp;между узлами кластера имеется только один линк, однако оба&amp;nbsp;узла смотрят еще&amp;nbsp;и&amp;nbsp;во внешнюю сеть, которую тоже можно использовать для&amp;nbsp;коммуникации между узлами. Это&amp;nbsp;может быть полезным, если внутрикластерное соединение по&amp;nbsp;каким-либо причинам перестанет работать, и&amp;nbsp;оба узла перейдут в&amp;nbsp;состояние STANDALONE. Но&amp;nbsp;в этом случае появится новая проблема: какому линку доверять больше, если показания разойдутся? Возможный способ решения проблемы: всю&amp;nbsp;внешнюю информацию, кроме Timeout, анализировать только для&amp;nbsp;одного доверенного линка (но сравнивать с&amp;nbsp;другими и&amp;nbsp;просто предупреждать, если есть разница в&amp;nbsp;показаниях &amp;ndash; а&amp;nbsp;при падении этого линка передавать статус доверенного следующему &amp;ndash; это&amp;nbsp;должно настраиваться), Timeout же&amp;nbsp;считать достоверным только если все&amp;nbsp;линки в&amp;nbsp;этом сойдутся.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-19 15:14:07</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-19+15%3A14%3A07</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+15%3A14%3A07">2007-09-19 15:14:07&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+16%3A15%3A09">2007-09-19 16:15:09&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Может быть полезен специальный механизм мониторинга корректности функционирования сервисов узла в&amp;nbsp;составе менеджера кластера (как это&amp;nbsp;сделано в&amp;nbsp;HAD) в&amp;nbsp;виде периодически вызываемого пользовательского скрипта &amp;ndash; если скрипт вернул значение, отличное от&amp;nbsp;0, необходимо также перевести узел в&amp;nbsp;состояние ERROR.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Я&amp;nbsp;не вижу необходимости в&amp;nbsp;специальном механизме мониторинга корректности функционирования сервисов узла в&amp;nbsp;составе менеджера кластера (как это&amp;nbsp;сделано в&amp;nbsp;HAD). Этот механизм может быть внешним скриптом (или вообще monit задействовать), который будет по&amp;nbsp;возможности не&amp;nbsp;рапортовать о&amp;nbsp;проблемах, а&amp;nbsp;пытаться их&amp;nbsp;устранить (перезапустить умершие сервисы), а&amp;nbsp;если это&amp;nbsp;совсем никак невозможно &amp;ndash; отправлять менеджеру кластера сигнал TERM или&amp;nbsp;вообще останавливать узел.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-19 14:26:38</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-19+14%3A26%3A38</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+14%3A26%3A38">2007-09-19 14:26:38&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+15%3A14%3A07">2007-09-19 15:14:07&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Требуется разработать простой менеджер кластера, состоящего из&amp;nbsp;2-х узлов и&amp;nbsp;работающего в&amp;nbsp;режиме &lt;span class="missingpage">Active&amp;nbsp;/&amp;nbsp;Passive&lt;/span>&lt;a href="http://freesource.info/wiki/Active/Passive/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> (т.е. в&amp;nbsp;любой момент времени работает только один узел, второй простаивает, ожидая отказа первого). Типичные сценарии использования можно найти здесь &amp;ndash; &lt;a href="http://git.altlinux.ru/people/enp/packages/docs-linux_ha_openvz-enp.git" target="_blank" title="Внешняя ссылка (откроется в новом окне)" class="outerlink">&lt;img src="http://freesource.info/wiki/themes/coffee/icons/web.gif" alt="" border="0" />http://git.altlinux.ru/people/enp/packages/docs-linux_ha_openvz-enp.git&lt;/a> (пока в&amp;nbsp;&lt;span class="missingpage">Te&amp;nbsp;X&lt;/span>&lt;a href="http://freesource.info/wiki/TeX/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>, как&amp;nbsp;только в&amp;nbsp;Сизифе появится tex4ht, на&amp;nbsp;heap.altlinux.ru автоматически появится html), еще&amp;nbsp;можно заглянуть сюда &amp;ndash; &lt;a name=".software.highavailability" href="http://freesource.info/wiki/Software/HighAvailability&amp;" class="">/Software&amp;nbsp;/&amp;nbsp;High&amp;nbsp;Availability&lt;/a>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Требуется разработать простой менеджер кластера, состоящего из&amp;nbsp;2-х узлов и&amp;nbsp;работающего в&amp;nbsp;режиме &lt;span class="missingpage">Active&amp;nbsp;/&amp;nbsp;Passive&lt;/span>&lt;a href="http://freesource.info/wiki/Active/Passive/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a> (т.е. в&amp;nbsp;любой момент времени работает только один узел, второй простаивает, ожидая отказа первого). Типичные сценарии использования:&lt;br />
&lt;ul>&lt;li> ХХХ&amp;nbsp;(вместо Heartbeat)
&lt;/li>&lt;li> ХХХ&amp;nbsp;(вместо HAD)&lt;/li>&lt;/ul>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-19 12:05:19</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-19+12%3A05%3A19</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+12%3A05%3A19">2007-09-19 12:05:19&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+14%3A26%3A38">2007-09-19 14:26:38&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ul>&lt;li> Реагировать на&amp;nbsp;сигнал TERM, сохраняя информацию о&amp;nbsp;полученном сигнале в&amp;nbsp;глобальную переменную&lt;/li>&lt;/ul>
Далее приведена таблица изменения состояний: по&amp;nbsp;горизонтали &amp;ndash; первоначальное состояние, по&amp;nbsp;вертикали &amp;ndash; внешняя информация (последний пришедший UDP-пакет, таймаут либо сигнал), на&amp;nbsp;пересечении &amp;ndash; новое состояние. Соответственно, ссылки на&amp;nbsp;ячейки по&amp;nbsp;именам выглядят как&amp;nbsp;HORIZONTAL/VERTICAL.&lt;br />
Внешняя информация|CONNECTING|PRIMARY|SECONDARY|STANDALONE|ERROR||
||CONNECTING|Выполняется лексикографическое сравнение hostname: если наш&amp;nbsp;узел больше, то&amp;nbsp;PRIMARY, если меньше, то&amp;nbsp;ничего не&amp;nbsp;делать, а&amp;nbsp;подождать пакета PRIMARY и&amp;nbsp;действовать как&amp;nbsp;описано в&amp;nbsp;ячейке CONNECTING/PRIMARY|SAME|ERROR или&amp;nbsp;SECONDARY|PRIMARY|SAME||
||PRIMARY|SECONDARY|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname: если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY|SAME|ERROR или&amp;nbsp;SECONDARY|SAME||
||SECONDARY|ERROR или&amp;nbsp;PRIMARY|SAME|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname: если наш&amp;nbsp;узел больше, то&amp;nbsp;PRIMARY|ERROR или&amp;nbsp;PRIMARY|SAME||
||STANDALONE|SAME (можно ничего не&amp;nbsp;делать, а&amp;nbsp;подождать, пока STANDALONE не&amp;nbsp;станет PRIMARY, а&amp;nbsp;тогда действовать как&amp;nbsp;описано в&amp;nbsp;ячейке CONNECTING/PRIMARY)|ERROR или&amp;nbsp;SAME|ERROR или&amp;nbsp;SECONDARY|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname: если наш&amp;nbsp;узел больше, то&amp;nbsp;PRIMARY, если меньше, то&amp;nbsp;можно ничего не&amp;nbsp;делать, а&amp;nbsp;подождать, пока STANDALONE не&amp;nbsp;станет PRIMARY, а&amp;nbsp;тогда действовать как&amp;nbsp;описано в&amp;nbsp;ячейке CONNECTING/PRIMARY|SAME||
||ERROR|PRIMARY|SAME|STANDALONE|SAME|SAME||
||Timeout|STANDALONE|STANDALONE|STANDALONE|SAME|SAME||
||TERM|Завершение работы|SECONDARY и&amp;nbsp;завершение работы|Завершение работы|Завершение работы|Завершение работы||&lt;br />
Для&amp;nbsp;выбора нового состояния в&amp;nbsp;ячейках используется принцип наименьшего количества изменений, т.е. если узел уже&amp;nbsp;находится в&amp;nbsp;состоянии PRIMARY, то, если есть такая возможность, именно в&amp;nbsp;этом состоянии его&amp;nbsp;и&amp;nbsp;следует оставить (именно это&amp;nbsp;означает SAME или&amp;nbsp;пояснение &amp;laquo;ничего не&amp;nbsp;делать, а&amp;nbsp;подождать ...&amp;raquo;).&lt;br />
Если в&amp;nbsp;ячейке описаны 2 варианта поведения [ ... или&amp;nbsp;... ], выбор варианта зависит от&amp;nbsp;одного из&amp;nbsp;двух возможных режимов работы менеджера кластера: пытаться автоматически разрешить неправильные ситуации или&amp;nbsp;просто переводить узел в&amp;nbsp;в состояние ERROR. Если hostname узлов оказываются лексикографически равны, то&amp;nbsp;узел необходимо переводить в&amp;nbsp;состояние ERROR независимо от&amp;nbsp;режима работы.&lt;br />
Перед переходом из&amp;nbsp;одного состояния в&amp;nbsp;другое должен вызываться определенный пользователем скрипт, принимающий в&amp;nbsp;качестве параметров старое и&amp;nbsp;новое состояние. Если скрипт вернул значение, отличное от&amp;nbsp;0, необходимо перевести узел в&amp;nbsp;состояние ERROR.&lt;br />
Я&amp;nbsp;не вижу необходимости в&amp;nbsp;специальном механизме мониторинга корректности функционирования сервисов узла в&amp;nbsp;составе менеджера кластера (как это&amp;nbsp;сделано в&amp;nbsp;HAD). Этот механизм может быть внешним скриптом (или вообще monit задействовать), который будет по&amp;nbsp;возможности не&amp;nbsp;рапортовать о&amp;nbsp;проблемах, а&amp;nbsp;пытаться их&amp;nbsp;устранить (перезапустить умершие сервисы), а&amp;nbsp;если это&amp;nbsp;совсем никак невозможно &amp;ndash; отправлять менеджеру кластера сигнал TERM или&amp;nbsp;вообще останавливать узел.&lt;br />
Выше предполагалось, что&amp;nbsp;между узлами кластера имеется только один линк, однако оба&amp;nbsp;узла смотрят еще&amp;nbsp;и&amp;nbsp;во внешнюю сеть, которую тоже можно использовать для&amp;nbsp;коммуникации между узлами. Это&amp;nbsp;может быть полезным, если внутрикластерное соединение по&amp;nbsp;каким-либо причинам перестанет работать, и&amp;nbsp;оба узла перейдут в&amp;nbsp;состояние STANDALONE. Но&amp;nbsp;в этом случае появится новая проблема: какому линку доверять больше, если показания разойдутся? Возможный способ решения проблемы: всю&amp;nbsp;внешнюю информацию, кроме Timeout, анализировать только для&amp;nbsp;одного доверенного линка (но сравнивать с&amp;nbsp;другими и&amp;nbsp;просто предупреждать, если есть разница в&amp;nbsp;показаниях &amp;ndash; а&amp;nbsp;при падении этого линка передавать статус доверенного следующему &amp;ndash; это&amp;nbsp;должно настраиваться), Timeout же&amp;nbsp;считать достоверным только если все&amp;nbsp;линки в&amp;nbsp;этом сойдутся.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ul>&lt;li> Реагировать на&amp;nbsp;сигналы TERM и&amp;nbsp;HUP, сохраняя информацию о&amp;nbsp;полученном сигнале в&amp;nbsp;глобальную переменную&lt;/li>&lt;/ul>
Далее приведена таблица изменения состояний: по&amp;nbsp;горизонтали &amp;ndash; первоначальное состояние, по&amp;nbsp;вертикали &amp;ndash; внешняя информация (последний пришедший UDP-пакет, таймаут либо сигнал), на&amp;nbsp;пересечении &amp;ndash; новое состояние&lt;br />
Внешняя информация|CONNECTING|PRIMARY|SECONDARY|STANDALONE||
||UDP-пакеты||
||CONNECTING|Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел больше, то&amp;nbsp;PRIMARY|SAME|PRIMARY|PRIMARY||
||PRIMARY|SECONDARY|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY|SAME|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY, иначе PRIMARY||
||SECONDARY|-|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY|SAME|ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY, иначе PRIMARY||&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-09-19 10:32:27</title>
<link>http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager/show?time=2007-09-19+10%3A32%3A27</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager&amp;" class="">/TZ&amp;nbsp;/&amp;nbsp;Razrabotka&amp;nbsp;Nuzhnyx&amp;nbsp;Programm&amp;nbsp;/&amp;nbsp;Cluster&amp;nbsp;Manager&lt;/a> за &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+10%3A32%3A27">2007-09-19 10:32:27&lt;/a> и &lt;a href="http://freesource.info/wiki/TZ/RazrabotkaNuzhnyxProgramm/ClusterManager?time=2007-09-19+12%3A05%3A19">2007-09-19 12:05:19&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Узлы обмениваются UDP-пакетами, в&amp;nbsp;которых содержится hostname, timestamp и&amp;nbsp;текущее состояние узла. Шифровать пакеты не&amp;nbsp;обязательно, т.к. под&amp;nbsp;внутрикластерное соединение принято отводить отдельную сеть.&lt;br />
Менеджер кластера должен параллельно выполнять следующие операции (реализовать в&amp;nbsp;виде threads?):&lt;br />
&lt;ul>&lt;li> Отправлять UDP-пакеты, читая текущее состояние узла из&amp;nbsp;глобальной переменной
&lt;/li>&lt;li> Принимать UDP-пакеты, сохраняя последний пакет в&amp;nbsp;глобальную переменную
&lt;/li>&lt;li> Реагировать на&amp;nbsp;сигналы TERM и&amp;nbsp;HUP, сохраняя информацию о&amp;nbsp;полученном сигнале в&amp;nbsp;глобальную переменную
&lt;/li>&lt;li> Анализировать содержимое последнего принятого UDP-пакета и&amp;nbsp;информацию о&amp;nbsp;полученных сигналах, на&amp;nbsp;основании чего изменять состояние узла (в т.ч. завершать работу)&lt;/li>&lt;/ul>
Далее приведена таблица изменения состояний: по&amp;nbsp;горизонтали &amp;ndash; первоначальное состояние, по&amp;nbsp;вертикали &amp;ndash; внешняя информация (последний пришедший UDP-пакет, таймаут либо сигнал), на&amp;nbsp;пересечении &amp;ndash; новое состояние&lt;br />
&lt;table class="usertable" border="1">
&lt;tr class="userrow">&lt;td class="usercell">Первоначальное состояние / &lt;br />
Внешняя информация&lt;/td>&lt;td class="usercell">CONNECTING&lt;/td>&lt;td class="usercell">PRIMARY&lt;/td>&lt;td class="usercell">SECONDARY&lt;/td>&lt;td  class="usercell">STANDALONE&lt;/td>&lt;/tr>
&lt;tr class="userrow">&lt;td class="usercell" colspan="5">UDP-пакеты&lt;/td>&lt;/tr>
&lt;tr class="userrow">&lt;td class="usercell">CONNECTING&lt;/td>&lt;td class="usercell">Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел больше, то&amp;nbsp;PRIMARY&lt;/td>&lt;td class="usercell">SAME&lt;/td>&lt;td class="usercell">PRIMARY&lt;/td>&lt;td  class="usercell">PRIMARY&lt;/td>&lt;/tr>
&lt;tr class="userrow">&lt;td class="usercell">PRIMARY&lt;/td>&lt;td class="usercell">SECONDARY&lt;/td>&lt;td class="usercell">ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY&lt;/td>&lt;td class="usercell">SAME&lt;/td>&lt;td  class="usercell">ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY, иначе PRIMARY&lt;/td>&lt;/tr>
&lt;tr class="userrow">&lt;td class="usercell">SECONDARY&lt;/td>&lt;td class="usercell">-&lt;/td>&lt;td class="usercell">ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY&lt;/td>&lt;td class="usercell">SAME&lt;/td>&lt;td  class="usercell">ERROR или&amp;nbsp;Выполняется лексикографическое сравнение hostname, если наш&amp;nbsp;узел меньше, то&amp;nbsp;SECONDARY, иначе PRIMARY&lt;/td>&lt;/tr>
&lt;/table>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
