Файл: Федеральное государственное автономное образовательное учреждение высшего образования казанский (приволжский) федеральный университет высшая школа информационных технологий и информационных систем.docx

ВУЗ: Не указан

Категория: Реферат

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 96

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Содержание

Введение.

Обзорная часть В обзорно-аналитической главе будет проведен обзор предметной области, рассмотрены аналоги системы, их преимущества и недостатки. 1.1 История. Изначально кластерные технологии использовались при развертывании компьютерных сетей. Немалую роль в появлении высокоскоростной передачи между компьютерами имела возможность объединения вычислительных ресурсов. Лаборатория Xerox PARC вместе с группой разработчиков протокола TCP/IP разработали и закрепили стандарты сетевого взаимодействия уже в начале 1970-ых годов. Была разработана операционная система Hydra («Гидра»), которая работала на компьютерах PDP-11, которые выпускала компания DEC. На базе это ОС был разработан кластер, который был назван C.mpp в 1971 году в Америке в городе Питтсбург, который находится штате Пенсильвания. Однако, только в 1983 году научились распределять задачи и распространять файлы с помощью компьютерных сетей, огромный вклад в разработку этого внесла компания Sun Microsystems, которая предоставила операционную систему на основе BSD, которая имела название SunOS.Первым коммерческим проектом кластера стал ARCNet, созданный компанией Datapoint в 1977 году, однако этот продукт не принес прибыль компании, поэтому разработка кластеров была заморожена до 1984 года. В этом году компанией DEC был создан кластер VAXcluster, который был построен для ОС VAX/VMS. Каждый из этих кластеров мог не только производить совместные вычисления, но и предоставлял возможность совместного использования файловой системы и других составляющих, при этом не теряя целостность файлов и неизменность данных. На данный момент VAXCluster (называемый теперь VMSCluster) входит в сотав операционной системы HP OpenVMS, которая использует процессоры Alpha и Itanium.Также есть еще несколько первых разработок кластера, которые преобрели популярность. Такими продуктами являются класера Himalaya, который разработан компанией Tandem в 1994 году, а также Parallel Sysplex, который был разаботан компанией IBM также в 1994 году.Большей часть разработкой кластеров, которые состояли из персональных компьютеров, занимался проект Parallel Virtual Machine. Первый релиз данной программы произошёл в 1989 году. Это программное обеспечение предоставляло возможность из нескольких обычных компьютеров собрать один виртуальный суперкомпьютер. Появилась возможность очень быстро и просто создавать кластера. Данные дешевые кластера были даже лучше по производительности, чем производительность мощностей коммерческих систем.Разработку кластеров, состоящих из ПК в данной области продолжило Американское аэрокосмическое агентство NASA в 1993г. И уже в 1995 году появился кластер Beowulf. Это также поспособствовало развитию grip-сетей, который были созданы вместе с системами UNIX. 1.2 О кластере. Термин «кластер» имеет множество определений. Для некоторых главной составляющей является отказоустойчивость, для других — масштабируемость, для третьих — управляемость. Классическое определение кластера звучит примерно так: «кластер — параллельная или распределенная система, состоящая из нескольких связанных между собой компьютеров и при этом используемая как единый, унифицированный компьютерный ресурс». Следовательно, кластер – это некоторое количество серверов или компьютеров, которые объединены в одну сеть, которой можно управлять, и работают как неразделимый механизм. Для работы кластера необходимо, чтобы на любой узле (ноде, компьютере, сервере) была запущена своя копия ОС.Грегори Пристер как-то дал определение кластерным технологиям: «Кластер представляет собой одну из разновидностей распределенной или параллельной системы». Этот человек сыграл немалую роль на начальном этапе создания кластеров. Именно он был одним из ранних архитекторов кластерных решений.Однако эксперты Aberdeen Group дали более глобальное определение кластеру. По их мнению, кластер - это система, которая может работать как единый целый механизм, обеспечивает высокую отказоустойчивость, имеет централизованное управление всеми ресурсами и общую файловую систему и, кроме того, обеспечивает гибкость конфигурации и легкость в наращивании ресурсов.Все узлы кластера объединены в единую сеть, с помощью коммутационных каналов, через которые сервера могут обмениваться информацией. Каждый узел следит за состоянием других узлов, а также отправляет необходимую информацию, которая может включать в себя конфигурационные данные, данные об общих системах хранения и их работоспособности. Процедура обмена данной информацией называется heartbeat («сердцебиение», или «пульс»), и если кластер получил этот сигнал, следовательно сервер-адресант работает исправно. Если в какой-то момент один из узлов перестает посылать heartbeat-сигналы, то остальные узлы начинают считать его неисправным и кластер начинает перенастраиваться. Сигналы «сердцебиения» могут передаваться по одному каналу с какими-либо данным, но при создании крупных систем, лучше выделить для этого другой канал, чтобы не происходила потеря сигнала. С помощью таких сигналов также можно определить узел, который будет контролировать работу остальных узлов.Бывает ситуация, когда приложение перестает быть доступным для пользователя, этот период называется время простоя (или отключения). Есть классификация простоев, которая состоит из двух категорий: запланированные: замена оборудования; обслуживание; обновление программного обеспечения; резервное копирование (автономное резервное копирование); тестирование (периодическое тестирование необходимо для проверки кластеров); разработка; незапланированные: ошибки администратора; отказы приложений; отказы оборудования; ошибки операционной системы; стихийные бедствия. Таким образом, кластерные технологии должны обеспечивать доступность сервиса при любых простоях, как запланированных, так и незапланированных.. Наиболее популярными приложениями, которые лучше запускать в кластерах, являются: базы данных; системы управления ресурсами предприятия (ERP); средства обработки сообщений и почтовые системы; средства обработки транзакций через Web и Web-серверы; системы взаимодействия с клиентами (CRM); системы разделения файлов и печати. Также есть у кластеров есть своя классификация. Обычно различают следующие основные виды кластеров: отказоустойчивые кластеры (High-availability clusters, HA, кластеры высокой доступности) кластеры непрерывной доступности (Fault tolerant) вычислительные кластеры 1.2.1 Высокая доступность. Высокодоступные кластера обозначаются аббревиатурой HA (англ. High Availability — высокая доступность). Данные кластеры позволяют предоставить высокую доступность сервиса. Количество узлов в HA кластере всегда избыточное, чтобы при отказе одного или нескольких, можно было бы запустить сервис на других. Минимальное количество узлов в данном кластере составляет два. В противном случае повысить доступность не получиться. Существует большое количество программ, которое предоставляют решение для HA-кластера.Существует три варианта построение высокодоступного кластера: с холодным резервом или активный/пассивный. В этом случае активный узел обрабатывает все запросы, а пассивный включается в работу только лишь при отказе активного. Пример — резервные сетевые соединения, в частности, Алгоритм связующего дерева. Например связка DRBD и HeartBeat. с горячим резервом или активный/активный. Все ноды принимают и обрабатывают запросы, и при отказе одного из них, нагрузка распределяется по оставшимся нодам. Следовательно, при отказе одного узла кластер переконфигурируется. Примеры — практически все кластерные технологии, например, Microsoft Cluster Server. OpenSource проект OpenMosix. с модульной избыточностью. Данный вариант самый трудозатратый. Его используют только в случаях, когда простой системы невозможен. В это конфигурации один и тот же запрос может выполняться несколькими узлами и выдается результат любого узла. Следовательно, очень важно, чтобы результаты всех узлов были идентичными (либо различия незначительны). Примеры — RAID и Triple modular redundancy. Некоторые решения кластеров могут сочетать несколько вариантов построения кластеров. Так, например, Linux-HA может обслуживать очень рискованные запросы всеми узлами, это называется режим обоюдной поглощающей конфигурации, а другие запросы могут равномерно распределяться между узлами.Высокая доступность кластеризация является метод, используемый для минимизации времени простоя и обеспечить непрерывное обслуживание, когда некоторые компоненты системы терпят неудачу. Kластеры HA состоит из множества узлов, которые взаимодействуют и обмениваются информацией через общие сетках памяти данных и являются отличным способом, чтобы обеспечить высокую доступность системы, надежность и масштабируемость.Учитывая эти разнообразные элементы высоко-доступность требует: Тщательное и полное планирование физических и логических процедур доступа и эксплуатации ресурсов, от которых зависит приложение. Эти процедуры помогают избежать сбоев в первую очередь. Пакет мониторинга и восстановления, что позволяет автоматизировать обнаружение и восстановление после ошибок. Хорошо контролируемый процесс для поддержания аппаратных и программных аспектов конфигурации кластера, сохраняя при этом доступны приложения. Отказоустойчивый кластеры предоставляют решение задач, таких как: 24 часа в сутки 7 дней недели любые приложения готовы к запуску, независимо от отказов в работе операционной системы, устройств хранения, приложения или инфраструктуры; держать очень высокий показатель SLA (перевыполнение обязательств); при предоставляемом оборудовании (базе, инфраструктуре) гарантировать максимальную высокую доступность; обеспечение целостности и доступности приложения в кластере, а также ПО; быстрое восстановление данных при поломках; уменьшение количество сбоев, чтобы не происходило простоев ОС, а также увеличение скорости развертывания нового оборудования; тщательный контроль за доступностью очень важных приложениями, таких как базы данных; гарантирование высокой доступности в виртуальных, реальных и смешанных средах. Преимущества высокой доступности: все компоненты стандартизированы и могут быть запущенные на существующих серверах и машинах; могут кластеризовать большую часть существующих приложений могут работать с очень большим вариантом работают практически со всеми приложениями (зависит только от умения того, кто осуществляет внедрение); работают с большинством существующих типов дисков и сетей; стоимость таких приложений относительно невысока. Непрерывная доступность (Fault tolerant) Для того, чтобы можно было предоставить полностью отказоустойчивый сервис, нужно, чтобы постоянно была точная копия узла, на котором запущен необходимый сервис. При создании копии после поломки оборудования придется потратить некоторое время на копирования или может случиться ситуация, при которой невозможно будет достать необходимую информацию из проблемного узла и это приведет к утере информации.Именно для таких ситуаций существует способ создания непрерывно доступного кластера. Существует два способа реализации такого решения: аппаратный и программный.Аппаратный способПри этом способе создаются два сервера, один из которых выполняет запросы, а другой полностью его копирует. При этом они оба независимо производят вычисления. Также есть узел, который проверяет и сверяет получившиеся результаты и выполняет поиск ошибок. Если невозможно исправить получившуюся ошибку, то сервер, который считается неисправным, отключается.В этом случае оборудование будет простаивать не более 32 секунд в год. Чтобы получить такие результаты необходимо пожертвовать большими деньгами на приобретение данного оборудования. По подсчетам одной российской компании на данный кластер придется потратить порядка $1 600 000Программный способ.Самым известным программным продуктом для реализации непрерывно доступного кластера в настоящее время является vSphere от VMware.Но данный способ реализации имеет свои ограничения, такие как: Определенный процессор на физической машине Intel архитектуры Sandy Bridge (или новее). Avoton не поддерживается. AMD Bulldozer (или новее). Сетка, с пропускной способностью в 10-гигабит, через которую общаются виртуальные машины Количество виртуальных машин на физической не должно превышать 8 Количество виртуальных процессов виртуальной машины не более 4 Количество виртуальных процессов на хосте не более 8 Не поддерживаются снэпшоты ISO-образы должны быть находиться в общем хранилище, чтобы все машины имели к ним доступ. Было проведено несколько экспериментов, результатами которых стал вывод, что при использовании FT от VMware виртуальные машины начинали работать значительно медленнее, производительность упала на

