🔥Пока вы жарили шашлыки, мы уронили три кластера (нарочно)
Три месяца, три сломанных кластера и 40 открытых эфиров. Собрали, что успели сделать в Ребрейн за это лето.
1. Организовали 3 траблшутинга
Это соревнования, где инженеры чинят сломанный кластер и получают призы за скорость. Если ни разу не участвовал, то можно начать с этих трёх, они доступны бесплатно:
🟢 Kubernetes Hardcore
🟢 Linux & Systemd
🟢 New Year 2026
2. Провели 40 открытых вебинаров
Практикумы от инженеров VK, Яндекса, Wildberries и Сбера, которые мы проводим три раза в неделю по DevOps, Linux и безопасности.
🟢 Смотреть календарь вебинаров
3. Запустили 17 практикумов по новым технологиям
Самыми популярными стали:
↘️ Keycloak
↘️ Proxmox + тренажёры
↘️ FreeIPA + тренажёры
↘️ Patroni + тренажёры
↘️ VictoriaMetrics + тренажёры
4. Провели 3 интенсива
По сетевой безопасности, ИИ-агентам и безопасности операционных систем. Это живые эфиры с инженерами и практика на стендах, где можно сразу задать вопрос и получить фидбэк. Раз в месяц, с разными спикерами. Следующий снова с Васей Озеровым.
Ставь 🔥, если всё лето успевал и на пляж, и на шашлыки, и прокачать стек!
Три месяца, три сломанных кластера и 40 открытых эфиров. Собрали, что успели сделать в Ребрейн за это лето.
1. Организовали 3 траблшутинга
Это соревнования, где инженеры чинят сломанный кластер и получают призы за скорость. Если ни разу не участвовал, то можно начать с этих трёх, они доступны бесплатно:
2. Провели 40 открытых вебинаров
Практикумы от инженеров VK, Яндекса, Wildberries и Сбера, которые мы проводим три раза в неделю по DevOps, Linux и безопасности.
3. Запустили 17 практикумов по новым технологиям
Самыми популярными стали:
4. Провели 3 интенсива
По сетевой безопасности, ИИ-агентам и безопасности операционных систем. Это живые эфиры с инженерами и практика на стендах, где можно сразу задать вопрос и получить фидбэк. Раз в месяц, с разными спикерами. Следующий снова с Васей Озеровым.
Ставь 🔥, если всё лето успевал и на пляж, и на шашлыки, и прокачать стек!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👏6
🔥 Ускоряем CI/CD: новое видео с Дмитрием Куликовым уже на канале
Делимся записью открытого практикума, где разобрали, как ускорить сборку пайплайна в GitLab CI/CD и избавиться от лишней передачи зависимостей между этапами. Краткий конспект👇🏼
🟢 Где теряется время
Каждая лишняя загрузка зависимостей, тяжёлые докер-образы под тесты и последовательный (а не параллельный) прогон разных видов тестирования: из-за этого сборка растягивается на десятки минут вместо секунд.
🟢 Кэш vs Артефакты
Кэш нужен для зависимостей: привязывается к ключу (например, файлу package-lock.json) и не перекачивается заново, пока файл не менялся. Артефакты нужны для готового результата: бинарник, докер-образ, отчёт о тестах, то есть то, что нужно передать дальше или сохранить на время.
🟢 Главная ошибка
Передавать зависимости (node_modules) через артефакты вместо кэша. В демо это добавляло около 7 минут на пустом изменении README, потому что зависимости выкачивались и упаковывались заново при каждом пуше.
🟢 Оптимизация Dockerfile
Если копировать файл зависимостей отдельно от остального кода, слой с npm install кэшируется докером и не пересобирается, пока сами зависимости не менялись.
🟢 Раннер
В конфиге GitLab Runner можно включить pull_policy: if-not-present, чтобы раннер не тянул образ заново, если он уже скачан локально.
Итог: сборка сократилась с 7 минут до 3,25 минуты, больше чем в 2 раза.
Основные элементы конфига (примеры)
🟢 cache: key: files: привязка кэша к конкретному файлу зависимостей
🟢 artifacts: paths / expire_in: что сохранить и на какой срок
🟢 artifacts: reports: junit: результаты тестов прямо в интерфейсе GitLab
🟢 tags: привязка джобы к конкретному раннеру
🟢 pull_policy: ["if-not-present"]: не скачивать образ повторно, если он уже есть
Больше подробностей про раннеры, кэш, артефакты и Dockerfile в полной записи вебинара! 👇🏼
↘️ Смотреть в YouTube
↘️ Смотреть в ВК
Для тех, кто хочет на практике разобраться с CI/CD и инфраструктурой под капотом, можно начать бесплатно с демодоступов к практикумам:
↘️ Начать бесплатно практикум GitLab CI
↘️ Начать бесплатно практикум DevOps: IaC
Делимся записью открытого практикума, где разобрали, как ускорить сборку пайплайна в GitLab CI/CD и избавиться от лишней передачи зависимостей между этапами. Краткий конспект👇🏼
Каждая лишняя загрузка зависимостей, тяжёлые докер-образы под тесты и последовательный (а не параллельный) прогон разных видов тестирования: из-за этого сборка растягивается на десятки минут вместо секунд.
Кэш нужен для зависимостей: привязывается к ключу (например, файлу package-lock.json) и не перекачивается заново, пока файл не менялся. Артефакты нужны для готового результата: бинарник, докер-образ, отчёт о тестах, то есть то, что нужно передать дальше или сохранить на время.
Передавать зависимости (node_modules) через артефакты вместо кэша. В демо это добавляло около 7 минут на пустом изменении README, потому что зависимости выкачивались и упаковывались заново при каждом пуше.
Если копировать файл зависимостей отдельно от остального кода, слой с npm install кэшируется докером и не пересобирается, пока сами зависимости не менялись.
В конфиге GitLab Runner можно включить pull_policy: if-not-present, чтобы раннер не тянул образ заново, если он уже скачан локально.
Итог: сборка сократилась с 7 минут до 3,25 минуты, больше чем в 2 раза.
Основные элементы конфига (примеры)
Больше подробностей про раннеры, кэш, артефакты и Dockerfile в полной записи вебинара! 👇🏼
Для тех, кто хочет на практике разобраться с CI/CD и инфраструктурой под капотом, можно начать бесплатно с демодоступов к практикумам:
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
CI/CD, который собирается 40 минут. Как ускорить?
🔥Бесплатный демодоступ к практикуму DevOps: IaC: https://clck.ru/3VVEwf
🔥Бесплатный демодоступ к практикуму Gitlab CI: https://clck.ru/3VVF3J
Понравилась запись вебинара? Приходи на другие эфиры по DevOps и инфраструктуре: https://clck.ru/3VVEe3
Запись…
🔥Бесплатный демодоступ к практикуму Gitlab CI: https://clck.ru/3VVF3J
Понравилась запись вебинара? Приходи на другие эфиры по DevOps и инфраструктуре: https://clck.ru/3VVEe3
Запись…
👍15❤5🔥3👏1
Всем привет от Васи Озерова и Андрея Шабалина! Теперь на платформе доступны записи интенсивов, которые раньше шли только в прямом эфире.
Не все успевали попасть на интенсив, пока он шёл вживую: у кого-то в этот день дедлайн на проде, кто-то в отпуске, кто-то узнавал об интенсиве, когда набор уже закрылся. Теперь записи можно посмотреть в любое время.
Живые интенсивы с Васей и Андреем мы проводим регулярно и будем проводить дальше. В каждом интенсиве от 4 до 8 записанных занятий + конспекты.
Записи уже доступны по семи темам, и у каждого курса теперь два новых варианта: взять курс вместе с интенсивом или получить запись интенсива отдельно.
🟢 Kubernetes Admin. Ведущий интенсива: Василий Озеров
Поднимешь кластер руками: сгенерируешь сертификаты, развернёшь etcd и соберёшь рабочий control plane, а потом автоматизируешь установку через kubeadm и kubespray. Разберёшься, как обновлять кластер без даунтайма, восстанавливать etcd из снапшота, настраивать сеть через CNI и MetalLB и подключать хранилища через CSI.
↘️ Интенсив Kubernetes Admin
↘️ Курс Kubernetes Admin
↘️ Курс + интенсив
🟢 Kubernetes Base. Ведущий интенсива: Василий Озеров
Разберёшься, как устроены архитектура Kubernetes, API и reconciliation loop, и научишься работать с Pod'ами, Deployment и ReplicaSet. Настроишь Services, DNS и RBAC, разберёшься с ConfigMap, Secret и событиями кластера.
↘️ Интенсив Kubernetes Base
↘️ Курс Kubernetes Base
↘️ Курс + интенсив
🟢 Helm. Ведущий интенсива: Василий Озеров
Освоишь Kustomize: Base, Overlays, патчи и генерацию ConfigMap без единого шаблона. Напишешь Helm-чарт с нуля, разберёшься с hooks, subcharts и OCI-репозиториями, настроишь GitOps-доставку по окружениям и поймёшь, когда брать Helm, а когда Kustomize.
↘️ Интенсив Kubernetes Manifests
↘️ Курс Helm
↘️ Курс + интенсив
🟢 Networks Basics. Ведущий интенсива: Андрей Шабалин
Пройдёшь путь от модели OSI и стека TCP/IP до настройки маршрутизаторов Eltex в GNS3: статическая и динамическая маршрутизация через RIP и OSPF, VLAN, STP и агрегация каналов. Настроишь DHCP, NTP и SSH и разберёшь реальные кейсы с Андреем на финальном Q&A.
↘️ Интенсив Networks Basic
↘️ Курс Networks Basic
↘️ Курс + интенсив
🟢 Network Security. Ведущий интенсива: Андрей Шабалин
Настроишь списки контроля доступа и межсетевой экран: stateful и zone-based firewall, трансляция адресов. Разберёшься с аутентификацией, авторизацией и аудитом, соберёшь события через syslog, мониторинг через SNMP и зеркалирование трафика для анализа.
↘️ Интенсив Network Security
🟢 Grafana. Ведущий интенсива: Василий Озеров
Соберёшь первый дашборд, потом перейдёшь к продвинутым: шаблонизация и переменные. Настроишь оповещения, разграничишь доступ и разберёшь практики, которые пригодятся в проде.
↘️ Интенсив Grafana для визуализации и дашбордов
↘️ Курс Grafana
↘️ Курс + интенсив
🟢 Prometheus. Ведущий интенсива: Василий Озеров
Разберёшься со сбором метрик и языком запросов PromQL. Настроишь мониторинг приложений через Service Discovery и научишься собирать алерты через Alertmanager.
↘️ Интенсив Prometheus для инженеров
↘️ Курс Prometheus
↘️ Курс + интенсив
🎁 До 9 сентября действует скидка на интенсив отдельно и на комплект курс + интенсив.
Если в прошлый раз не попал на эфир, теперь есть время наверстать🤍
Не все успевали попасть на интенсив, пока он шёл вживую: у кого-то в этот день дедлайн на проде, кто-то в отпуске, кто-то узнавал об интенсиве, когда набор уже закрылся. Теперь записи можно посмотреть в любое время.
Живые интенсивы с Васей и Андреем мы проводим регулярно и будем проводить дальше. В каждом интенсиве от 4 до 8 записанных занятий + конспекты.
Записи уже доступны по семи темам, и у каждого курса теперь два новых варианта: взять курс вместе с интенсивом или получить запись интенсива отдельно.
Поднимешь кластер руками: сгенерируешь сертификаты, развернёшь etcd и соберёшь рабочий control plane, а потом автоматизируешь установку через kubeadm и kubespray. Разберёшься, как обновлять кластер без даунтайма, восстанавливать etcd из снапшота, настраивать сеть через CNI и MetalLB и подключать хранилища через CSI.
Разберёшься, как устроены архитектура Kubernetes, API и reconciliation loop, и научишься работать с Pod'ами, Deployment и ReplicaSet. Настроишь Services, DNS и RBAC, разберёшься с ConfigMap, Secret и событиями кластера.
Освоишь Kustomize: Base, Overlays, патчи и генерацию ConfigMap без единого шаблона. Напишешь Helm-чарт с нуля, разберёшься с hooks, subcharts и OCI-репозиториями, настроишь GitOps-доставку по окружениям и поймёшь, когда брать Helm, а когда Kustomize.
Пройдёшь путь от модели OSI и стека TCP/IP до настройки маршрутизаторов Eltex в GNS3: статическая и динамическая маршрутизация через RIP и OSPF, VLAN, STP и агрегация каналов. Настроишь DHCP, NTP и SSH и разберёшь реальные кейсы с Андреем на финальном Q&A.
Настроишь списки контроля доступа и межсетевой экран: stateful и zone-based firewall, трансляция адресов. Разберёшься с аутентификацией, авторизацией и аудитом, соберёшь события через syslog, мониторинг через SNMP и зеркалирование трафика для анализа.
Соберёшь первый дашборд, потом перейдёшь к продвинутым: шаблонизация и переменные. Настроишь оповещения, разграничишь доступ и разберёшь практики, которые пригодятся в проде.
Разберёшься со сбором метрик и языком запросов PromQL. Настроишь мониторинг приложений через Service Discovery и научишься собирать алерты через Alertmanager.
Если в прошлый раз не попал на эфир, теперь есть время наверстать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👏6❤5👍2💯1
Дневник никто не проверит и тройку за поведение не поставят. А вот кластер, который не понимает OSPFv3, рано или поздно уронит половину маршрутов, и разбираться с этим придется не на уроке, а в проде 😉
Поздравляем всех с днем знаний! Чтобы было проще и интереснее изучать новое, делимся календарем вебинаров на сентябрь. Будет много интересных тем: от Linux, DevSecOps до GitOps и Hermes Agent.
↘️ Календарь вебинаров
🟢 OSPFv3. Протокол динамической маршрутизации
1.09 в 19:00 мск. Ведущий: Андрей Шабалин
🟢 GameDay (или Chaos Day): «Тяжело в учении — легко в бою»
3.09 в 20:00 мск. Ведущий: Илья Сачков
🟢 Первое знакомство с ZFS
4.09 в 20:00 мск. Ведущий: Андрей Буранов
🟢 Отправка событий безопасности с Linux-хоста в ELK-стек средствами Auditbeat
8.09 в 19:00 мск. Ведущий: Андрей Шабалин
🟢 Первое знакомство с btrfs
9.09 в 20:00 мск. Ведущий: Андрей Буранов
🟢 DevSecOps: от SAST и DAST до автоматизации с Renovate Bot
10.09 в 19:00 мск. Ведущий: Роман Хохлов
🟢 Централизованное управление доступом (AAA) средствами протокола RADIUS на маршрутизаторах Eltex
15.09 в 19:00 мск. Ведущий: Андрей Шабалин
🟢 Распределенное хранилище DRBD
16.09 в 20:00 мск. Ведущий: Андрей Буранов
🟢 GitOps: как мы перестали ходить в кластер через kubectl и стали спать спокойно
22.09 в 20:00 мск. Ведущий: Кирилл Ряховский
🟢 Hermes Agent изнутри: архитектура, память и практическое развертывание
23.09 в 20:00 мск. Ведущий: Марк Кудрицкий
🟢 Мониторинг производительности в Linux
24.09 в 20:00 мск. Ведущий: Николай Лавлинский
🟢 Безопасность в Angie
29.09 в 20:00 мск. Николай Лавлинский
↘️ Выбрать один вебинар или записаться на все
Поздравляем всех с днем знаний! Чтобы было проще и интереснее изучать новое, делимся календарем вебинаров на сентябрь. Будет много интересных тем: от Linux, DevSecOps до GitOps и Hermes Agent.
1.09 в 19:00 мск. Ведущий: Андрей Шабалин
3.09 в 20:00 мск. Ведущий: Илья Сачков
4.09 в 20:00 мск. Ведущий: Андрей Буранов
8.09 в 19:00 мск. Ведущий: Андрей Шабалин
9.09 в 20:00 мск. Ведущий: Андрей Буранов
10.09 в 19:00 мск. Ведущий: Роман Хохлов
15.09 в 19:00 мск. Ведущий: Андрей Шабалин
16.09 в 20:00 мск. Ведущий: Андрей Буранов
22.09 в 20:00 мск. Ведущий: Кирилл Ряховский
23.09 в 20:00 мск. Ведущий: Марк Кудрицкий
24.09 в 20:00 мск. Ведущий: Николай Лавлинский
29.09 в 20:00 мск. Николай Лавлинский
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍1
🔥 Новый траблшутинг с призами от Васи Озерова!
Твой продакшн лежит, а стандартные iptables -L и tcpdump показывают, что всё чисто? Добро пожаловать в реальный мир современных Linux-систем.
В этом симуляторе инцидента ты останешься один на один со сломанной инфраструктурой: Nginx, Go-приложение и PostgreSQL отказываются общаться друг с другом, хотя каждый сервис запущен и рапортует об успехе. Твоя задача - восстановить связность трехкомпонентного веб-приложения на изолированной виртуальной машине.
В этот раз траблшутинг будет проходить в новом формате:
🟢 Вася проведет эфир по траблшутингу 7 сентября с 19:00-21:00 мск, во время которого будет доступна задача
🏆 Среди всех, кто решит задачу во время эфира, разыграем место на новом Васином интенсиве
🟢 После эфира доступ к инфраструктуре с задачей будет открыт для всех до 16 сентября. Среди остальных участников разыграем классные призы от Васи
🟢 17 сентября Вася проведет эфир с разбором задачи
Что нужно сделать сейчас:
1️⃣ Зарегистрироваться на эфир, 7 сентября 19:00-21:00 мск
2️⃣ Получить бесплатно доступ к траблшутингу на платформе
Встречаемся и решаем задачу вместе с Васей Озеровым 7 сентября в 19:00 мск! Всем удачи🤍
Твой продакшн лежит, а стандартные iptables -L и tcpdump показывают, что всё чисто? Добро пожаловать в реальный мир современных Linux-систем.
В этом симуляторе инцидента ты останешься один на один со сломанной инфраструктурой: Nginx, Go-приложение и PostgreSQL отказываются общаться друг с другом, хотя каждый сервис запущен и рапортует об успехе. Твоя задача - восстановить связность трехкомпонентного веб-приложения на изолированной виртуальной машине.
В этот раз траблшутинг будет проходить в новом формате:
🏆 Среди всех, кто решит задачу во время эфира, разыграем место на новом Васином интенсиве
Что нужно сделать сейчас:
1️⃣ Зарегистрироваться на эфир, 7 сентября 19:00-21:00 мск
2️⃣ Получить бесплатно доступ к траблшутингу на платформе
Встречаемся и решаем задачу вместе с Васей Озеровым 7 сентября в 19:00 мск! Всем удачи
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14❤3👍3
Grafana Loki: в 10 раз дешевле хранение логов, чем в Elasticsearch
Elasticsearch индексирует весь текст лога: каждое слово, каждую строку стектрейса. После первого миллиарда записей счёт за инфраструктуру ELK пугает финансового директора сильнее, чем сам инцидент в проде.
Мы собрали практикум по Grafana Loki, чтобы инженеры прошли путь от однобинарного запуска на одной машине до отказоустойчивого кластера в Kubernetes с объектным хранилищем, мультитенантностью и алертингом прямо из логов.
В программе тебя ждёт:
🟢 Развертывание и масштабирование отказоустойчивых кластеров Grafana Loki в Kubernetes.
🟢 Оптимизация производительности систем логирования и устранение высокой кардинальности меток с помощью LogCLI.
🟢 Проектирование гибридных хранилищ логов на базе S3 (MinIO/AWS) с интеграцией кэширования в Redis.
🟢 Написание сложных запросов LogQL для извлечения метрик, построения графиков RPS и перцентилей на лету.
🟢 Настройка отказоустойчивых пайплайнов сбора логов через Promtail, Vector и Fluent Bit с обработкой Stack Trace.
🟢 Внедрение мультитенантности и разграничения прав доступа к логам на базе Nginx Basic Auth и X-Scope-OrgID.
🟢 Разработка правил алертинга на основе логов с помощью Grafana Loki Ruler и интеграция с Alertmanager.
↘️ Подробная программа
В финальном проекте ты развернёшь в Kubernetes logging-стек для приложения из трёх микросервисов: Loki в режиме Simple Scalable с MinIO, Grafana Alloy как DaemonSet и два тенанта с retention 7 и 90 дней через overrides. Добавишь LogQL-дашборд, алертинг через Ruler и мониторинг самого Loki через Loki Canary.
Практикум уровня Middle. Нужны базовые навыки администрирования Linux и CLI, опыт работы с Docker и Docker Compose, начальный опыт работы с Grafana и понимание Kubernetes: Pod, Deployment, DaemonSet, Helm-чарты. Отдельно мы добавили тренажёры, более сложные практические задачи на инфраструктуре: например, поиск и устранение high cardinality в живом кластере через logcli.
🎁 До 22 сентября действует скидка 5 000 рублей для новых участников
↘️ Практикум Grafana Loki
↘️ Практикум Grafana Loki + тренажёры
Если ты DevOps-инженер, SRE или системный администратор и хочешь на практике научиться проектировать схему меток, разворачивать отказоустойчивый кластер Loki в Kubernetes и укрощать high cardinality в живой инфраструктуре, этот практикум для тебя🤍
Elasticsearch индексирует весь текст лога: каждое слово, каждую строку стектрейса. После первого миллиарда записей счёт за инфраструктуру ELK пугает финансового директора сильнее, чем сам инцидент в проде.
Мы собрали практикум по Grafana Loki, чтобы инженеры прошли путь от однобинарного запуска на одной машине до отказоустойчивого кластера в Kubernetes с объектным хранилищем, мультитенантностью и алертингом прямо из логов.
В программе тебя ждёт:
В финальном проекте ты развернёшь в Kubernetes logging-стек для приложения из трёх микросервисов: Loki в режиме Simple Scalable с MinIO, Grafana Alloy как DaemonSet и два тенанта с retention 7 и 90 дней через overrides. Добавишь LogQL-дашборд, алертинг через Ruler и мониторинг самого Loki через Loki Canary.
Практикум уровня Middle. Нужны базовые навыки администрирования Linux и CLI, опыт работы с Docker и Docker Compose, начальный опыт работы с Grafana и понимание Kubernetes: Pod, Deployment, DaemonSet, Helm-чарты. Отдельно мы добавили тренажёры, более сложные практические задачи на инфраструктуре: например, поиск и устранение high cardinality в живом кластере через logcli.
Если ты DevOps-инженер, SRE или системный администратор и хочешь на практике научиться проектировать схему меток, разворачивать отказоустойчивый кластер Loki в Kubernetes и укрощать high cardinality в живой инфраструктуре, этот практикум для тебя
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤6👍5😁2
Всем привет!
Сегодняшний вебинар GameDay (или Chaos Day): «Тяжело в учении — легко в бою» отменяется в связи с техническими неполадками у спикера.
Позже сообщим новую дату и время проведения вебинара.
Приносим извинения за доставленные неудобства!
Сегодняшний вебинар GameDay (или Chaos Day): «Тяжело в учении — легко в бою» отменяется в связи с техническими неполадками у спикера.
Позже сообщим новую дату и время проведения вебинара.
Приносим извинения за доставленные неудобства!
👍8😁4👏1
🔥Новое видео с Андреем Бурановым по администрированию дисковых систем: работа с LVM уже на канале
Вебинар про LVM в Linux: архитектура (PV, VG, LV), изменение размеров разделов на лету и перенос данных на RAID без остановки сервисов. Смотрите полную запись на любой платформе.
↘️ Смотреть в YouTube
↘️ Смотреть в ВК
Краткий конспект 👇🏼
1. Проблемы классической разметки
При работе с классическими разделами (`/dev/vdb1`, `/dev/vdb2`) администратор жёстко ограничен их физическими границами:
• увеличить можно только последний раздел на диске;
• сдвиг начала раздела ломает суперблок ФС (у ext4 он смещён на 1024 байта, у XFS — в первом секторе) — раздел становится нерабочим;
• любые перемещения блоков требуют остановки служб и размонтирования.
Алгоритм увеличения последнего раздела (ext4):
2. Архитектура LVM
PV (Physical Volume) — диск или раздел, инициализированный под LVM
VG (Volume Group) — пул из одного или нескольких PV
LV (Logical Volume) — раздел внутри VG, на нём создаётся ФС
Пространство делится на экстенты (PE) по 4 МБ — это минимальная единица выделения места.
3. Создание LVM
4. Изменение размера LV
Свободное место из VG можно добавить в любой LV независимо от порядка создания.
Увеличивать ФС можно онлайн без проблем. А вот уменьшение почти нигде не поддерживается на лету: ext4 требует размонтирования, XFS не поддерживает вообще.
5. Перенос на RAID-1 без остановки сервисов
Задача: перенести данные с диска /dev/vde (в VG vgnew`) на зеркало RAID-1 из `/dev/vdb1 и /dev/vde.
При сбое питания pvmove просто начнётся заново — данные не теряются.
6. Тонкие тома и альтернативы
Thin-тома дают overcommit места: физически занимается только то, что реально записано. Удобно для образов ВМ и снапшотов. Но из VG с thin pool почти невозможно безопасно вывести PV — теряется главное преимущество LVM: гибкая миграция дисков.
ZFS и Btrfs сами совмещают RAID, менеджер томов и ФС — LVM поверх них смысла не имеет.
Ключевые выводы
LVM — стандарт де-факто для серверов на Linux: снимает жёсткие границы классических разделов
lvextend -r расширяет том и ФС одной командой без остановки сервисов; уменьшение — почти всегда офлайн-операция
pvmove переносит данные между дисками онлайн — так можно менять диски или переезжать на RAID без простоя
связка mdadm + LVM — стандартное решение для отказоустойчивости в production
Если хочешь узнать больше, начни с бесплатного демодоступа к практикумам:
🔥Начать Linux Basics
🔥Начать Linux: Анализ производительности и тюнинг
🔥Начать Повышение привилегий в Linux
Вебинар про LVM в Linux: архитектура (PV, VG, LV), изменение размеров разделов на лету и перенос данных на RAID без остановки сервисов. Смотрите полную запись на любой платформе.
Краткий конспект 👇🏼
1. Проблемы классической разметки
При работе с классическими разделами (`/dev/vdb1`, `/dev/vdb2`) администратор жёстко ограничен их физическими границами:
• увеличить можно только последний раздел на диске;
• сдвиг начала раздела ломает суперблок ФС (у ext4 он смещён на 1024 байта, у XFS — в первом секторе) — раздел становится нерабочим;
• любые перемещения блоков требуют остановки служб и размонтирования.
Алгоритм увеличения последнего раздела (ext4):
partprobe # или kpartx — сообщить ядру об изменении таблицы разделов
resize2fs /dev/vdb3 # для ext4
xfs_growfs /mnt/point # для XFS
2. Архитектура LVM
PV (Physical Volume) — диск или раздел, инициализированный под LVM
VG (Volume Group) — пул из одного или нескольких PV
LV (Logical Volume) — раздел внутри VG, на нём создаётся ФС
Пространство делится на экстенты (PE) по 4 МБ — это минимальная единица выделения места.
pvs / pvdisplay
vgs / vgdisplay
lvs / lvdisplay
3. Создание LVM
pvcreate /dev/vde
vgcreate vgnew /dev/vde
lvcreate -n lv01 -L 100M vgnew
lvcreate -n lv02 -L 100M vgnew
lvcreate -n lv03 -L 100M vgnew
mkfs.ext4 /dev/mapper/vgnew-lv01
mount /dev/mapper/vgnew-lv01 /mnt/01
4. Изменение размера LV
Свободное место из VG можно добавить в любой LV независимо от порядка создания.
# в два шага
lvextend -L 200M /dev/vgnew/lv01
resize2fs /dev/mapper/vgnew-lv01
# в один шаг
lvextend -r -L 200M /dev/vgnew/lv02
Увеличивать ФС можно онлайн без проблем. А вот уменьшение почти нигде не поддерживается на лету: ext4 требует размонтирования, XFS не поддерживает вообще.
5. Перенос на RAID-1 без остановки сервисов
Задача: перенести данные с диска /dev/vde (в VG vgnew`) на зеркало RAID-1 из `/dev/vdb1 и /dev/vde.
# 1. деградированный RAID-1 на одном диске
mdadm --create /dev/md127 --level=1 --raid-devices=2 missing /dev/vdb1
# 2. добавляем массив в VG
vgextend vgnew /dev/md127
# 3. переносим данные онлайн — ФС остаётся доступна на чтение и запись
pvmove /dev/vde
# 4. убираем старый диск из VG
vgreduce vgnew /dev/vde
pvremove /dev/vde
# 5. добавляем освободившийся диск в массив — начнётся синхронизация
mdadm --manage /dev/md127 --add /dev/vde
При сбое питания pvmove просто начнётся заново — данные не теряются.
6. Тонкие тома и альтернативы
Thin-тома дают overcommit места: физически занимается только то, что реально записано. Удобно для образов ВМ и снапшотов. Но из VG с thin pool почти невозможно безопасно вывести PV — теряется главное преимущество LVM: гибкая миграция дисков.
ZFS и Btrfs сами совмещают RAID, менеджер томов и ФС — LVM поверх них смысла не имеет.
Ключевые выводы
LVM — стандарт де-факто для серверов на Linux: снимает жёсткие границы классических разделов
lvextend -r расширяет том и ФС одной командой без остановки сервисов; уменьшение — почти всегда офлайн-операция
pvmove переносит данные между дисками онлайн — так можно менять диски или переезжать на RAID без простоя
связка mdadm + LVM — стандартное решение для отказоустойчивости в production
Если хочешь узнать больше, начни с бесплатного демодоступа к практикумам:
🔥Начать Linux Basics
🔥Начать Linux: Анализ производительности и тюнинг
🔥Начать Повышение привилегий в Linux
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥2
Всем привет!👋
Нам очень важно, чтобы наши курсы были полезны для вас. Хотим двигаться в правильном направлении - а для этого нужна ваша обратная связь! 👇
📝 Просим пройти вас небольшой опрос из 4 вопросов - это займёт не больше 2-3 минут.
Самый главный для нас - вопрос №4. Именно там мы ждём ваших идей, пожеланий. Помогите нам стать лучше! 💡
🔗 Ссылка на опрос
Спасибо, что развиваете Rebrain вместе с нами! ❤️
Нам очень важно, чтобы наши курсы были полезны для вас. Хотим двигаться в правильном направлении - а для этого нужна ваша обратная связь! 👇
📝 Просим пройти вас небольшой опрос из 4 вопросов - это займёт не больше 2-3 минут.
Самый главный для нас - вопрос №4. Именно там мы ждём ваших идей, пожеланий. Помогите нам стать лучше! 💡
🔗 Ссылка на опрос
Спасибо, что развиваете Rebrain вместе с нами! ❤️
❤9
📨 Очереди сообщений: Погружение в RabbitMQ и Kafka для обработки событий
Синхронные HTTP-вызовы связывают микросервисы в жесткие цепочки. В пиковые нагрузки достаточно сбоя в одном узле (например, в сервисе оплаты), чтобы по цепочке таймаутов упало всё приложение.
Асинхронная коммуникация через брокеры сообщений разрывает эту зависимость: сервис заказов быстро принимает запрос клиента, а фоновые обработчики забирают задачи из очереди по мере готовности.
🐰 RabbitMQ: гибкая маршрутизация
RabbitMQ — классический брокер с развитой маршрутизацией (`direct`, topic, fanout, `headers`) и поддержкой DLQ (dead letter queues). Работает по модели доставки «как минимум один раз» (*at-least-once*).
Пример продюсера (Go, `PublishWithContext` + publisher confirms):
Пример консьюмера (Go, ручное подтверждение):
Синхронные HTTP-вызовы связывают микросервисы в жесткие цепочки. В пиковые нагрузки достаточно сбоя в одном узле (например, в сервисе оплаты), чтобы по цепочке таймаутов упало всё приложение.
Асинхронная коммуникация через брокеры сообщений разрывает эту зависимость: сервис заказов быстро принимает запрос клиента, а фоновые обработчики забирают задачи из очереди по мере готовности.
🐰 RabbitMQ: гибкая маршрутизация
RabbitMQ — классический брокер с развитой маршрутизацией (`direct`, topic, fanout, `headers`) и поддержкой DLQ (dead letter queues). Работает по модели доставки «как минимум один раз» (*at-least-once*).
Пример продюсера (Go, `PublishWithContext` + publisher confirms):
package main
import (
"context"
"log"
"time"
"github.com/rabbitmq/amqp091-go"
)
func main() {
// Подключаемся к RabbitMQ
conn, err := amqp091.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
ch, err := conn.Channel()
if err != nil {
log.Fatal(err)
}
defer ch.Close()
// Для критичных данных в продакшене используйте реплицируемую quorum queue.
// Этот сокращённый пример объявляет обычную durable-очередь.
q, err := ch.QueueDeclare(
"order_queue", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
if err != nil {
log.Fatal(err)
}
body := `{"order_id": 12345, "user_id": 678, "amount": 5000}`
// Создаём контекст для отправки
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// Включаем publisher confirms: persistent-флага и durable-очереди недостаточно,
// чтобы продюсер узнал, принял ли брокер сообщение.
if err := ch.Confirm(false); err != nil {
log.Fatal(err)
}
confirmation, err := ch.PublishWithDeferredConfirmWithContext(ctx,
"", // exchange
q.Name, // routing key
false, // маршрут - заранее объявленная очередь
false, // immediate
amqp091.Publishing{
ContentType: "application/json",
Body: []byte(body),
DeliveryMode: amqp091.Persistent,
})
if err != nil {
log.Fatal(err)
}
acked, err := confirmation.WaitContext(ctx)
if err != nil {
log.Fatal(err)
}
if !acked {
log.Fatal("broker rejected the message")
}
log.Printf("[x] Confirmed: %s", body)
}
Пример консьюмера (Go, ручное подтверждение):
package main
import (
"log"
"github.com/rabbitmq/amqp091-go"
)
func main() {
conn, err := amqp091.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
ch, err := conn.Channel()
if err != nil {
log.Fatal(err)
}
defer ch.Close()
q, err := ch.QueueDeclare(
"order_queue",
true,
false,
false,
false,
nil,
)
if err != nil {
log.Fatal(err)
}
msgs, err := ch.Consume(
q.Name,
"", // consumer tag
false, // auto-ack (false - включаем ручное подтверждение)
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
log.Fatal(err)
}
forever := make(chan struct{})
go func() {
for d := range msgs {
log.Printf("[x] Received: %s", d.Body)
// Обработка сообщения
if err := processOrder(d.Body); err == nil {
d.Ack(false) // Подтверждаем успешную обработку
} else {
log.Printf("[!] Error processing order: %v", err)
// Не делайте бесконечный немедленный requeue: это создаёт горячий цикл.
// В продакшене направляйте сообщение в retry-очередь с задержкой,
// лимитом попыток и последующим переводом в DLQ.
d.Nack(false, false)
}
}
}()
log.Printf("[*] Waiting for messages. To exit press CTRL+C")
<-forever
}
// Заглушка для демонстрации бизнес-логики обработки заказа
func processOrder(body []byte) error {
return nil
}
GitHub
GitHub - rabbitmq/amqp091-go: An AMQP 0-9-1 Go client maintained by the RabbitMQ team. Originally by @streadway: `streadway/amqp`
An AMQP 0-9-1 Go client maintained by the RabbitMQ team. Originally by @streadway: `streadway/amqp` - rabbitmq/amqp091-go
👍5❤1
📌 Ключевой момент: при auto-ack: false брокер считает доставку успешной только после d.Ack(false). При сбое или обрыве связи происходит повторная доставка, поэтому обработчик обязателен должен быть идёмпотентным.
🚀 Kafka: распределённый журнал событий
Kafka — это распределённый commit log с долговечным хранением данных (retention). Топики разделены на партиции (порядок строго гарантирован только внутри одной партиции), а *consumer groups* позволяют параллельно масштабировать чтение.
Пример продюсера (Go, IBM/sarama):
📌 Ключевой момент: WaitForAll ждёт ответа от всех синхронных реплик (ISR). Настройте min.insync.replicas (например, 2 при `replication.factor=3`), чтобы избежать потери данных при отказе одной из реплик.
⚖️ Архитектурный выбор: Что выбрать?
🔹 RabbitMQ — для сложной маршрутизации и точечных задач (обработка заказов, фоновые задачи, отправка писем).
🔹 Kafka — для высокой пропускной способности, логов, аналитики, потоковой обработки и сценариев, где необходимо повторное чтение истории.
🛠 Чек-лист по внедрению асинхронности:
1. Найдите синхронные узлы: Цепочки из 3+ HTTP-вызовов — первые кандидаты на перенос в очередь.
2. Защитите данные (RabbitMQ): Используйте *quorum queues*, *persistent*-сообщения и *publisher confirms*.
3. Обрабатывайте ошибки: Используйте ретраи с экспоненциальной задержкой (джиттером) и уводите неисправимые сообщения в DLQ. Избегайте бесконечных немедленных requeue.
4. Обеспечьте идёмпотентность: Из-за дублирования сетевых пакетов передавайте UUID события и проверяйте по БД/Redis, обрабатывалось ли оно ранее.
5. Мониторьте метрики: Для RabbitMQ отслеживайте *ready/unacked messages*; для Kafka — *consumer lag* и состояние ISR.
🎓 Хотите освоить брокеры сообщений на практике? Открывайте 🔥бесплатный демодоступ🔥:
• RabbitMQ — маршрутизация, кластеризация, DLQ и мониторинг.
• Kafka — партиционирование, consumer groups и тюнинг брокеров.
• Docker — деплой брокеров через docker-compose.
В демодоступе развёрнута полноценная боевая среда. Приходите!
🚀 Kafka: распределённый журнал событий
Kafka — это распределённый commit log с долговечным хранением данных (retention). Топики разделены на партиции (порядок строго гарантирован только внутри одной партиции), а *consumer groups* позволяют параллельно масштабировать чтение.
Пример продюсера (Go, IBM/sarama):
package main
import (
"fmt"
"log"
"github.com/IBM/sarama"
)
func main() {
config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll // Ждём подтверждения от всех синхронных реплик (ISR)
config.Producer.Retry.Max = 5
config.Producer.Return.Successes = true
// Инициализируем синхронного продюсера
producer, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)
if err != nil {
log.Fatal(err)
}
defer producer.Close()
msg := &sarama.ProducerMessage{
Topic: "user-events",
Value: sarama.StringEncoder(`{"event": "login", "user_id": 123}`),
}
partition, offset, err := producer.SendMessage(msg)
if err != nil {
log.Fatal(err)
}
fmt.Printf("[x] Sent to partition %d at offset %d\n", partition, offset)
}
📌 Ключевой момент: WaitForAll ждёт ответа от всех синхронных реплик (ISR). Настройте min.insync.replicas (например, 2 при `replication.factor=3`), чтобы избежать потери данных при отказе одной из реплик.
⚖️ Архитектурный выбор: Что выбрать?
🔹 RabbitMQ — для сложной маршрутизации и точечных задач (обработка заказов, фоновые задачи, отправка писем).
🔹 Kafka — для высокой пропускной способности, логов, аналитики, потоковой обработки и сценариев, где необходимо повторное чтение истории.
🛠 Чек-лист по внедрению асинхронности:
1. Найдите синхронные узлы: Цепочки из 3+ HTTP-вызовов — первые кандидаты на перенос в очередь.
2. Защитите данные (RabbitMQ): Используйте *quorum queues*, *persistent*-сообщения и *publisher confirms*.
3. Обрабатывайте ошибки: Используйте ретраи с экспоненциальной задержкой (джиттером) и уводите неисправимые сообщения в DLQ. Избегайте бесконечных немедленных requeue.
4. Обеспечьте идёмпотентность: Из-за дублирования сетевых пакетов передавайте UUID события и проверяйте по БД/Redis, обрабатывалось ли оно ранее.
5. Мониторьте метрики: Для RabbitMQ отслеживайте *ready/unacked messages*; для Kafka — *consumer lag* и состояние ISR.
🎓 Хотите освоить брокеры сообщений на практике? Открывайте 🔥бесплатный демодоступ🔥:
• RabbitMQ — маршрутизация, кластеризация, DLQ и мониторинг.
• Kafka — партиционирование, consumer groups и тюнинг брокеров.
• Docker — деплой брокеров через docker-compose.
В демодоступе развёрнута полноценная боевая среда. Приходите!
GitHub
GitHub - IBM/sarama: Sarama is a Go library for Apache Kafka.
Sarama is a Go library for Apache Kafka. Contribute to IBM/sarama development by creating an account on GitHub.
🔥5👍3❤1
🔥Уже сегодня в 19:00 мск встречаемся на эфире с Васей Озеровым, вместе решаем задачу по траблшутингу и выигрываем призы!
На эфире Вася будет рассказывать про саму задачу, даст немного теории, пока участники в течение двух часов будут решать задачу. Среди всех, кто решит траблшутинг во время эфира, разыграем место на новом Васином интенсиве.
Что нужно сделать сейчас:
1️⃣ Зарегистрироваться на эфир, сегодня, 7 сентября 19:00-21:00 мск
2️⃣ Получить бесплатно доступ к траблшутингу на платформе
Ссылка на эфир придет на почту за 5 минут до начала, либо вы ее можете найти на платформе в разделе "Вебинары". Также в этом канале публикуем все ссылки на наши эфиры. До встречи!
На эфире Вася будет рассказывать про саму задачу, даст немного теории, пока участники в течение двух часов будут решать задачу. Среди всех, кто решит траблшутинг во время эфира, разыграем место на новом Васином интенсиве.
Что нужно сделать сейчас:
1️⃣ Зарегистрироваться на эфир, сегодня, 7 сентября 19:00-21:00 мск
2️⃣ Получить бесплатно доступ к траблшутингу на платформе
Ссылка на эфир придет на почту за 5 минут до начала, либо вы ее можете найти на платформе в разделе "Вебинары". Также в этом канале публикуем все ссылки на наши эфиры. До встречи!
❤8🔥3👍1
Полтора часа ищешь баг глазами, а потом узнаёшь, что дело было в MTU. Или контейнер падает по OOM-killer, лимиты уже увеличивали трижды, а он падает снова. Знакомо?
На интенсиве учим системному алгоритму поиска причины: анамнез, гипотеза и проверка, план устранения. 6 живых эфиров про Linux, сети, cgroups, Kubernetes и мониторинг. Смотрим, где реально ломается система, и разбираем это с tcpdump, cgroups, pprof и Prometheus в руках.
Что будет:
Программа живых классов:
29.09 - Алгоритм траблшутинга
06.10 - Сеть в Linux: путь пакета и размер пакета
13.10 - Процесс внутри cgroup: лимиты, рантайм и пул
20.10 - Kubernetes: трафик и жизненный цикл пода
27.10 - Путь версии: от коммита до продакшена
03.11 - Путь метрики: почему прибор не видит происходящего
↘️ Узнать подробности и занять место
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥2