Делова Ферма

Материал из Брацка Правки
Версия от 14:00, 19 июля 2022; Gary (обсуждение | вклад) (Архитектура)
Перейти к: навигация, поиск

Делова Ферма (ранее называемая Деловы Кластер; здесь и далее -- Ферма) -- это отказоустойчивый (high availability) кластер Брацких Ферм (здесь и далее по тексту -- Ферм), который обеспечивает работу и высокую доступность услуг приложений Делово Бюро, так называемых деловых прилад.


Общее описание

Архитектура

Для предоставления услуг пользователям:
  1. Пользовательские приложения Фермы установлены либо в контейнерах, либо на виртуальных машинах. Операционные системы должны быть установлены для взаимодействия виртуальной машины и приложения. Контейнеры уже содержат подогнанные исключительно под нужды приложения операционные системы.
  2. Контейнеры и виртуальные машины Фермы создаются в виртуальных средах.
  3. Виртуальные среды Фермы требуют для работы железные сервера (bare-metal server).
  4. Взаимодействие виртуальных сред с железными серверами осуществляется специально-ориентированной на это взаимодействие операционной системой.
Для высокой доступности (high availability или HA) и отказоустойчивости услуг:
  • Задействуются три Железа. Два из трёх являются "несущими"; их базы синхронизованы и изменение в одной базе влечёт автоматическое изменение в другой. Из двух несущих, одно является основным. Третье Железо -- это требование ProxmoxVE для обеспечения кворума.
  • В обычном режиме, просмотрщик пользователя обращается в адресу Hetzner vSwitch, который отправляет пользователя к основному Железу.
  • Если основное Железо неспособно обслуживать клиентов, Кластер изолирует его и переключает клиентов на второе несущее, работающее Железо.
Отказоустойчивость требует несколько дополнительных функций:
  1. Для обнаружения сбоя или другой нештатной ситуации, Ферма постоянно мониторится. Сигнал о сбое поступает в виртуальную среду, которая ограждает (fencing) Узел со сбоем и запускает процесс восстановления данных с резервной копии.
  2. Для восстановления данных в случае их потери из-за сбоя или другой нештатной ситуации, каждое Железо постоянно проводит резервное копирование.

История

Доступы

  1. Администраторский доступ к Железу, а также к соединителям Hetzner vSwitch осуществляется через административную панель и администраторские консоли предоставляемые непосредственно Hetzner.
  2. Администраторский доступ к виртуальным средам ProxmoxVE и, далее, файлам пользовательских приложений, осуществляется через привязанные к Железу IP адреса.
  3. Доступы к пользовательским приложениям осуществляются через привязанные к приложениям IP адреса.

Инфраструктура

Инфраструктура Фермы -- это объединённые в единую связку три "физических" (bare metal) сервера (здесь и далее по тексту -- Железа).

Поставщик Железа

Hetzner является поставщиком услуг размещения, у которого "Железо" арендуется. Сотрудничество с данным поставщиком длится с 2016 года. Другие поставщики периодически рассматриваются, но никто другой не предлагал более низких цен на долгосрочной основе.

Выбор Железа

Из-за меньшей стоимости, Железo выбрано на аукционе -- https://www.hetzner.com/sb?hdd_from=500&hdd_to=1000 исходя из следующих предпосылок:
  • Целевой рабочий объём жёсткого диска для этого Кластера -- 512Gb.
  • Как минимум один, основной сервер выбран с SSD и, желательно, NVMe, и частотой процессора в 64Gb.
  • Как минимум два "несущих" сервера выбраны в одном датацентре. Хотя Hetzner не берёт оплату за траффик, это обстоятельство повышает скорость работы Кластера. Если второй сервер не был бы доступен в том же датацентре, мы искали бы его в других датацентрах то же города или месторасположения.
  • Подрядчик предпочёл сервер на процессоре Intel Xeon E3-1275v5 серверу на Intel Core i7-7700.
  • Требования к третьему Железу ниже, чем к "несущим". Один кандидат утверждал, что его объём может быть меньше, так как на нём может быть установлен только ProxmoxVE.
Характеристики Железа представлены ниже.

Соединители

Для объединения Желез в сети, используются инструменты Hetzner vSwitch. На этих соединителях построены внутренняя и внешняя сети. Каждой из соединителей имеет свой IP адрес.

Характеристики Железа

В результате процесса Выбора Железа, были выбраны сервера со следующими характеристиками:

Железо 1

1 x Dedicated Root Server "Server Auction"
  • Intel Xeon E3-1275v5
  • 2x SSD M.2 NVMe 512 GB
  • 4x RAM 16384 MB DDR4 ECC
  • NIC 1 Gbit Intel I219-LM
  • Location: FSN1-DC1
  • Rescue system (English)
  • 1 x Primary IPv4

Железо 2

