Не получено подтверждение отправки can пакета через lan

Обновлено: 07.07.2024

Wake On Lan - технология, которую поддерживают материнские платы и сетевые карты, позволяющая включать компьютер, когда на его сетевой интерфейс приходит специальный пакет. Чтобы воспользоваться возможностью WOL нужно:

  • Включить в BIOS опцию включения по сигналу на сетевую карту;
  • Возможно потребуется настроить сетевую карту на прием WOL;

Пример настройки для материнской платы Asus m4a785td-v evo:

Powershell скрипт для отправки пакета WOL

Send-WOL.ps1 - скрипт, который посылает пакет WOL на указанный ip адрес. Обязательным параметром является mac адрес устройства, которому адресован данный пакет.

Если не указывать ip, то будет использован широковещательный адрес 255.255.255.255, т.о пакет будет отправлен всем компьютерам локальной сети. Однако включиться только тот, который имеет указанный mac адрес.

Если ваш компьютер выходит в интернет через роутер

Чтобы включать компьютер локальной сети, посылая пакет WOL из интернета, нужно настроить port forwarding в маршрутизаторе. Пакеты приходящие на определенный порт (например, 9, можно использовать любой порт) по протоколу UDP должны передаваться на нужный локальный IP адрес. Если в port forwarding настроить перенаправление (с внешнего порта) на широковещательный (внутренний) адрес 255.255.255.255, то т.о. можно пробуждать из интернета любой компьютер локальной сети, указывая в пакете WOL нужный mac адрес.

WOL after power loss/failure

Существует проблема: Если материнская плата будет обесточена, а затем снова подключена к питанию, то она уже не будет включать компьютер по сигналу WOL. Эта проблема решается:

  1. использованием источника бесперебойного питания (ИБП);
  2. или настройкой BIOS: POWER \ APM Configuration \ Restore on AC Power Loss : Power On. Без ИБП, но с настройкой включения, компьютер будет включаться и не использоваться после короткой обесточки, что может быть нежелательным. Поэтому удобно использовать ИБП + настройку BIOS. В этом случае короткие обесточки не прервут подачу питания на материнскую плату и WOL будет функционировать, а если все-таки случиться прерывание питания, то настройка Restore on AC Power Loss включит компьютер.

Enable WOL on network adapter

ifconfig -a - посмотреть список сетевых интерфейсов вместе с MAC адресами ( apt install net-tools ) ethtool $if - посмотреть настройки сетевого адаптера, в т.ч. возможность WOL ( apt install ethtool ).

В примере выше видим, что для enp7s0 WOL поддерживается, об этом говорит строка Supports Wake-on: pumbg . Параметр Wake-on показывает включен ли режим WOL. Значение d - выключен, g - включен. В свою очередь для vmbr0 нет параметров Supports Wake-on и Wake-on , что означает, что этот сетевой интерфей WOL не поддерживает.

Включить/выключить WOL можно командой:

  • ethtool -s enp7s0 wol g - включить
  • ethtool -s enp7s0 wol d - выключить

Отправка магического пакета

Для отправки магического пакета можно использовать утилиту wakeonlan

Настройка WOL для компьютера с proxmox (с настроенным Virtual Machine Bridge).

На компьютере с одной серевой картой, после установки proxmox конфигурация сети будет состоять из трех сетевых интерфейсов:

Видно, что интерфейс vmbr0 (Virtual Machine Bridge) имеет IP адрес, а enp7s0 не имеет.

Посмотрим настройки сети:

На описанной конфигурации отправка магического паента для MAC интерфейса vmbr0 ничего не даст. Отправлять нужно на MAC реальной сетевой карты. Т.е. для описанной конфигурации сработает команда:

Стоит отметить, что если рассылать пакет не на широковещательный адрес, а на конкретный:

то почему-то это не работает.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

STM32. Реализация протокола CAN на базе МК STM32F103

По реализации работы CAN протокола на МК STM32 публикаций в интернете достаточно много. Но довольно тяжело настроить готовый код под свое устройство, особенно если пытаемся это сделать впервые.

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

