en
Feedback
DevOps от первого лица

DevOps от первого лица

Open in Telegram

Пишу реальные истории из АйТи о том как: 👨‍💻 пишу код 🏗 строю инфраструктуру 🧨 шатаю продакшен Полезные заметки: https://byurrer.ru/

Show more
337
Subscribers
No data24 hours
No data7 days
No data30 days
Posts Archive
🔃 Ребалансировка реплик партиций топика Kafka ❗️ О проблеме на скриншоте узнали из другого триггера бизнес-метрики. На скрин
🔃 Ребалансировка реплик партиций топика Kafka ❗️ О проблеме на скриншоте узнали из другого триггера бизнес-метрики. На скриншоте видно что третья партиция топика имеет только лидера, а реплики недоступны. А в самой теме min.insync.replicas == 2, это значит что сообщения поступающие в партицию 3 не будут приняты, потому что ни одна реплика не сможет подтвердить прием из-за недоступности. 🐞 Причины выяснить не удалось, по логам не нашли вменяемой информации. Есть 2 решения: ✔️ быстрое: изменить min.insync.replicas на 1, тогда нам больше не нужно подтверждение от реплик, но оставлять на продакшене такое нежелательно ✔️ ребалансировка реплик партиции: это механизм ввода в кластер новых брокеров, но можно провести пользовательскую ребалансировку самостоятельно составив ее план 👉 Мы сделали сначала первый вариант чтобы убрать стопор из шины данных, а потом применили второй после более углубленного изучения вопроса. Проблема решилась.

📚 Краткий отзыв о книге "Python ИСЧЕРПЫВАЮЩЕЕ РУКОВОДСТВО" У меня по работе попадаются задачи, которые либо уже частично реш
📚 Краткий отзыв о книге "Python ИСЧЕРПЫВАЮЩЕЕ РУКОВОДСТВО" У меня по работе попадаются задачи, которые либо уже частично решены, либо их решение сподручнее на python. Как бы я не хотел, но все вело к python'у. 📈 В книге постепенная подача материала. Сначала основы в виде запуска скриптов, типы и операции. Обработка данных, структура и последовательность выполнения. Объекты, протоколы, ООП, модули, пакеты. Кратко рассматривается вопрос ввода/вывода. А под конец справочник по стандартной библиотеке. 👉 Есть отдельная глава про генераторы (yield), которая объясняет не только что это такое, но и на примерах показывает выгоду от их использования. 💡Оказывается в python есть лаконичные и выразительные средства, например списковые включения и менеджмент контекста with, что приятно порадовало. ⚡️ Новичкам в python рекомендую, погружает не глубоко, но достаточно чтобы начать работать. P. S. обложка интересная - Адам и Ева у древа познания добра и зла, а на дереве python ...

🔬 Как найти IPMI на плате? Продолжаю тему домашнего сервера. На этот раз кратко и без деталей расскажу как можно обнаружить IPMI на материнской плате с одного взгляда, ну почти) Ранее я писал как пришел к выводу что на моей плате Supermicro X9DBL-I нет IPMI, а на недавно приобретенной Asus Z9PE-D16/2L есть. https://byurrer.ru/ipmi-detect #article

❄️ Заканчивается 2023 год. В этом году я начал вести этот канал, хотел узнать что это и как. Мне понравилось ☺️, в следующем году планирую продолжать, четкой стратегии пока нет, но эпик уже записан) 👉 В этом году мы усиленно работали над Sentry и домашними серверами. Обе темы еще не до конца раскрыты и получат свое продолжение в новом году. ⛄️ Всех с наступающим новым годом, желаю здоровья, счастья, любви и успехов 🎉

⚡️ На хабре вышла вторая статья по внедрению Sentry в разработку! 👨‍💻 После отпуска написание статьи пошло намного быстрее. В статье рассматриваем: ✔️ обзор релизов в Sentry ✔️ общие возможности клиентов ✔️ клиент Sentry для php и отправку релизов ✔️ внедряя Sentry в Javascript сталкиваемся с sourcemaps ✔️ боремся с размером бандла для Javascript ✔️ пробиваемся через блокировщиков рекламы ✔️ кратко обозреваем некоторые решения проблем на стороне web-интерфейса Sentry ✔️ и наконец отвечаем на вопрос: когда отправлять события в Sentry? Как и в прошлый раз статья снабженами скринами и мемами для лучшего понимания ситуации :) В следующий раз рассмотрим менеджмент issue в Sentry и поговорим о тех преткновениях, с которыми мы столкнулись после всего цикла внедрения. #article #sentry

Пришла ОЗУ 2x32gb (итого 64gb) для моего ноутбука Machenike S15C. Заказывал на ozon. 🧐 Продаван ноутбука заверил что поддерж
+3
Пришла ОЗУ 2x32gb (итого 64gb) для моего ноутбука Machenike S15C. Заказывал на ozon. 🧐 Продаван ноутбука заверил что поддерживается, а продаван ОЗУ сказал что максимум 2x16gb. Для меня 32gb кажется маловато, если есть возможность, то надо прокачать до максимума. В итоге рискнул и купил 3x32gb, подошло, memtest86 успешно завершился за ~8 часов. 😜 Теперь можно открывать бесконечное количество вкладок в браузере и неконтроллируемо запускать редакторы от JetBrains) P.S. немного поковырял внутренности, обслужил камни, возможно будет обзор.

Пришел корпус XPG DEFENDER, заказывал на ozon за ~6800р. Произвел сборку своей новой серверной платы и теперь могу дать некот
+9
Пришел корпус XPG DEFENDER, заказывал на ozon за ~6800р. Произвел сборку своей новой серверной платы и теперь могу дать некоторую оценку: ✔️ в него помещаются платы вплоть до E-ATX/SSI-EEB ✔️ тяжелый, стенки толстые и прочные ✔️ боковая стенка толстое закаленное стекло ✔️ быстросъемные решетки на фронтальной части, внизу под блоком питания и на верху ✔️ между верхом материнской платы и верхом корпуса есть достаточное пространство, удобно при монтаже, сюда же можно накинуть вентиляторы ✔️ кабель-менеджмент приятный, в корпусе прибраны провода на передней панели управления, а в боковой стенке хватает места, хотя там всего 1,7мм, провода моего модульного БП дотянулись до питания платы без удлинителей ✔️ съемные заглушки PCI ➖ нерегулируемые вентиляторы в комплекте, лучше бы без них но дешевле 😇 Выглядит действительно мощно и элегантно. В сравнении с предыдущим корпусом XPG DEFENDER лучше, приятнее, удобнее, практичнее, однако он больше, тяжелее и дороже. Я доволен, имхо, стоит своих денег.

📚 10 прочитанный книг. Часть первая Начинаю серию статей переосмысления раздела о литературе на своем блоге. Имхо, развернутая рецензия каждой книги несет мало ценности, да и мне это уже не так интересно. Поэтому отныне буду группировать рецензии пачками. Это первый десяток прочитанных мной книг с конца 2021 по начало 2023 года (чуть больше одного года), которые действительно оказали на меня влияние и позитивно сказались на моей профессиональной деятельности. Кстати, на следующий год уже составил примерный план литературы. - Из основного: хочу добить "Философия DevOps", "От монолита к микросервисам" и "Чистая архитектура". - Затем "Python. Исчерпывающее руководство" и надо глянуть "Предметно-ориентированное проектирование. Самое основное", а то я так и не добрался до этой книги в этом году. - Время от времени пытаюсь осилить двух мастадонтов: "Unix и Linux руководство системного администратора" и "Компьютерные сети". ❓Кто что планирует читать, поделитесь, интересно) https://byurrer.ru/10-books-1 #article

⚡️ Шатание сетки между узлами Crate и падение кластера В ~4:30 приходит звонок от мониторинга: количество шардов в кластере Crate уменьшилось, со всеми вытекающими. Не долго думая начал поднимать упавшие узлы, но не тут-то было - службы Crate на других узлах начали падать со статусом Killed. И так по кругу: поднимаю одни, а падают другие. 🕵️ У нас уже была подобная ситуация и во время прошлого инцидента я изучал логи. Судя по записям: конкретная нода перед падением пытается соединиться с другими нодами на протяжении некоторого времени, но не может, а затем в syslog можно наблюдать записи oom-killer. Как и в прошлый раз решили инцидент так: - полная одновременная остановка кластера (stop всех служб Crate) - полный запуск (start всех служб Crate) Хорошо что есть Ansible 🥳 #duty #incident

🧙 Неблагоприятный день для деплоя в продакшен Не знаю совпадение или есть в этом смысл: по календарю деплоев сегодня у меня неблагоприятный день (близнецы), так оно и произошло ... С пятницы подготовили код, получили аппрувы и нужно было сегодня деплоить, однако уже была вторая половина дня и у нас появились дополнительные проблемы: ❗️ Внезапно тесты стали выполняться в 2 раза медленее, а затем один из раннеров вообще перестал отвечать, пришлось перезагружать машину. ❗️ После перезагрузки один из сервисов не мог запуститься - пришлось переустанавливать контейнер. ❗️ Когда час ожидания и починки подготовительного пайплайна закончился - пришли разработчики с очень срочным хотфиксом, а после мержа нужно ждать подготовительный пайплайн. ❗️ Мы (DevOps) завозили в код новые инфраструктурные компоненты взамен старых, и я второпях забыл со старого компонента скопировать опцию, которая менялась при тестах, в итоге тестовые пайплайны на резервном проде рандомно падали - зато посидели с тимлидами поковыряли код, бизнес-логику и конфиги. В итоге: сегодня продакшен спасен от наших правок, после окончания рабочего дня решили не выкатывать на основной продакшен сервер, может оно и к лучшему 😂 👉 Для себя я сделал вывод: деплой требует времени, каким-бы простым и продуманным он не был, если не хватает запаса времени - лучше не деплоить, а если начал - не продолжать. ❓ А у вас были совпадения с календарем по неблагоприятным дням для деплоя?) #production

📟 Б/у рынок серверных материнских плат. Мейнстрим сокет lga 2011. После сборки домашнего сервера, я более месяца ежедневно мониторил Авито на предмет более углубленного изучения б/у рынка серверных материнских платы. За полгода просмотра объявлений у меня сформировалось некоторое представление, которым хочу поделиться, дабы более опытные смогли скорректировать мое видение, а неопытные получили основу. ❗️ Под б/у рынком я подразумеваю Авито. ❗️ На данный момент я рассматриваю только двухпроцессорные материнские платы с процессорами intel. ⚡️ Мейнстрим на б/у рынке lga 2011. Причем бывает он в трех версиях v1, v2 (редко), v3. Мейнстрим значит что материнские платы, процессоры и охлаждение в достаточном количестве для выгодной сборки. 📚 Сравнение версий можно почитать здесь или посмотреть тут (и еще тут). Кратко затронем сравнение мощности и цены: - v1 - цена от ~8 000р в среднем ~11 000р, CPU до 12 ядер. Топовый XEON E5 2697 v2 до 3000р, а чуть менее мощный E5 2696 v2 до 2000р. Cписок и характеристики E5 26xx v2. - v3 - цена вырастает почти в 2 раза вместе с мощностью и ассортиментом, CPU до 22 ядер. Топовый E5 2696 v4 можно найти за 8000р и за 22000р (уверен если помониторить то найдутся приемлемые варианты). Список и характеристики E5 26xx v4. ✨ Из более дешевых аналогов lga 1366/1356 (CPU мощнее) - такие же разъемы для куллеров, но CPU слабее. У меня X9DBL-I на lga 1356 с 2-мя топовыми для этого сокета CPU XEON E5 2470 v2. ⚡️ Если брать с перспективой - то не ниже чем lga 2011 v1. Однако, не все материнские платы поддерживают топовые CPU. Например GA-7PPSH2, которую недавно можно было взять за 5225р максимально поддерживает CPU с тепловыделением до 95w, а это 10 ядерный E5 2660 v2 что примерно тоже что XEON E5 2470 v2 топ на lga 1356. Небольшая подборка объявлений lga 2011 v1, которые, по моему мнению заслуживают внимания (или надо было во время брать): - Supermicro x9dr3-ln4f+ - Supеrmiсrо X9DRL-IF - Supermicro X9DRL-IF-YI01B - Gigabyte GA-7ppsh2 - Asus z9pe-d16 - Аsus Z9РЕ-D16/2L 👉 Ссылка на отфильтрованный список плат на сокете lga 2011.