1 x Dedicated Root Server "Server Auction"
  • Intel Xeon E3-1275v5
  • 2x SSD M.2 NVMe 512 GB
  • 4x RAM 16384 MB DDR4 ECC
  • NIC 1 Gbit Intel I219-LM
  • Location: FSN1-DC1
  • Rescue system (English)
  • 1 x Primary IPv4

Железо 3

1 x Dedicated Root Server "Server Auction"
  • Intel Core i7-7700
  • 2x SSD SATA 512 GB
  • 2x RAM 16384 MB DDR4
  • NIC 1 Gbit Intel I219-LM
  • Location: FSN1-DC1
  • Rescue system (English)
  • 1 x Primary IPv4

Узлы Фермы

Работа Фермы обеспечивается тремя узловыми центрами (node; здесь и далее, Узлами). Каждый Узел представляет собой отдельное Железо, приводимoe в действие несколькими видами программного обеспечения (ПО).

Резервное копирование

RAID создаёт резервные копии и может быть задействовано для восстановления данных Железа в случае аварий. Жёсткие диски каждого Железа сдвоены, как, например, 2x SSD SATA 512 GB. RAID копирует данные основного диска Железа на резервный диск. Если основной диск теряет данные из-за сбоя, резервный диск будет использован для восстановления данных на основной диск. RAID устанавливается непосредственно на Железо.

Виртуальные среды

ProxmoxVE, в данный момент, v.7.2, создаёт виртуальные среды. Это обеспечение взаимодействует с Железом через операционную систему Debian.

Сети Узлов

Сеть каждого Узла использует мост по выбираемой по умолчанию в Network Configuration модели.

Хранилища Узлов

Для хранения данных, каждая Среда использует платформу распределённого хранилища Ceph. Хранилища отдельныx Сред синхранизуются через внутреннюю сеть инфраструктуры.

IP адреса

В сетях ProxmoxVE, мы задействуем три типа IP адресов:
  1. Для управления средами ProxmoxVE, мы используем IPv4 адреса и IPv6 адреса отдельных Желез.
  2. Для внутренней сети из трёх Желез, собранной на одном Hetzner vSwitch, задействуется частный IP адрес. Эта сеть не доступна из сети Интернет; прежде всего, через неё синхранизуются хранилища Желез. Для этой сети, выбран адрес с типом "/24" .
  3. Внешняя сеть требует покупки дополнительных IP адресов, причём IPv4 адреса дороги, а IPv6 адреса, возможно, могут не обеспечивать стабильной работы. В данный момент, мы купили один IPv6 адрес и тестируем его. Этот IPv6 адрес будет присваиваться всем VM и контейнерам, которые будут создаваться в инфраструктуре. Чтобы работать с ресурсами Фермы, пользователи будут запрашивать именно этот адрес. Эта сеть также собрана на тех же Железах другим Hetzner vSwitch.

Пользовательские прилады

Ферма обеспечивает высокую доступность Брацкой Сетки, Брацкой Справы и, возможно, других приложений, которые принадлежат Делово Бюро.

Сетка

  • Брацка Сетка -- это брацкая прилада, которая представляет собою систему поддержки социальной сети, построено на базе готового программного решения HumHub.

Справа

  • Брацка Справа -- это средство управления людскими и материальными ресурсами предприятия, построенное на основе программного обеспечения Odoo.

Жици

  • Брацки Жици -- это инструмент Брацкой Школы для организации видео- и аудио-конференций, построена на основе программного обеспечения Jitsi.

Пошта

Связка

Мониторинг

Поиск подрядчиков

Для ускорения проекта и получения сторонней экспертизы, Каролина привлекала подрядчиков на изготовление Кластера по разработанным на этой вики-странице требованиям.

Объявление

Объявление на разовую работу опубликовано на Upwork:

Guys, we need the most affordable well-documented HA (high availability) ProxmoxVE 7.2 cluster that is assembled on three Hetzner nodes:

  • 2 Intel Xeon E3-1275v5/2x SSD M.2 NVMe 512 GB/4x RAM 16384 MB DDR4 ECC/NIC 1 Gbit Intel I219-LM and
  • One Intel Core i7-7700/2x SSD SATA 512 GB/2x RAM 16384 MB DDR4/NIC 1 Gbit Intel I219-LM.

Ceph, iptables. We plan that each node would have one VM or container for testing. We will assign a domain name to that.

Each has a primary IPv4. However, there are some unresolved issues related to the network. Initially, we planned to use vSwitch; however, it seems to require additional IP addresses, from which IPv4 are expensive and IPv6 may not be able to deliver HA. Thus, we plan to offer two different contract prices -- one is if we need to buy additional IPv4 addresses for vSwitch and another is if we don't.