Физическая связь

В первую очередь попытаемся разобраться как наш микроконтроллер связывается с CAN-шиной.

Трансивер в виде отдельной микросхемы является необходимостью. Объясняется это, прежде всего, высокими требованиями к его надежности и рабочим характеристикам, поскольку работает он с цепями, физически выходящими за пределы устройства (в данном случае это сама шина CAN). А условия, в которых находятся эти цепи, зачастую не определены: например, сильные магнитные поля или пролегающие рядом силовые высоковольтные цепи. Более того, при необходимости гальванической развязки ее удобнее всего осуществлять именно между трансивером и контроллером CAN-сети.

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

Программная часть

Поняв как это все работает физически, приступим к рассмотрению программной части.

Программную часть можно разделить на несколько частей:

Вдобавок нужно также предусмотреть обработку ошибок CAN, но сделаем это в отдельной статье, так как для первого запуска и понимания работы с шиной этого будет достаточно.

Разберем теперь каждый этап подробнее.

Настройка порта

Приведу пример настройки портов и инициализации CAN шины в микроконтроллере STM32F103

Следует обратить внимание на то, что если в Вашем микроконтроллере несколько CAN устройств, то настройка переадресации, как и настройка CAN в целом, может немного отличаться.

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

Затем настраиваем ножки контроллера:

Для CAN RX настраиваем режим работы как GPIO_Mode_IPU - вход с подтяжкой к питанию,
а для CAN TX настраиваем режим работы как GPIO_Mode_AF_PP - выход с двумя состояниями (Push-Pull) для альтернативных функций.

Если у нас включена переадресация, то компилятор добавит в код еще и команду ремапинга портов шины.

В принципе это вся настройка пинов, теперь нам осталось сделать инициализацию самого устройства.

Инициализация CAN

Определяем структуру описания CAN, затем "отключаем" его для настройки.

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

Здесь мы немного подробнее рассмотрим настройки инициализации.

Начнем с параметров работы CAN:

Для первого запуска и тестирования устройства нам будет достаточно включить режим "CAN_NART". При подключении осциллографа к шине, если устройство нормально функционирует, мы увидим всплески активности в зависимости от того, как часто передаем данные по шине.

Если же "CAN_NART" выключен, то при включенном параметре "CAN_ABOM" будет предпринято всего 128 попыток передать пакет, а потом микроконтроллер отключит модуль Can (если Вы не будете обрабатывать ошибки и сбрасывать счетчики ошибок). При выключенном "CAN_ABOM" автоматического отключения модуля Can не произойдет.

Если же устройство не будет получать подтверждение о получении пакетов, то осциллограф нарисует "расческу", так как устройство будет бесконечно пытаться передать пакеты, пока не получит подтверждения.

Следующий параметр CAN_Mode определяет в каком режиме контроллер будет работать с CAN-шиной:

Повторюсь, если Вы только начинаете работать с CAN и у Вас нет готового устройства с трансивером, Вы можете научится работать с шиной на любой отладочной плате с микроконтроллером STM32, который поддерживает CAN. Для этого достаточно выбрать при настройке режим работы CAN_Mode_Silent_LoopBack или CAN_Mode_LoopBack. В этих режимах Вы сможете отправлять пакеты данных и принимать их же на одном устройстве.

Настройка таймингов

Синхронизация и тайминги в CAN — отдельный, важный и сложный вопрос. Однако, благодаря сложности и продуманности становится не так важна возможная рассинхронизация и нестабильность тактовых частот узлов сети, и связь становится возможной даже в тяжёлых условиях.


Всё время делится на кванты длиной t_q, и номинальная длительность бита равна 1+BS1+BS2 квантов. Захват значения бита происходит на границе BS1 и BS2. В процессе приёма приёмник определяет, в какой из временных периодов произошёл перепад сигнала (т.е. начало приёма нового бита). В норме перепад должен произойти на границе SYNC и BS1, если он произошёл раньше — контроллер уменьшает BS1, если позже — увеличивает BS2 на величину SJW (от 1 до 4 квантов времени). Таким образом, происходит постоянная пересинхронизация с частотой других приёмников.