Ситуация: клиент отправляет текст/картинки/прочее, а приложение кладет в БД (семейство mysql), utf8mb4 должен обработать любо
Ситуация: клиент отправляет текст/картинки/прочее, а приложение кладет в БД (семейство mysql), utf8mb4 должен обработать любой хлам (нет). 😬 И все было хорошо, пока клиент не отправил gif:
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect string value: '\x80\x00\x00\x00\x00\x00...'

Хотя вставка осуществляется в текстовый столбец, а не в datetime. 🔘 Варианты кодировок (character_set_*) не помогли. ✔️ Опытным путем было выявлено что sql_mode=STRICT_TRANS_TABLES не дает пройти запросу (на хабре). Точнее без него запрос генерирует warning, а с этим режимом уровень повышается до error. ✔️ Однако, даже в STRICT режиме можно понизить уровень до warning используя INSERT IGNORE и запрос пройдет. 👉 Но этому жуткому костылю не место на проде! Хотя живем же. Для бинарных данных нужно использовать blob. Гипотеза причем здесь datetime: ❓в таблице есть datetime, который CURRENT_TIMESTAMP. В gif есть нуллтерминалы, из-за них часть бинарных данных гифки переходит на столбец с datetime. #db #incident

🎛 Установка Proxmox на RAID1 через Debian Установим Proxmox на RAID1 из двух дисков через установку Debian, потому что через образ Proxmox у нас нет возможности вручную сформировать RAID массив с файловой системой ext4. ❗️ Есть еще один способ: установить Proxmox из официального образа, перенести загрузчик в EFI разделы на дисках, а затем перенести корень на MD устройство. Но это отдельная история. ⚡️ Мы строим отказоусточивый сервер, а значит загрузка ОС должна быть с любого диска, и здесь сразу возникают проблемы grub, BIOS, fstab. Но это все решаемо. Немного затронем тему миграции данных со старого Proxmox на новый. https://byurrer.ru/proxmox-install-raid1-debian #article

📚 Апгрейд сервера и сбор материалов для ретроспективы Завершил апгрейд своего сервера: ⚡️ Поменял CPU, был XEON E5 2420 (6 я
+8
📚 Апгрейд сервера и сбор материалов для ретроспективы Завершил апгрейд своего сервера: ⚡️ Поменял CPU, был XEON E5 2420 (6 ядер, 12 потоков на каждый CPU) стало XEON E5 2470 V2 (10 ядер, 20 потоков на каждый CPU), это максимум на сокете LGA 1356. ⚡️ Заменил стоковые куллеры на башенные, наблюдаю уменьшение температуры почти в 2 раза. В этот раз монтаж куллеров не вызвал негативных эмоций, все прошло гладко. ⚡️ Упорядочил кабель-менеджмент. Собираю материалы для написания статьи "как я собирал домашний сервер с нулевыми знаниями в железе". Хочется подвести итог, разобрать нюансы и ошибки, подсчитать затраты. ✨ Кому интересно, вот первое упоминание про сервер. Все это приключение длилось 6 месяцев, с разной интенсивностью. Что-то было куплено и не пригодилось, что-то колхозилось на коленке (например удлинитель питания CPU, а может кто помнит температуру ОЗУ?). Но приключения с этим сервером подходят к логическому завершению. УРА 🎉 👉 Бонусом немного фото в разные периоды.

💾 Создание настройка и мониторинг RAID1 Вот и я добрался до использования RAID1. RAID1 - избыточное хранение данных, зеркалирование. ⚡️ Ставим N дисков, а используем как 1 ⚡️ Кажется нерационально, но не хочется в случае поломки диска ломать голову как восстановить данные. В процессе создания ничего сложного: - чистим диски и создаем таблицу разделов - создаем RAID1 массив на выделенных разделах - создаем файловую систему и помещаем в автозагрузку 📚 Консольные средства мониторинга тоже рассмотрим. https://byurrer.ru/storage-raid1 #article #raid

🎢 Gitlab CI & sourcemaps in Sentry Внедряя Sentry в проекты, столкнулись с необходимостью пробрасывать sourcemaps для javascript между разными этапами нашего конвейера. Использовали для этого привычный нам sentry-cli: 1) билдим проект 2) помечаем .min.js и .map меткой debugId чтобы в Sentry у нас был читаемый код и нормальный стектрейс 3) заливаем помеченные файлы в Sentry 🤯 Почему 3 разных этапа: после каждого этапа полученный результат может быть использован, например загружен в объектное хранилище для дальнейшего использования. Объединить мы их не можем, потому что этапы подготовки (1 и 2) происходят до момент деплоя, а таких подготовительных моментов до деплоя может быть с десяток и создавать десяток пустых релизов в Sentry, крайне не хочется. 🗃 Если шарить данные между этапами, то на ум сразу приходит cache. Удобно и надежно. Неоднократно это позволяло ускорить конвейер и откинуть этап инсталяции пакетов composer или npm. Админ задал резонный вопрос: как и когда очищается этот кэш? В документации по ссылке выше, можно найти раздел про очистку cache, вручную. Не пойдет ... 🧐 Недолгие поиски наводят на issue по поводу expired в cache также как у артефактов. Судя по всему за 4 года, с момента создания issue ситуация не сдвинулась с места. Поискав сам кэш на сервере gitlab-runner он был найден, а все файлы запакованы в zip. К слову все кэши лежали в одном docker volume, потому что у нас executor docker. 🐳 Теперь идем в документацию по docker executor и видим рекомендацию использовать clear-docker-cache в кроне для очистки неиспользуемых томов и контейнеров. Видимо так и поступим) ❓А вы что используете для шэринга данных между этапами конвейера не заполняя место этим шэрингом до отказа?) #sentry #gitlab

💾 Диски, RAID1 и другие новости кратко Пришли все диски и большую часть выходных я провел за их установкой в домашний сервер: - 2 SSD по 256гб под систему - 2 NMVE по 1тб под данные для сервера 👉 По 2 для того чтобы объединить их в RAID1 массив, на случай если один выйдет из строя то второй будет работать, а мне нужно будет оперативно заменить сломанный диск. Да, избыточно, но не хочется в случае поломки диска ломать голову как восстановить данные. Тем более что исследования google (из книги "Unix и Linux руководство системного администратора") показали что: - технология памяти не имеет отношения к надежности - даже среди самых надежных моделей SSD у 20% наблюдалась 1 неисправимая ошибка чтения, у менее надежных 63%. ❗️ И несмотря на меньший уровень отказов среди SSD по сравнению с HDD это не отменяет возможных рисков. 😔 ProxMox 8 удалось поставить только через установку Debian, потому что установщик образа ProxMox не поддерживает ручное формирование RAID1 массива. А с сетью пришлось повозиться (и нет, по ссылке не заработало), к слову почти после каждой новой инсталяции ProxMox я сталкиваюсь с проблемами в сети. 🧐 Инсталировать grub на второй диск получилось только через копирование /boot/efi на выделенный EFI раздел второго диска, однако при этом если первый диск убирать из массива и пытаться загрузитсья со второго, то слетают настройки BIOS, нужно повторно руками выставлять и все загружается. 🗃 По ходу дела обнаружился еще прикол: fstab потому что монтирует /boot/efi с первого (вынутого диска), опция nofail помогает. Со старого ProxMox бэкапами вынес виртуалки на новый - завелись почти без проблем. 🥳 Прикольно вставлять и вынимать произвольные диски наблюдая как система продолжает бесперебойно работать) За время работы собралось много материалов, постепенно буду оформлять в статьи на блог. 🎉 Заказал последнюю часть апгрейда своего сервера: XEON E5 2470 v2 (10 ядер, 20 потоков) 2шт по 1000р с Авито. На выходных буду ставить и заменять стоковые куллеры на башенные (купил их изначально, но потом захотел попробовать стоковые).