1.3 Рынок

Реализация

2.1 Демон

2.2 Сервисное приложение

2.3 Клиентское приложение.

Вывод.

Список литературы.

Приложение

Реализация


Практической частью моей дипломной работы является реализация High Availability кластера.

Я реализую свой HA-кластер для одноплатного компьютера Raspberry Pi, на который установлена операционная система Raspbian GNU/Linux 8.0. Кластер представляет собой имитатор исполнительного механизма, для того, чтобы отобразить режимы работы платы.

Raspberry Pi – это одноплатный компьютер размером с банковскую карту. Приложение разрабатывалось на плате Raspberry Pi версии 3В. На этой плате имеются все составляющие обычного компьютера, такие как: процессор, оперативная память, разъём HDMI, композитный выход, USB, Ethernet, Wi-Fi и Bluetooth.

Raspbian GNU/Linux – операционная система, основанная на Debian GNU/Linux для Raspberry Pi. В настоящее время эта ОС официально предоставляется Raspberry Pi Foundation, как основная операционная система для одноплатных компьютеров. ОС состоит из базовый про гамм и утилит, которые можно запустить на Raspberry Pi. Все еще находится в активной разработке.

Реализованный мной кластер состоит из:

  • Демона, который реализован на C++

  • Сервисного приложения, которое реализовано на python

  • Клиентского приложения, которое реализовано на python

Демон стартует при загрузке операционной системы. Клиентское и сервисное приложение запускаются демоном. Демон и сервисное приложение запускаются на обоях машинах. Сервисное приложение запускается на локалхосте машины, и оно будет доступно только с самой платы. Клиентское приложение можно запустить с помощью сервисного на одной любой ноде, оно запускается с публичным адресом. В случае, когда другой узел перестает посылать heartbeat-сигналы, он считается неисправноым, и если на нем было запущено клиентское приложение, оно перезапускается на работающем узле.


2.1 Демон


Демон в Linux – это процесс, который работает в фоновом режиме и не взаимодействует с пользователем. Демон стартует при запуске операционной системы и завершает свою работу при выключении системы. Демон запускается на обеих нодах.

В качестве языка реализации был выбран С++ версии 4.9. Этот язык наиболее удобным для разработки демона, так как синтаксис языка прост и понятен, его можно скомпилировать прямо в машинный код, поэтому он является одним из самых быстрых языков в мире
, так же у него очень много компиляторов, которые могут работать на различных платформах. Стандартные библиотеки этого языка работают во многих платформах. Все библиотеки, работающие в Си, будут работать и в C++.

В качестве среды разработки выбор пал на Eclipse C/C++ Development Tools (CDT). Возможности этой среды включают в себя: поддержку для создания проектов и управляемой сборки для различных инструментальных цепей, стандартную сборку, навигацию по источникам, различные исходные инструменты знаний, такие как иерархия типов, диаграмма вызовов, браузер, браузер макроопределений, редактор кода с подсветкой синтаксиса, сворачивание и гиперссылка для навигации, рефакторинга исходного кода и генерации кода, визуальных средств отладки, в том числе памяти, регистров и разборщиков.

Для реализации демона необходимо было изучить принцип работы демона в linux, и узнать, как можно реализовать его на языке С++. Также нужно было изучить принцип работы сетевого общения по udp (сокеты) и запустить в каждой ноде udp-сервер и udp- клиент.

Для успешного запуска и работы демона были реализованы данные функции:

  • int LoadConfig(char* FileName) - для загрузки конфигураций из файла

  • int WriteLog(string Msg, ...) – для записи логов в файл

  • void *Client(void*) – для запуска udp-клиента

  • void *Server(void*) – для запуска udp-сервера

  • void ServiceApp() – для запуска сервисного приложения

  • void ClientApp() – для запуска клиентского приложения

  • void *Monitoring(void*) – для проверки переменных, отвечающих за статус соседней ноды и клиентского приложения

  • int InitWorkThread() – для инициализации потоков для клиента, сервера и мониторинга

  • int WorkProc() – следит за работой InitWorkThread() и возвращает статус главному потоку

  • void InitVars() – для инициализации глобальных переменных

  • int Daemon() – главный поток, который следит за состоянием дочернего потока WorkProc и, в зависимости от кода завершения, может либо завершить работу или перезапустить дочерний поток WorkProc()

  • static void signal_error(int sig, siginfo_t *si, void *ptr) – для обработки сигналов и вывод ошибок в лог

  • int SetFdLimit(int MaxFd) - для установки максимального количества дескрипторов, которое может быть открыты. При исчерпывании дескрипторов невозможно будет открыть файл или создать сокет

  • void SetPidFile(string Filename) – для создания PID файла

  • int main(int argc, char** argv) – главная функция, которая создает поток.


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



Реализация демона:

  1. При страте ОС запускается демон и считывает информацию из конфигурационного файла:



Где:

  • log_file файл, в который записываются логи демона;

  • my_ip – ip- адрес данной ноды;

  • listen_port – порт, который слушает нода;

  • another_ip – ip- адрес соседней ноды;

  • another_port – порт, на который будет посылаться пакет;

  • timeout – время, через которое демон определит другую ноду как недоступную и, при необходимости, запустить приложение у себя;

  • app - пусть до запускаемого клиентского приложения.

Для считывания xml документа используется библиотека TinyXml, которая находится в директиве "tinyxml.lib".

  1. Инициализируются переменные, которые будут отвечать за статус клиентского приложения и соседней ноды. В начале все переменные равны 0.

intnode_status; // статус соседней ноды: «0» – выключена, «1» - включена

intneed_start_app; // необходимость запуска или остановки клиентского приложения на данной ноде: «0» – не нужно запускать, «1» – нужно, «-1» – нужно остановить

intdiff_need_start; // необходимость запуска или остановки клиентского приложения на соседней ноде: «0» – не нужно запускать, «1» - нужно, «-1» – нужно остановить

int diff_app_status; // статус клиентского приложения на соседней ноде: «0» – не запущено, «1» - запущено

intmy_app_status; // статус приложения на данной ноде: «0» – не запущено, «1» - запущено

time_tlast_time; // время последнего прибывшего пакета от соседней ноды

  1. Инициализируется дочерний поток, который будет следить за работой потока демона

  • Новый поток создается с помощью команды fork(), эта команда создаёт процесс-потомок, который является почти полной копией процесса родителя и она возвращает идентификатор PID потомка родителю, с помощью этого идентификатора родитель может «убить» потомка.

  • Далее уже в потомке необходимо будет разрешить все права для создания новых файлов, с помощью команды umask(0).

  • Чтобы не произошло проблем с размонтированием дисков, необходимо сменить корневую директорию chdir("/").

  • Для того, чтобы демон не имел доступ к консоли и не выводил ничего, необходимо закрыть все дескрипторы ввода, вывода и ошибок командами close(STDIN_FILENO), close(STDOUT_FILENO), close(STDERR_FILENO) – это позволит сэкономить ресурсы.


  1. Создается новый поток демон, который может передать необходимые сигналы потоку родителю.

  2. Далее создаются потоки

Потоки создаются с помощью библиотеки POSIX thread (pthread). Она позволяет создавать новый параллельный поток процессов. Для потоков требуется меньше накладных расходов, чем для «forking»а. Все потоки внутри процесса имеют одинаковое адресное пространство. За создание нового потока отвечает функция pthread_create(thread, attr, start_routine, arg), где thread – это уникальных идентификатор для потока, attr - Объект непрозрачного атрибута, который может использоваться для установки атрибутов потока (можно NULL), start_routine – вызываемая функция, arg – единственный аргумент функции типа void (может быть NULL). Для того, чтобы два потока одновременно не обращались к одной переменной, необходимо на время блокировать доступ к ней, для этого есть специальная функция pthread_mutex_lock, и для разблокировки pthread_mutex_unlock. Область памяти, на которую ссылается код между этими функциями блокируется при вызове первой и освобождается, при вызове второй.

Создаются 4 потока:

  1. Client:

Udp-клиент, который инициализирует соединение и каждые 2 секунды посылает значение переменных diff_need_startи my_app_status.

  1. Server:

Udp-сервер, который инициализирует соединение и принимает пакеты и сохраняет время последнего прибывшего пакета и записывает в лог информацию. В пакете содержится информация, которая сохраняется в переменные need_start_appи diff_app_status.

  1. Monitor:

Функция, которая следит за состоянием соседней ноды, а также отвечает за запуск или остановку клиентского приложения. На блоксхеме изображен алгоритм работы функции. Далее показана блоксхема работы функции монитор. Запуск и остановка клиентского приложения осуществляется функцией мониторинга. Для остановки клиентского приложения используется PID процесса, в котором оно было запущено.



  1. ServerceApp

Поток запускает приложение сервиса

В данном случае время недоступности клиентского приложения, при отказе сервера, на котором оно запущено, зависит от значения переменной timeout и времени, которое занимает поднятия web-сервера.