В нашем примере мы настраиваем тайминги с учетом того, что перефирия настроена на частоту 8MHz. С помощью калькулятора таймингов, выбираем оптимальные под нашу шину и микроконтроллер.

Скорость шины настраивается с помощью прескалера. При указанных параметрах тайминга и CAN_Prescaler равным 50 - скорости передачи по шине составит 10 Кбит.

Для изменения скорости передачи, в нашем примере достаточно изменить CAN_Prescaler, например при значении равном "1", скорость передачи составит 500 Кбит, при "2" - 250 Кбит, ну и так далее. В примере кода, предоставленном во вложении к данной статье, расписаны все значения CAN_Prescaler, доступные для данного проекта. В принципе можно добится скорости вплоть до 1 Мбита.

За настройку таймингов при инициализации CAN устройства отвечают четыре параметра:

Параметр Расшифровка Пояснение
CAN_SJW Размер SJW SJW (reSynchronization Jump Width) определяет максимальное количество квантов времени, на которое может быть увеличено или уменьшено количество квантов времени битовых сегментов. Возможные значения этого показателя от 1-го до 4-х квантов.
CAN_BS1 Длина сегмента фазы 1 BS1 (Bit Segment 1) - определяет местоположение точки захвата (Sample Point). Он включает в себя Prop_Seg и PHASE_SEG1 стандарта CAN. Его продолжительность программируется от 1 до 16 квантов времени.
CAN_BS2 Длина сегмента фазы 2 BS2 (Bit Segment 2) - определяет местоположение точки передачи. Он представляет собой PHASE_SEG2 стандарта CAN. Его продолжительность программируется от 1 до 8 квантов времени.
CAN_Prescaler Множитель Множитель, из значения которого рассчитывается размер кванта времени. Рассчитывается исходя от частоты работы периферии микроконтроллера.
Важно не путать с частотой работы самого контроллера!

Для тестирования достаточно будет использовать параметры настройки таймингов, предложеные в примере. Более подробно о том что такое тайминги, а также как их правильно выставить описано в отдельной статье (STM32. Настройка таймингов работы CAN).

Настройка фильтрации пакетов CAN

В рамках данной публикации я не буду подробно описывать настройку работы с фильтрами, это материал для отдельной статьи (см. Почтовые ящики. Фильтры пакетов CAN). Скажу лишь, что для начала достаточно установить фильтры без ограничений, а впоследствии можно самостоятельно их настроить под свои требования.

С прерываниями дела обстоят ни чуть не сложнее, чем со структурой инициализации. Для начала надо настроить и проинициализировать контроллер прерываний (NVIC — Nested vectored interrupt controller). В архитектуре STM32 каждому прерыванию можно выставить свой приоритет для случаев, когда возникает несколько прерываний одновременно. Поэтому NVIC представляет нам несколько вариантов формирования приоритетных групп. Я не буду вдаваться в подробности, в нашем случае это не актуально, так как у нас на данный момент настроено лишь одно прерывание на обработку пакетов CAN/

Следует обратить внимание, что прерывание для CAN шины и USB одно и тоже. Если Вы будете использовать оба устройства в своей разработке, то необходимо более тщательно подойти к обработке прерываний от них. Могут возникнуть проблемы вплоть до полного отказа одного из устройств.

В параметре "NVIC_IRQChannel" мы указываем, какое именно прерывание мы инициализируем. Константа "USB_LP_CAN1_RX0_IRQn" обозначает канал, отвечающий за прерывания, связанные с CAN1. Найдя ее определение в файле stm32f10x.h, вы увидите еще множество констант (ADC1_IRQn, TIM1_TRG_COM_TIM17_IRQn и др.), обозначающих прерывания от других периферийных устройств.

Следующими двумя строками мы указываем приоритет прерываний (максимальные значения этих двух параметров определяются выбранной приоритетной группой). Затем указываем, что прерывание активно.

Последняя строка, собственно, включает использование прерывания.