⚡️ На хабре вышла наша первая статья по установке и настройке Sentry (наконец-то). Ура! 👨‍💻 Статья писалась более месяца, снабжалась уместными схемами и мемами. На протяжении нескольких месяцев мы с вами разбирались с Sentry: ✔️ как транспортировать события для Sentry через fluentdеще), а здесь тестовый стенд ✔️ подключали ldap и обновлялись ✔️ переделывали транспортировку для фронта, а здесь тестовый стенд ✔️ собирали логи от Sentry ✔️ расследовали потерю событий и все-таки решили ✔️ делали свой sentry клиент для php (были на то веские причины) ✔️ учились мониторить Sentry с точки зрения обслуживания Как вы могли заметить по названию это только первая часть из серии статей о Sentry. Надеюсь получится довести серию до финала. В следующей статье поговорим про Sentry с точки зрения использования в разработке, оказывается здесь тоже много приколов. 🤝 Спасибо моим коллегам поддержавшим меня в этом начинании ) #article #sentry

🧪 Модификация BIOS для поддержки NVME через PCI Захотелось поставить NVME накопитель на свою плату Supermicro X9DBL-I через
+1
🧪 Модификация BIOS для поддержки NVME через PCI Захотелось поставить NVME накопитель на свою плату Supermicro X9DBL-I через PCI-E. Как хранилище NVME работает без проблем из под ОС, но загружать ОС с него не получается - BIOS не поддерживал NVME. ❗️ Нельзя вот так просто взять и загрузить ОС c NVME на старых материнских платах. 🧐 Обновление прошивки BIOS не помогло, драйвер NVME не завезли. 👉 На просторах интернета удалось собрать информацию как добавить в BIOS поддержку NVME дисков ... и оно работает, но не без приколов. По ходу дела: - познакомимся с бифуркацией PCI-E - заденем UEFI - раскопаем форумы в поисках истины - провернем рискованную замену модифицированного BIOS материнской платы - в конце поговорим о проблемах https://byurrer.ru/modify-bios-nvme #article

Недавно обновил прошивку BIOS на своей плате X9DBL-I, а сейчас писал статью про модификацию прошивки BIOS для поддержки загру
Недавно обновил прошивку BIOS на своей плате X9DBL-I, а сейчас писал статью про модификацию прошивки BIOS для поддержки загрузки ОС с NVME диска через PCI-E. Собирал материалы и заглянул в раздел BIOS Hardware Health Configuration и внезапно теперь есть показания температуры плашек ОЗУ (DIMM на скрине) 😱 ❓ Вопрос получения температуры плашек ОЗУ некоторое время был насущным, пока я не нашел костыльный вариант в виде внешних термометров. А теперь вспомним что на этой плате нет IPMI, значит: ✔️ плашки имеют датчики показаний температуры и их можно опросить из ОС ✔️ для предыдущего пункта не нужен IPMI, есть иные механизмы Но быстрый тест sensors не дал результатов. Полагаю, можно сдуть пыль с записок по исследованию вопроса получения температуры плашек ОЗУ и снова этим заняться 🕵️‍♂️