We see two parts of acceptance testing. If both are successful, the contract shall be considered completed.

  1. During software testing, we will shut down 2 of 3 nodes to see whether the cluster is still available.
  2. During documentation testing, we will erase the software from one, implement the rescue, and one expert will try to restore the software using your documentation. She will video-record her attempts and, if not successful, will provide you with the recording, so either you can show her errors or correct yours.

What else do you need? If nothing, please give your minimum project budget (your project fare + initial costs of additional purchases such as setup fees for additional IP addresses, if any, required by the contract + first year costs of additional purchases, if any) and timeframe up to 2-3 weeks.

This project is a fixed-price one. When we send you an offer, we will change the terms. To complete the project, the selected contractor will be given an admin access, but not full robot credentials, for three weeks. After three weeks, that access would be revoked; if you don't complete the project by that time, you will never finish it!

Принцип отбора

Нам нужен кластер с нуля и мы отдадим подряд тому,
  1. Кто сможет это сделать,
  2. В чьём графике завершение контракта не растянется на более, чем два месяца, и
  3. Чей бюджет будет наименьший. Имеется в виду весь бюджет, включая и оплату подрядчиков, и расходы на покупку и ежегодного поддержания Кластера.

Собеседования

Найм людей -- отличный способ узнать об аспектах проекта и получаемого в его процессе изделия. Идеально проведённые собеседования добавляют документации на Правку.

Полученные заявки

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

Порядок разработки

Кто и что

Заказчик платит за Кластер и согласовывает эту вики-страницу перед присуждением подряда. Заказчик подразумевает, что координатор отработает проект, в том числе, документируя требования на этой вики-странице и ставя задачи подрядчику. По доброте душевной и в целях профессиональной подготовки, заказчик может делать работу координатора временно до той поры, пока заказчик верит в то, что координатор когда-то сможет работать самостоятельно :)

Как не надо

  • Знаходимо людину, яка нас задовільняє на даний проект (або декілька людей), так как он или она хорошо говорит, пишет, выглядит, вовремя выходит на связь, быстро отвечает и так далее.
  • Зв'язуємось (бажано дзвінком) для уточнення деталей і надання необхідних даних (в цей же етап можна задавати питання про сервера, які, куди, як..).
  • Согласовываем полученные детали, щоб розуміти всі ці тонкощі і надавати комусь якісь доступи - заслуховуємо його или её оцінку по бюджету цього проекту - розуміємо підходить нам чи ні.
  • Даємо роботу або відмовляємо.

Как надо

  1. Задокументировать требования на этой вики-странице. Эти требования должны включать описание того, что мы должны получить (так называемые "Объёмы работ"), как мы это получим типа "взять то-то там-то и поставить туда-то" и как мы о том узнаем (так называемая "Приёмка").
  2. Перевести указанные в "Объёмы работ" секции и секцию "Приёмочные тесты" на английский и включить в контракт. Если они не включены, то мы получим то, что нам надо в одном случае из 100. В 99 остальных случаях, мы получим то, что нам не надо или за те деньги, на которые мы не рассчитываем.
  3. Действовать далее по рубрике Как не надо; после выполнения предыдущих пунктов, она имеет смысл.

Передача и приёмка

Объёмы работ

Мы предоставляем подрядчику Инфраструктуру и изложенные на этой вики-странице требования. Подрядчик должен представить нам объект приёмки -- отлично задокументированные Виртуальные среды с установленными высокоустойчивыми Пользовательскими приладами.

Приёмочные тесты

Для того, чтобы убедиться в том, что то, что представлено подрядчиком -- это то, что нам надо (aka отвечает критериям приемлемости), порядок приёмочного тестирования установлен следующим:
  1. Созданный Кластер тестируем, насильно отключивши два случайно выбранные Железа из трёх доступных. Если Кластер продолжает работать, то сборка принимается.
  2. Программное обеспечение случайно выбранного Железа (одного из трёх) удаляется и наш специалист, Natly, восстанавливает его по созданной документации, одновременно записывая восстановление на видео. Восстановленный Кластер тестируется аналогично созданному. Если Кластер продолжает работать, то документация принимается. Если нет, то видео передаётся подрядчику для доработки документации или указания ошибок Natly.

Вопросы для прояснения

Архитектура платформы

Есть две окончательно неразрешённые проблемы касаемые ПО платформы:
  • Один подрядчик предлагает вместо Ceph задействовать TrueNAS.
  • До начала проекта, один специалист предлагал использовать роутер Microtik, чтобы на proxy сделать два IP адреса, первый использовать для внутренних виртуалок, если они нормально работают, а второй загнать в bridge для внешних серверов и средствами Линукса типа firewall делить тот трафик, который приходит. Кроме того, на том же proxy он предлагал поставить DHCP сервер для раздачи адресов машинам. Другой специалист считал, что безопасных DHCP серверов на рынке нет. В результате, роутеры и DHCP сервер не устанавливались.

Начало работы

Полезные рекоммендации