На этом настройку CAN можно считать законченной. Мы учли все основные моменты, которые могут возникнут на начальном этапе изучения возможностей CAN шины. В зависимости от моделей контроллеров код может несколько меняться, но общие принципы работы остаются и легко портируются на разные семейства микроконтроллеров.

Получение данных из шины

Для получения данных из шины CAN используется прерывание.

Затем проверим формат кадра: Если стандартный, то проверяем параметр "StdID", но а если расширенный, то данные команды будут в параметре "ExtId".

Отправка данных в шину

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

Здесь все просто: объявляем переменную TxMessage, заполняем данные для отправки и выполняем команду передачи данных в шину.

Хочется еще раз обратить внимание на параметр формата кадра "IDE". Если мы выбираем "CAN_Id_Standard", то заполнять должны параметр"StdId", а "ExtId" - должен быть равен нулю. Соответственно если выбираем "CAN_Id_Extended" , то обнуляем "StdId", а заполняем "ExtId" .

Стандартный формат кадра имеет длину в 44 бита, а формат расширенного кадра - 64 бита. Но полезная нагрузка одного пакета выше у расширенного, так как на 64 бита он имеет 29 бит полезной информации, а в стандартном на 44 бита всего 11 бит полезной нагрузки.

Поиск ошибок

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

В обычном режиме - желательно иметь под рукой осциллограф, так как достаточно сложно без него определить откуда вылезла ошибка - железо или код. Также стоит обратить внимание на устройство, на котором выполняется тестирование: Если это STM Discovery, то есть вероятность того, что на пинах CAN висит дополнительная обвязка отладочной платы, которая может искажать обмен данных с трансивером. Лучше всего использовать отладочные платы с минимальным "обвесом".

Так же стоит обратить внимание и на тайминги. Например при подключении парсера к автомобильной сети, нужно настроить тайминги в соответствии с тем, как они настроены в автомобиле, иначе пакеты из CAN шины автомобиля Ваше устройство просто не будет получать.

Для своих сетей Вы можете настраивать тайминги на свой вкус и требования "скоростного режима", главное не отходить от стандарта и следить, чтобы на всех устройствах тайминги были одинаковыми.

Заключение

В этой статье я постарался подробно описать как настроить CAN на микроконтроллере STM32F103. Чтобы не очень перегружать информацией, часть материала с более подробным материалом оформил в отдельных статьях.

Во вложениях к статье приведен полный код программы, рассматриваемый в статье. Код протестирован в режимах Silent_LoopBack и Normal - полностью рабочий.

Если у Вас есть какие либо замечания по статье или предложения - прошу в коменты.


Шина CAN (Controller Area Network) стала стандартом в автомобилестроении: все новые автомобили обязаны поддерживать CAN (с 2001 в Европе и с 2008 в США). Кроме автомобилей, CAN применяется и в широком ряде других устройств. Производители диагностического оборудования для CAN рекламируют его применение, кроме разнообразной автомобильной техники, в мотоциклах, автопогрузчиках, судах, шахтных поездах, батискафах, беспилотных самолетах и пр. Давайте разберемся, что из себя представляет CAN.

В автомобилях используется несколько CAN; например, в Ford Focus таких шин четыре — три высокоскоростных (500 kbps) для управления мотором, тормозами, приборной панелью и т.п., и одна низкоскоростная (125 kbps) для управления дверьми, фарами, подушками безопасности, аудиосистемой, кондиционером и всем прочим. Подключившись к CAN, можно имитировать сигналы от любых устройств в автомобиле — например, управлять кондиционером с приложения на телефоне или накручивать одометр без движения автомобиля. Подключив к шине Arduino и реле, можно управлять с приборной панели дополнительной парковочной камерой. Даже стартапы, работающие над беспилотными автомобилями, такие как Voyage, начинают создание прототипа с того, что в обычном серийном автомобиле подключаются к CAN и учатся имитировать сигналы от педалей и руля.

Для подключения к CAN в автомобиле обычно возле руля имеется разъем OBD-II (On-Board Diagnostics).

image

Адаптеры OBD2-USB для подключения компьютера к CAN стоят от $5, и позволяют отслеживать весь трафик внутри автомобиля. Иногда разъем OBD-II защищен «аппаратным фаерволом», позволяющим принимать пакеты от устройств, подключенных к CAN, но не позволяющим передавать пакеты обратно на шину. В этом случае достаточно вывинтить разъем, и подключиться к проводам CAN вместо него.


Каждый пакет, передаваемый по шине CAN, состоит из ID передающего устройства (11 либо 29 бит), и до 8 байт передаваемых данных. Трафик, проходящий по шине при включении зажигания, может выглядеть как-то так:

Для анализа трафика CAN существует большое число инструментов — как коммерческих, так и OpenSource. Пакет can-utils для Linux включает утилиту cansniffer , которая отображает для каждого CAN ID только последний отправленный пакет, и тем самым позволяет отслеживать изменения показаний каждого датчика на шине:

Для реверс-инжиниринга трафика CAN сингапурские исследователи, из доклада которых я взял этот трейс, записали на видео приборную доску подопытного автомобиля, и затем соотнесли изменения на приборной доске с одновременными изменениями в трафике. Определив таким образом CAN ID датчика скорости и формат передаваемых им данных, они научились «подделывать» его пакеты, передавая на спидометр и на тахометр показания, не соответствующие действительности.

Надо понимать, что параллельно с передачей «поддельных» пакетов по шине продолжают передаваться и настоящие сигналы от датчика скорости. Чтобы тахометр показывал сфабрикованные показания, надо отслеживать передачу по шине настоящих показаний, и каким-либо образом их подавлять — например, сразу после обнаружения передачи CAN ID датчика скорости физически «глушить» шину, закорачивая линии данных. Более простой, чисто программный метод подавления настоящих показаний — сразу же после их передачи, пока тахометр еще не успел отреагировать, передавать «поддельные» пакеты. Например, следующий простой шелл-скрипт отслеживает передачу с CAN и сразу же после нее передает сфабрикованный пакет при помощи утилиты cansend из состава все тех же can-utils:

Даже хотя все устройства в автомобиле подключены к CAN, далеко не все их функции управляются через CAN. Например, на CAN в Ford Escape передаются сигналы о степени нажатия педалей газа и тормоза — но используются эти сигналы только блоком ABS, тогда как приводы дроссельной заслонки и тормозов соединены с педалями напрямую, минуя CAN.

C точки зрения безопасности ни о какой уязвимости в докладе сингапурцев речи не идет, потому что для передачи «поддельных» CAN-пакетов нужен физический доступ к шине. Кроме того, пакеты могут быть защищены контрольной суммой — например, в автомобилях Toyota последний байт каждого пакета должен равняться сумме всех предыдущих (по модулю 256). Кроме этого, в Toyota для защиты от нежелательных пакетов используется фильтрация получателем — например, игнорируются повороты руля более чем на 5% от текущего значения.

Тем не менее исследователям безопасности удавалось получить к CAN и удаленный доступ: вначале на небольшом расстоянии — через уязвимости в Bluetooth-модуле, подключенном к той же самой шине; а затем через сотовую сеть Sprint, через которую внедорожники нескольких американских производителей получали данные о пробках на дорогах. Исследователи, продемонстрировавшие перехват управления Jeep Cherokee с расстояния в несколько миль, получили от Управления перспективных исследовательских проектов Министерства обороны США (DARPA) вознаграждение в 80 тысяч долларов. С тех пор многие автопроизводители объявили о собственных bounty-программах, обещающих выплаты от $1500 за каждую обнаруженную уязвимость. Таким образом, реверс-инжиниринг трафика на шине CAN может не только добавить вашему автомобилю новые возможности, но и существенно пополнить ваш кошелек.

Принцип работы Keepalived и инструкция по настройке

что такое keepalived

Keepalived - это сервисное программное обеспечение, которое гарантирует высокую доступность кластера в управлении кластером. Его функции аналогичныheartbeat, Используется для предотвращения единой точки отказа.

Как работает Keepalived

