tgindex
DevOps | Вопросы собесов

DevOps | Вопросы собесов

Статистика

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

Последний пост
11:05
Последнее чтение
18:22
Постов за неделю
9
Всего постов
24
Тип
открытый
Язык
русский
Категория
Технологии (по похожим)
В каталоге с
12 авг.
Подписчики
5 534
+2 за 4 дн.
Сутки
+1
+0,02%
Неделя
 
Месяц
 
Просмотров на пост
688
20 постов
Вовлечённость
12,4%
к подписчикам
Постов в день
1,3
всего 24
Упоминаний
2
каналов
Охват размещения
оценка
1/24сутки в ленте
499
1/48двое суток
571
1/72трое суток
616

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 11:0521414

    🤔 Как бы вы настроили уведомления для сервисов которые находятся без интернета полностью локализованы закрыты от всего извне? Для настройки уведомлений в изолированной сети без доступа к интернету используйте локальные инструменты и системы. Основные методы включают локальные почтовые серверы, мессенджеры и системы управления инцидентами. 🚩Локальный почтовый сервер (SMTP) 1⃣Установка sudo apt update sudo apt install postfix 2⃣Настройка Отредактируйте /etc/postfix/main.cf myhostname = local.example.com mydomain = example.com myorigin = $mydomain inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain relay_domains = $mydestination 3⃣Перезапуск Postfix sudo systemctl restart postfix 4⃣Проверка echo "Test email" | mail -s "Test Subject" user@example.com 🚩Локальный мессенджер (Mattermost) 1⃣Установка Mattermost Следуйте [документации](https://docs.mattermost.com/install/self-managed-install.html). 2⃣Настройка Создайте каналы и пользователей. 3⃣Интеграция с мониторингом Используйте веб-хуки Mattermost для уведомлений. 🚩Системы управления инцидентами (Zabbix) 1⃣Установка Zabbix Следуйте [документации](https://www.zabbix.com/download). 2⃣Настройка Настройте хосты, триггеры и действия. 3⃣Настройка уведомлений Медиатипы: Настройте Email и SMS. Пользователи: Создайте пользователей и уведомления. 🚩Локальный стек мониторинга (Prometheus, Alertmanager) 1⃣Установка Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz tar xvf prometheus-2.26.0.linux-amd64.tar.gz cd prometheus-2.26.0.linux-amd64 ./prometheus --config.file=prometheus.yml 2⃣Установка Alertmanager wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz tar xvf alertmanager-0.21.0.linux-amd64.tar.gz cd alertmanager-0.21.0.linux-amd64 ./alertmanager --config.file=alertmanager.yml 3⃣Настройка алертинга в Prometheus groups: - name: example-alerts rules: - alert: HighCPUUsage expr: avg_over_time(node_cpu_seconds_total{mode="idle"}[5m]) < 20 for: 2m labels: severity: critical annotations: summary: "High CPU usage detected" description: "CPU usage is above 80% for more than 2 minutes" 4⃣Настройка Alertmanager global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@local.example.com' route: receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: - to: 'admin@local.example.com' send_resolved: true Ставь 👍 и забирай 📚 Базу знаний

  • видео или голосовое, без подписи

  • 22:19349210

    🤔 Как дебажить поды в Kubernetes? Когда под (Pod) не работает или ведёт себя странно, нужно уметь его дебажить. 🟠Проверить статус пода Сначала смотрим, работает ли под вообще kubectl get pods 🟠Посмотреть логи контейнера Если под запустился, но работает странно, смотрим логи: kubectl logs pod-name Если в поде несколько контейнеров: kubectl logs pod-name -c container-name Если под перезапускается, а нам нужны старые логи: kubectl logs pod-name --previous 🟠Проверить события (`describe`) Смотрим подробную информацию о поде: kubectl describe pod pod-name 🟠Зайти внутрь контейнера (`exec`) Если под запущен, можно подключиться внутрь и посмотреть файлы, процессы: kubectl exec -it pod-name -- /bin/sh Если в контейнере есть только bash: kubectl exec -it pod-name -- /bin/bash Полезные команды внутри контейнера: ps aux # Смотрим запущенные процессы netstat -tulnp # Проверяем открытые порты env # Проверяем переменные окружения cat /etc/resolv.conf # Проверяем DNS 🟠Проверить манифест пода (`get pod -o yaml`) Если под ведёт себя странно, можно посмотреть его полное описание: kubectl get pod pod-name -o yaml 🟠Проверить ресурсы (describe node) Иногда под не запускается из-за нехватки CPU или памяти. Проверяем узел (node): kubectl describe node node-name Если проблема с ресурсами, будет что-то вроде: Warning FailedScheduling insufficient memory 🟠Проверить сеть (`nslookup`, `ping`, `curl`) Если под не может достучаться до сервиса, тестируем сеть: kubectl exec -it pod-name -- nslookup service-name kubectl exec -it pod-name -- ping 8.8.8.8 kubectl exec -it pod-name -- curl http://service-name:8080 🟠Дебажить с помощью `kubectl debug` (Kubernetes 1.23+) Если под не стартует, можно запустить дебажный контейнер kubectl debug pod-name -it --image=busybox Ставь 👍 и забирай 📚 Базу знаний

  • 14 авг.405удалён 12:11

    видео или голосовое, без подписи

  • 🤔 Удалил файлы, но место не очищается, в чем дело? Если вы удалили файлы, но место на диске не освободилось, это может происходить по нескольким причинам. 🚩Файл все еще используется процессом Если файл удален, но он открыт каким-либо процессом, его содержимое остается в памяти или файловой системе до завершения работы этого процесса. Это называется "удаление с дескриптором". 🟠Как проверить: Используйте команду lsof (list open files), чтобы найти процессы, удерживающие файл lsof | grep deleted 🟠Как исправить Перезапустите процесс или завершите его с помощью kill: kill -9 <PID> 🚩Файл удален, но он находился в другом файловом пространстве Например: - Файл был удален внутри Docker-контейнера, но место занято в образе. - Файл находился на смонтированном диске, и удаление произошло в другом контексте. 🟠Как проверить Убедитесь, что вы работаете в правильной файловой системе: df -h 🟠Как исправить Убедитесь, что удаление происходит в нужной директории или файловой системе. 🚩Файл был удален из директории, но находится в другой ссылке (hard link) Если файл имеет несколько жестких ссылок, удаление одного из них не освободит место до тех пор, пока не удалены все ссылки. 🟠Как проверить Используйте команду find, чтобы найти оставшиеся ссылки: find / -samefile <имя_файла> 🟠Как исправить Удалите все ссылки на файл. 🚩Файл был удален, но находился в файловой системе с квотой Если используется файловая система с ограничением (например, квоты пользователей или групп), возможно, квота пользователя исчерпана, и это мешает очистке. 🟠Как проверить Проверьте квоты: quota -u <username> 🟠Как исправить Убедитесь, что квоты настроены правильно, или освободите больше места. 🚩Кэшированные данные или временные файлы Иногда удаленные файлы остаются в виде кэша, временных данных или не удаляются из корзины. 🟠Как проверить Очистите кэш или проверьте корзину. Например, для очистки временных файлов sudo du -sh /tmp sudo rm -rf /tmp/* 🟠Как исправить Удалите временные файлы, очистите кэш: sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches Ставь 👍 и забирай 📚 Базу знаний

  • 13 авг.401удалён 15 авг.

    видео или голосовое, без подписи

  • 🤔 Что такое squash в Docker? В Docker термин "squash" (от англ. "раздавить", "сплющить") относится к процессу объединения нескольких слоев образа Docker в один. Это делается для уменьшения размера итогового образа и оптимизации хранения. 🚩Зачем нужен `squash`? Docker-образы состоят из последовательности слоев. Каждый слой создается на основе команд в Dockerfile. Например, если ваш Dockerfile выглядит так: FROM ubuntu:latest RUN apt update && apt install -y nginx RUN echo "Hello, World!" > /usr/share/nginx/html/index.html 🚩Как использовать `squash`? В Docker squash можно выполнить с помощью флага --squash при сборке образа: docker build --squash -t my-squashed-image . Для включения экспериментального режима: 1. Открываем /etc/docker/daemon.json (или создаем, если его нет). 2. Добавляем строку "experimental": true. 3. Перезапускаем Docker: systemctl restart docker 🚩Пример с `squash` Без --squash docker history my-image С --squash docker build --squash -t my-squashed-image . docker history my-squashed-image Ставь 👍 и забирай 📚 Базу знаний

  • 13 авг.498удалён 14 авг.

    видео или голосовое, без подписи

  • 🤔 Как решить проблему, если Jenkins не видит merge request и ветки из GitLab? - Убедиться, что используется GitLab Plugin. - Включить webhook из GitLab. - Установить refspec: - +refs/merge-requests/*/head:refs/remotes/origin/mr/* - Убедиться, что Jenkins имеет доступ к правильным permissions в GitLab. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

  • 🤔 Что за протокол http, зачем он нужен? HTTP (HyperText Transfer Protocol) — это протокол передачи данных в интернете. Он используется для обмена данными между клиентом (браузером) и сервером. 🚩Пример работы HTTP Браузер отправляет запрос → "GET /index.html HTTP/1.1". Сервер отвечает → HTML-страницей (200 OK). Браузер отображает страницу. 🚩Основные принципы HTTP Клиент-серверная модель → браузер запрашивает, сервер отвечает. Без состояния (stateless) → каждый запрос независим (нет сессий). Текстовый протокол → данные передаются в читаемом формате. 🚩Структура HTTP-запроса Пример запроса от браузера к серверу GET /index.html HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 Ставь 👍 и забирай 📚 Базу знаний

  • 11 авг.544удалён 13 авг.

    видео или голосовое, без подписи

  • 🤔 Что такое config map в кубере? ConfigMap в Kubernetes – это механизм хранения конфигурационных данных. Он позволяет разделять код приложения и настройки, храня конфигурацию в виде ключ-значение. ConfigMap удобен для передачи переменных окружения, файлов конфигурации, командных аргументов без изменения образа контейнера. 🚩Основные способы использования ConfigMap 🟠Переменные окружения передача настроек через ENV. 🟠Файлы конфигурации монтирование в контейнер как файл. 🟠Параметры командной строки передача аргументов в command. 🚩Как создать ConfigMap? 1⃣Создание из манифеста apiVersion: v1 kind: ConfigMap metadata: name: my-config data: APP_ENV: "production" LOG_LEVEL: "debug" CONFIG_FILE: | [settings] mode = "production" debug = true 2⃣Создание из командной строки kubectl create configmap my-config --from-literal=APP_ENV=production --from-literal=LOG_LEVEL=debug 3⃣Создание из файла kubectl create configmap my-config --from-file=config.ini 🚩Как использовать ConfigMap в подах? 1⃣Как переменные окружения apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: app image: my-app env: - name: APP_ENV valueFrom: configMapKeyRef: name: my-config key: APP_ENV 2⃣Как монтируемый файл apiVersion: v1 kind: Pod metadata: name: my-app spec: containers: - name: app image: my-app volumeMounts: - name: config-volume mountPath: "/etc/config" volumes: - name: config-volume configMap: name: my-config Ставь 👍 и забирай 📚 Базу знаний

  • 🤔 Как сделать донастройку контейнера? Донастройка контейнера может понадобиться, если: Нужно изменить файлы конфигурации. Установить дополнительные пакеты. Задать переменные среды. Подключить тома или сети. Варианты донастройки: через Dockerfile, docker-compose, exec, тома и Entrypoint/CMD. 🟠Донастройка через Dockerfile (Лучший способ) Если контейнер нужно модифицировать перед запуском, создаем свой Dockerfile на основе существующего образа. FROM nginx:latest COPY my-nginx.conf /etc/nginx/nginx.conf CMD ["nginx", "-g", "daemon off;"] Собираем новый образ docker build -t my-nginx . docker run -d -p 80:80 my-nginx 🟠Донастройка через `docker-compose` (Гибкость) Можно задать окружение, тома, команды. version: '3' services: db: image: postgres:15 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: secret POSTGRES_DB: mydb volumes: - ./custom-postgres.conf:/etc/postgresql/postgresql.conf command: postgres -c config_file=/etc/postgresql/postgresql.conf Запуск docker-compose up -d 🟠Донастройка запущенного контейнера (`docker exec`) Если контейнер уже работает, можно внести изменения прямо в него. docker exec -it my-container bash apt update && apt install -y vim 🟠Донастройка через тома (Volumes) Если нужно изменять файлы без пересборки образа, подключаем тома. docker run -d -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf nginx 🟠Использование `ENTRYPOINT` или `CMD` Можно задать скрипт донастройки, который выполнится при старте контейнера. FROM postgres:15 COPY setup.sh /docker-entrypoint-initdb.d/setup.sh RUN chmod +x /docker-entrypoint-initdb.d/setup.sh В setup.sh: #!/bin/bash psql -U postgres -d mydb -c "CREATE TABLE test (id SERIAL PRIMARY KEY);" Ставь 👍 и забирай 📚 Базу знаний

  • 🤔 В чем разница Deployment и DaemonSet? Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев. 🚩Deployment Это контроллер, который обеспечивает декларативное обновление подов и ReplicaSets (другой тип контроллера, который управляет одновременным запуском нескольких экземпляров одного и того же пода). Deployment поддерживает непрерывное развертывание, откат к предыдущим версиям, а также масштабирование подов. 🟠Масштабирование Вы можете увеличивать или уменьшать количество подов в зависимости от нужд. 🟠Обновления Поддерживает стратегии развертывания, такие как Rolling Update (постепенное обновление), которое помогает минимизировать простои при обновлении приложения. 🟠Самовосстановление Автоматически перезапускает поды, которые перестали работать, находятся в ошибочном состоянии или не отвечают. apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 🚩DaemonSet Это контроллер, который гарантирует, что на каждом узле кластера Kubernetes запущен экземпляр заданного пода. Когда добавляется новый узел, на нем автоматически запускается под, управляемый DaemonSet, и если узел удаляется, поды удаляются автоматически. Это идеально подходит для запуска служб мониторинга, сбора логов или других утилит, которые должны быть запущены на каждом узле. 🟠Гарантия запуска Убедитесь, что каждый узел кластера запускает копию определённого пода. 🟠Автоматическое размещение Когда добавляются новые узлы, на них автоматически размещаются необходимые поды. 🟠Службы уровня узла Идеально подходит для запуска системных служб, таких как коллекторы логов, системы мониторинга и другие. apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: containers: - name: fluentd-elasticsearch image: fluent/fluentd:v1.0 volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true Ставь 👍 и забирай 📚 Базу знаний

  • 🤔 Из чего состоит ELK стек? ELK (Elasticsearch, Logstash, Kibana) – это стек для сбора, обработки, хранения и визуализации логов. Он помогает DevOps-инженерам анализировать логи в реальном времени и выявлять проблемы в системе. 🚩Elasticsearch – хранилище и поиск логов - Хранит структурированные и неструктурированные данные (логи, метрики) - Поддерживает быстрый полнотекстовый поиск - Использует кластеризацию для высокой доступности json GET /logs/_search { "query": { "match": { "message": "error" } } } 🚩Logstash – обработка и отправка логов - Собирает логи из файлов, TCP, Kafka, Beats - Фильтрует и преобразует данные перед отправкой в Elasticsearch - Поддерживает шифрование и маршрутизацию yaml input { file { path => "/var/log/nginx/access.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["http://elasticsearch:9200"] } } 🚩Kibana – визуализация и анализ - Позволяет строить дашборды и графики - Делает поиск по логам и метрикам - Визуализирует реальное время работы системы message: "error" AND @timestamp:[now-24h TO now] 🚩Как ELK-стек работает вместе? Logstash собирает и обрабатывает логи Отправляет их в Elasticsearch Kibana визуализирует данные yaml version: "3" services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0 environment: - discovery.type=single-node ports: - "9200:9200" logstash: image: docker.elastic.co/logstash/logstash:8.5.0 depends_on: - elasticsearch volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf ports: - "5044:5044" kibana: image: docker.elastic.co/kibana/kibana:8.5.0 depends_on: - elasticsearch ports: - "5601:5601" Ставь 👍 и забирай 📚 Базу знаний

  • 🤔 Что слышали про rancher kubernetes? Это платформа для управления Kubernetes-кластерами. Она позволяет развертывать, настраивать, мониторить и управлять несколькими кластерами Kubernetes из единой панели управления. Rancher упрощает работу с Kubernetes, предоставляя удобный UI, API и инструменты автоматизации. 🚩Зачем нужен Rancher? 🟠Управление несколькими кластерами Rancher позволяет управлять кластерами Kubernetes, развернутыми в различных облаках (AWS, GCP, Azure) и на локальной инфраструктуре. 🟠Упрощенная установка и настройка С помощью Rancher можно быстро развернуть Kubernetes-кластеры с минимальными усилиями. 🟠Безопасность и контроль доступа Поддерживает аутентификацию через LDAP, Active Directory, GitHub и другие методы. 🟠Мониторинг и логирование Встроенная поддержка Prometheus, Grafana и Fluentd для мониторинга и логов. 🟠Развертывание приложений Поддерживает Helm-чарты и стандартные манифесты Kubernetes. 🚩Как работает Rancher? 🟠Rancher Server центральный компонент, управляющий кластерами и предоставляющий UI/API. 🟠Kubernetes-кластеры могут быть развернуты с помощью Rancher (RKE, RKE2) или добавлены вручную (например, EKS, AKS, GKE). 🟠Rancher Agents агенты, установленные в кластерах для обеспечения связи с сервером Rancher. 🚩Пример развертывания Rancher Для развертывания Rancher можно использовать Docker docker run -d --name=rancher --restart=unless-stopped \ -p 80:80 -p 443:443 \ rancher/rancher:latest Ставь 👍 и забирай 📚 Базу знаний

  • 6 авг.694110

    🤔 Что такое брокеры сообщений? Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers). 🚩Основные функции брокеров сообщений 🟠Прием и маршрутизация сообщений Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys). 🟠Асинхронное взаимодействие Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы. 🟠Очереди сообщений Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено. 🟠Гарантированная доставка Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери. 🟠Распределение нагрузки Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними. 🟠Фильтрация и маршрутизация Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации. 🚩Примеры использования брокеров сообщений 🟠Микросервисы Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми. 🟠Логирование и мониторинг Сбор логов и метрик от множества источников с их дальнейшей обработкой. 🟠Управление задачами Постановка задач в очередь для выполнения одним или несколькими воркерами. 🟠Интеграция систем Связывание разнородных систем, которые обмениваются данными. 🚩Примеры брокеров сообщений 🟠RabbitMQ Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации. 🟠Apache Kafka Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени. 🟠Redis (Pub/Sub) Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния. 🟠ActiveMQ Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями. 🟠NATS Легковесный и быстрый брокер для приложений, требующих низкой задержки. 🚩Как работают брокеры сообщений Producers (отправители) отправляют сообщение в брокер. Брокер размещает сообщение в соответствующей очереди или теме. Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди. 🚩Пример использования RabbitMQ 1⃣Отправитель публикует сообщение в очередь: import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') connection.close() 2⃣Получатель забирает сообщение из очереди: import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): print(f"Received {body}") channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) channel.start_consuming() 🚩Плюсы использования ➕Разделение ответственности Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных. ➕Масштабируемость Легко добавлять новых потребителей или отправителей. ➕Устойчивость к сбоям Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен. ➕Гибкость Возможность использовать различные стратегии маршрутизации и обработки данных. Ставь 👍 и забирай 📚 Базу знаний

  • 🤔 Какая есть защита на ветках, чтобы не запушили что-то не то? Используют protected branches. В GitLab можно запретить push в main, разрешить только через merge request с код-ревью, включить required approvals, проверку пайплайнов и запретить force-push. Это повышает стабильность и безопасность. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

  • 🤔 При попытке создания файла на диске на linux ошибка что места нет проверяете место есть с чем это может быть связано Если при создании файла в Linux появляется ошибка, что места нет, но df -h показывает свободное место, проблема может быть в следующем: 🚩Закончились inodes Inodes – это структуры, которые хранят метаданные о файлах. Даже если есть свободное место, но inodes кончились, новые файлы создать нельзя. df -i Найти каталоги с множеством маленьких файлов: find /path -xdev -type f | wc -l # Количество файлов в каталоге 🚩Ограничение дискового квотирования (quota) В системе могут быть настроены дисковые квоты, которые ограничивают использование диска для пользователя или группы. quota -v 🚩Заполнен раздел `/var`, `/tmp` или `/home` В системе может быть несколько дисковых разделов (/, /var, /home и т. д.). Если один из них заполнен, в него нельзя записывать файлы. df -hT 🚩Файловая система смонтирована в режиме `read-only` Если файловая система перешла в режим «только для чтения» (read-only) из-за ошибки или сбоя, запись на неё невозможна. mount | grep ' ro,' Если файловая система смонтирована с `ro`, значит, запись запрещена. Перемонтировать диск: mount -o remount,rw /path Проверить диск на ошибки: dmesg | tail -20 # Лог ошибок fsck /dev/sdX # Проверка диска Ставь 👍 и забирай 📚 Базу знаний

  • 🤔 Что такое debezium? Она позволяет отслеживать изменения в базах данных (INSERT, UPDATE, DELETE) в реальном времени и передавать их в Kafka, Elasticsearch, MongoDB и другие системы. 🚩Как работает Debezium? Подключается к базе данных (PostgreSQL, MySQL, MongoDB, Oracle и др.). Слушает лог изменений (binlog, WAL, oplog и т. д.) Формирует события в формате JSON Передаёт их в Kafka или другую шину данных. 🚩Где используется? Синхронизация данных между базами Репликация данных в реальном времени Отправка изменений в аналитические системы (Elasticsearch, ClickHouse) Аудит и логирование изменений 🟠Пример работы с Kafka Запускаем Debezium Connector для PostgreSQL* { "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.postgresql.PostgresConnector", "database.hostname": "localhost", "database.port": "5432", "database.user": "debezium", "database.password": "dbz", "database.dbname": "inventory", "database.server.name": "dbserver1" } } При изменении данных в таблице, Kafka получит событие: { "schema": { ... }, "payload": { "before": { "id": 1, "name": "Old Name" }, "after": { "id": 1, "name": "New Name" }, "op": "u" // Update } } Ставь 👍 и забирай 📚 Базу знаний