Keepalived основан на протоколе VRRP. VRRP означает протокол резервирования виртуального маршрутизатора, а именноПротокол резервирования виртуальной маршрутизации。

Протокол избыточности виртуальной маршрутизации можно рассматривать как протокол для достижения высокой доступности маршрутизаторов, то есть N маршрутизаторов, которые обеспечивают ту же функцию, образуют группу маршрутизаторов. В этой группе есть мастер и несколько резервных копий, и есть VIP ( Маршрут по умолчанию для других машин в локальной сети, где расположен маршрутизатор, - этот vip), мастер будет отправлять многоадресную рассылку, и когда резервная копия не может получить пакет vrrp, мастер считается неработающим.Приоритет VRRPПриходитьВыберите резервную копию, чтобы стать мастером. Таким образом можно гарантировать высокую доступность маршрутизатора.

Keepalived в основном состоит из трех модулей: core, check и vrrp. Базовый модуль - это ядро ​​keepalived, отвечающее за запуск и обслуживание основного процесса, а также за загрузку и анализ файлов глобальной конфигурации. check отвечает за проверки работоспособности, включая различные распространенные методы проверки. Модуль vrrp предназначен для реализации протокола VRRP.

файл конфигурации keepalived

Keepalived имеет только один файл конфигурации keepalived.conf, который в основном включает следующие области конфигурации, а именно global_defs, static_ipaddress, static_routes, vrrp_script, vrrp_instance и virtual_server.

global_defs область

В основном настройте объект уведомления и идентификацию машины при возникновении неисправности

notification_email Кому отправлять уведомление по электронной почте в случае сбоя.

notification_email_from Адрес, с которого отправляется электронное письмо с уведомлением.

smpt_server SMTP-адрес письма с уведомлением.

smtp_connect_timeout Период ожидания для подключения к серверу smtp.

router_id - это строка, которая идентифицирует этот узел, обычно имя хоста, но не обязательно имя хоста. В случае сбоя будет использовано уведомление по электронной почте.

static_ipaddress и static_routes области

Области static_ipaddress и static_routes настроены с использованием IP-адреса и информации о маршрутизации узла. Если вы уже настроили IP и маршрутизацию на своем компьютере, эти две области настраивать не нужно. Фактически, при нормальных обстоятельствах ваш компьютер будет иметь IP-адрес и информацию о маршрутизации, поэтому нет необходимости настраивать их в этих двух областях.

Вышеупомянутые соответственно представляют следующие команды, выполняемые на этом компьютере при запуске / закрытии keepalived:

Примечание. Не обращайте внимания на эти две области, потому что я твердо уверен, что на вашем компьютере должен быть настроен IP и маршрутизация.

vrrp_script область

Используется для проверки работоспособности, когда проверка не удалась, она vrrp_instance из priority Уменьшите соответствующее значение.

Вышеупомянутое означает, что если script Инструкция в исполнении не выполняется, затем соответствующий vrrp_instance Приоритет будет снижен на 10 пунктов.

область vrrp_instance и vrrp_sync_group

vrrp_instance используется для определения VIP-зоны и связанных атрибутов для внешних служб.

vrrp_rsync_group используется для определения группы vrrp_intance, чтобы действия членов в этой группе были согласованными. Приведите пример, иллюстрирующий его функцию:

Два экземпляра vrrp_instance принадлежат одной группе vrrp_rsync_group, тогда при отказе одного из экземпляров vrrp_instance другой экземпляр vrrp_instance также будет переключен (даже если этот экземпляр не сбой).

notify_master / backup / fault соответственно указывают сценарий, выполняемый при переключении на master / backup / error.

Уведомление означает, что сценарий будет вызываться при переключении любого состояния, и сценарий будет вызываться после завершения выполнения трех вышеуказанных сценариев. Keepalived автоматически передаст три параметра ($ 1 = "GROUP" | "INSTANCE", $ 2 = имя группы или например, $ 3 = целевое состояние перехода (MASTER / BACKUP / FAULT)).

smtp_alert указывает, следует ли включать уведомление по электронной почте (используйте настройки электронной почты глобальной зоны для отправки уведомлений).

Состояние может быть MASTER или BACKUP, но когда другие узлы продолжают поддерживать активность, узел с более высоким приоритетом будет выбран как MASTER, так что этот элемент не имеет реальной цели.

interface Сетевая карта IP (не VIP) узла используется для отправки пакетов VRRP.

use_vmac Следует ли использовать виртуальный MAC-адрес VRRP.

dont_track_primary Игнорировать ошибки сетевой карты VRRP. (По умолчанию не установлено)

track_interface контролирует следующие сетевые карты, если какая-либо из них выйдет из строя, она перейдет в состояние FALT. (По желанию)

mcast_src_ip изменяет адрес источника многоадресного пакета vrrp. Адресом источника по умолчанию является IP-адрес ведущего устройства. (Поскольку это многоадресная рассылка, даже если исходный адрес изменен, мастер все равно может получить ответ)

lvs_sync_daemon_interface связывает сетевую карту lvs syncd.

garp_master_delay Как долго обновлять кеш ARP после переключения в состояние master, по умолчанию 5 секунд.

Значение virtual_router_id находится в диапазоне от 0 до 255, что используется для различения многоадресной передачи VRRP от нескольких экземпляров.

Примечание: значение virtual_router_id в том же сегменте сети не может быть повторено, в противном случае произойдет ошибка.Связанная информация об ошибке следующая. Чтобы

Вы можете использовать эту команду для просмотра виртуальных виртуальных машин, существующих в сети: tcpdump -nn -i any net 224.0.0.0/8

приоритет используется для выбора мастера, чтобы стать мастером, затем значение этой опцииЖелательно на 50 баллов выше, чем у других машин, ПредметДиапазоныЭто 1-255 (вне этого диапазона будет принято значение по умолчанию 100).

Advert_int Интервал времени для отправки пакетов VRRP, то есть как часто будет проводиться главный выбор (его можно рассматривать как интервал проверки работоспособности).

аутентификация Область аутентификации, типы аутентификации включают PASS и HA (IPSEC), рекомендуется использовать PASS (пароль определяет только первые 8 цифр).

virtual_ipaddress vip, без объяснения.

virtual_routes Виртуальная маршрутизация, информация о маршрутизации, которая должна быть добавлена ​​при переходе IP.

virtual_ipaddress_excluded IP-адрес, не включенный в отправленный пакет VRRP, чтобы уменьшить количество ответных пакетов VRRP. Он используется, когда к сетевой карте привязано много IP-адресов.

nopreempt позволяет узлу с более низким приоритетом быть ведущим, даже если запускается узел с более высоким приоритетом.

Во-первых, nopreemt должен быть действителен на узле, состояние которого - РЕЗЕРВНОЕ (поскольку узел РЕЗЕРВНОЕ КОПИРОВАНИЕ решает, стать ли он ГЛАВНЫМ), а во-вторых, для достижения функции, аналогичной отключению автоматического восстановления после сбоя, вам необходимо установить состояние всех узлов на РЕЗЕРВНОЕ КОПИРОВАНИЕ или установить главный узел Установленный приоритет ниже, чем РЕЗЕРВНОЕ КОПИРОВАНИЕ. Я лично рекомендую установить состояние всех узлов на РЕЗЕРВНОЕ КОПИРОВАНИЕ и добавить опцию nopreempt. Это завершает функцию автоотключения. Если вы хотите вручную переключить узел на MASTER, вам нужно только удалить опцию nopreempt узла и изменить приоритет. Он больше, чем другие узлы, а затем перезагрузите файл конфигурации (после выключения MASTER переключите файл конфигурации обратно и перезагрузите его снова).

Когда используешь track_script Вы не можете добавить nopreempt , Просто добавь preempt_delay 5 , Интервал здесь больше, чем vrrp_script Продолжительность, определенная в.

  • Как долго мастер preempt_delay начинает брать ресурсы (информацию о VIP / маршруте и т. Д.), И укажите, nopreempt Параметры.

области virtual_server_group и virtual_server

Virtual_server_group обычно используется в очень больших LVS, обычно LVS не может использовать эту вещь, поэтому я не буду говорить больше.

delay_loop Время опроса задержки (в секундах).

Внутренний алгоритм отладки lb_algo (алгоритм балансировки нагрузки).

lb_kind Тип расписания LVSNAT/DR/TUN。

sorry_server Когда все реальные серверы выходят из строя, сервер извинения берет на себя.

real_server Сервер, который действительно предоставляет услугу.

notify_up / down Сценарий, выполняемый, когда реальный сервер выключен или запущен.

Есть много способов проверить здоровье.

path Запросить путь к реальному серверу.

connect_port проверка работоспособности, если порт открыт, сервер считается нормальным.

connect_timeout, nb_get_retry, delay_before_retry соответственно указывают период тайм-аута, количество повторных попыток и временную задержку для следующей попытки.

Другие варианты временно не поясняются.

переключатель keepalived главный-подчиненный

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

Keepalived настроен только для HA

См. Пример файла конфигурации в каталоге того же уровня этого документа.

Описание:
10.210.214.113 - это резервный компьютер для keepalived, а его файл конфигурации - 113.keepalived.conf
10.210.214.163 - хост с поддержкой активности, а его файл конфигурации - 163.keepalived.conf.
10.210.214.253 - это виртуальный IP-адрес, который представляет собой IP-адрес интрасети, предоставляющий услугу, на сетевой карте eth0.
192.168.1.11 - смоделированный IP-адрес общедоступной сети, предоставляющий услуги на сетевой карте eth1.

Результаты, полученные с помощью команды tcpdump, следующие:

Конфигурация LVS + Keepalived

Обратите внимание, что когда Keepalived используется в сочетании с LVS, обычно используется инструмент ipvsadm для просмотра соответствующего статуса VS. Для использования ipvsadm обратитесь к руководству man.

10.67.15.95 - мастер поддержки активности, VIP - 10.67.15.94, файл конфигурации - 95-lvs-keepalived.conf
10.67.15.96 - мастер поддержки активности, VIP - 10.67.15.94, файл конфигурации - 96-lvs-keepalived.conf
10.67.15.195 - настоящий сервер

При использовании конфигурации LVS + DR + Keepalived вам необходимо добавить правило iptables на реальном сервере (dport добавляется или используется по умолчанию в зависимости от ситуации):

При использовании конфигурации LVS + NAT + Keepalived вам необходимо настроить маршрут по умолчанию от реального сервера до VIP директора. 10.67.15.94 , Вы должны убедиться, что запрос клиента передан 10.67.15.94 На настоящий сервер.

Установить keepalived

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

Вы также можете ввестиRPMУпакуйте, а затем установите.

Описание

Сценарий HA, который мы использовали, выглядит следующим образом: два хоста host113 и host163, IP-адрес внутренней сети находится на сетевой карте eth1, то есть 10.210.214.113 и 10.210.214.163 соответственно, VIP - это IP-адрес общедоступной сети на eth0, IP-адрес - 202.102.152.253, шлюз. Это 202.102.152.1. Когда VIP предоставляет услуги на host113, маршрут по умолчанию на host113 - 202.102.152.1, а сервисный порт - 202.102.152.253:443. Когда host113 выходит из строя и ему необходимо переключить VIP и службы обратно на host163, требуются следующие шаги: во-первых, взять на себя VIP, второй добавить маршрут по умолчанию 202.102.152.1 и третий запустить службу на порту 202.102.152.253:443 .

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

Подавать жалобы

Переключение ведущего-ведомого в Keepalived болезненно, и вам необходимо изменить файл конфигурации или остановить работу одной из сторон. Но поскольку keepalived реализует аварийное переключение (аварийное переключение) через протокол vrrp, это также определяет неудобство ручного переключения между ведущим и ведомым.

Документация Keepalived также очень старая, и мне не удалось найти подходящий документ, я пренебрегал им раньше vrrp_script В этой области многое невозможно понять.

Вдобавок я обнаружил, что мне все больше и больше нравится Keepalived. . .

Читайте также: