Admin Future
241 subscribers
51 photos
1 video
4 files
120 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
🔄 Идемпотентность: Главное слово в словаре архитектора

Если вы пишете скрипты или Ansible-плейбуки, вы обязаны понимать концепцию Идемпотентности. Без этого автоматизация превращается в хаос.

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

Пример на Bash:
❌ Не идемпотентно:

# Если запустить 2 раза, в файле будет две записи
echo "127.0.0.1 myapp.local" >> /etc/hosts

✅ Идемпотентно:

# Проверяем, есть ли запись, и добавляем только если нет
grep -q "myapp.local" /etc/hosts || echo "127.0.0.1 myapp.local" >> /etc/hosts

Почему это важно: В современном мире (Ansible, Terraform, Kubernetes) агент запускается каждые 15-30 минут. Если ваш скрипт не идемпотентен, он каждый раз будет ломать конфиги, дублировать строки или перезапускать сервисы без причины.

Правило: Пишите любой скрипт так, будто он будет запускаться каждую минуту.

#devops #architecture #coding #bestpractice #theory #automation
🤔 Network: В чем разница между 127.0.0.1 и 0.0.0.0?

Классический вопрос на собеседовании и частая ошибка в конфигах Nginx/Docker. Оба адреса относятся к "этому компьютеру", но работают они принципиально по-разному.

1. 127.0.0.1 (Localhost)

Суть: Loopback-интерфейс.

Как работает: Трафик никогда не покидает хост. Он даже не доходит до сетевой карты.

Кейс:
Вы запускаете базу данных и хотите, чтобы к ней мог подключиться только ваш локальный бэкенд.

Конфиг: bind-address = 127.0.0.1

2. 0.0.0.0 (Wildcard)

Суть: "Все доступные интерфейсы".

Как работает:
Сервис начинает слушать на всех IP-адресах, которые есть у сервера (и на локальном 127.0.0.1, и на внешнем Ethernet/Wi-Fi).

Кейс: Вы запускаете веб-сервер, который должен быть доступен из интернета.

Конфиг: listen 0.0.0.0:80

☠️ Где ошибаются: Если вы в Docker или базе данных напишете 0.0.0.0 вместо 127.0.0.1, вы можете случайно открыть порт для всего интернета (если фаервол не настроен). Правило архитектора: Всегда биндите сервисы на 127.0.0.1, если нет явной причины пускать мир внутрь.

#network #security #theory #bestpractice #interview
🤯 Load Average: Почему 1.0 — это не всегда 100% CPU?

Мы видим в htop параметр Load Average: 4.0 (на 4 ядрах). Новички думают: "Ага, процессор загружен на 100%!". Сеньоры знают: "Не факт. Возможно, это диск умирает".

В чем подвох: В Linux в расчет Load Average (LA) попадают процессы в двух состояниях:

R (Running/Runnable): Реально считают на CPU или стоят в очереди к нему.

D (Uninterruptible Sleep): Ждут ввода-вывода (Disk I/O, Network NFS).

Аналогия с кассой:

Состояние R: Очередь людей к кассе. Кассир (CPU) работает на износ.

Состояние 😧 Кассир свободен, но покупатель ушел взвешивать бананы и не возвращается. Очередь стоит и ждет его. CPU простаивает (iowait), но LA растет!

Как отличить? Смотрите в vmstat 1.

Колонка r (run): Высокая? Проблема в CPU (код).

Колонка b (blocked): Высокая? Проблема в Диске/IO.

Не меняйте процессор, если у вас тормозит жесткий диск.

#linux #kernel #loadaverage #performance #theory #interview
📍 DNS: Зачем нужна точка в конце (google.com.)?

Вы наверняка видели в конфигах BIND или в старых учебниках домены с точкой на конце: example.com. Зачем она?

Это FQDN (Fully Qualified Domain Name) — полностью определенное имя домена.

Как это работает: Когда вы пишете в браузере google.com (без точки), ваш компьютер на самом деле пытается быть умным. Если вы находитесь в корпоративной сети corp.local, резолвер может сначала попробовать найти:

google.com.corp.local (А вдруг это внутренний сервер?)

И только потом google.com. (Корень интернета).

Точка в конце говорит системе жестко:

"Не пытайся подставить локальные суффиксы. Иди сразу в корневой DNS (Root Zone)."

Практика: В критических скриптах и конфигах серверов (особенно Nginx/Postfix) использование точки в конце (proxy_pass http://backend.local.;) ускоряет резолвинг и защищает от атак с подменой локальных доменов.

#network #dns #theory #fqdn #internet #basics
👍2
⏳ Network: Когда обновится этот чертов домен? (TTL)

Вы сменили IP-адрес сервера в DNS. Клиенты жалуются, что видят старый сайт. Вы говорите: "Ждите обновления кэша". Но сколько ждать? Час? Сутки?

Смотрите на TTL (Time To Live). Это число, которое показывает, сколько секунд запись будет жить в кэше резолвера.

Команда:

dig google.com

Смотрим в ответ (ANSWER SECTION):

google.com. 185 IN A 142.250.185.78

Вот это число 185 — это секунды. Запустите команду еще раз через 10 секунд — число станет 175. Как только оно дойдет до 0, резолвер пойдет спрашивать авторитетный DNS-сервер и получит ваш новый IP.

Вывод: Перед переездом всегда заранее снижайте TTL до 60 секунд (за сутки до работ), чтобы переключение прошло мгновенно.

#network #dns #ttl #dig #migration #theory #troubleshooting
🤝 Network: TCP 3-Way Handshake (База)

Мы говорим "установил соединение". А что происходит под капотом? Любое TCP-соединение (SSH, HTTP, RDP) начинается с Тройного рукопожатия. Если вы не понимаете этот процесс, вы не сможете траблшутить фаерволы.

Три шага:

1. SYN (Synchronize): Клиент шлет пакет серверу. "Привет, хочу поговорить. Мой номер очереди 100."
* Если здесь потеря — сервер недоступен или порт закрыт.

2. SYN-ACK (Synchronize-Acknowledge): Сервер отвечает. "Привет, слышу тебя (ACK 101). Давай говорить, мой номер 500 (SYN)."
* Если здесь потеря — сервер перегружен или блокирует обратный трафик.

3. ACK (Acknowledge): Клиент подтверждает. "Ок, твой номер 500 принял (ACK 501). Погнали передавать данные!"

Почему это важно: DDoS атака SYN Flood работает именно здесь: атакующий шлет миллионы SYN , сервер ждет, отвечает SYN-ACK , но ACK в ответ не получает. Память сервера забивается "полуоткрытыми" соединениями, и он умирает.

#network #tcp #theory #handshake #security #interview #basics
❤1
💾 RAID: Геометрия надежности

Мы говорим: "Поставь в RAID 10". А вы помните физику процесса? Визуальное понимание того, как лежат блоки, спасает при восстановлении массива.

Быстрый рекап по картинке:

1. RAID 0 (Stripe): Данные "размазаны" по дискам (A1, A2).
🚀 Скорость: Максимальная (xN).
💀 Надежность: Ноль. Сдох один диск — потеряли всё.

2. RAID 1 (Mirror): Данные дублируются (A1 = A1).
🛡️ Надежность: Высокая.
📉 Цена: Платим за 2 диска, получаем место как за 1.

3. RAID 5 (Parity): Данные + Контрольная сумма (Parity) размазаны по всем дискам.
⚖️ Баланс: Если один диск умер, данные вычисляются по формуле из остальных.
🐢 Минус: Медленная запись (надо считать контрольную сумму).

4. RAID 10: Зеркало (1) внутри Страйпа (0). Лучшее из двух миров, но дорого.

Сохраните схему. Когда джун спросит, почему RAID 5 тормозит на запись, просто покажите блок Parity.

#storage #raid #theory #hardware #architecture #infographics #basics
❤3
🧟‍♂️ Linux: Атака зомби. Как убить то, что уже мертво?

Вы смотрите в top и видите: zombie: 5 . Новички пытаются сделать kill -9 <PID_ZOMBIE> .
Спойлер: Это бесполезно. Зомби нельзя убить, потому что он уже мертв.

Что такое Zombie Process: Это процесс, который завершил выполнение, освободил память, но его запись осталась в таблице процессов, потому что "Родитель" (Parent Process) не прочитал его код завершения (exit code).

Как починить правильно: Нужно найти родителя и "пнуть" его (или убить).

1. Ищем зомби и их родителей:

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

Вывод: Z 1050 1051 [php-fpm] <defunct> (Где 1050 — PPID родителя, 1051 — PID зомби).

2. Решение: Отправьте сигнал родителю, чтобы он "прибрался за детьми":



kill -SIGCHLD 1050


Если не помогло — убивайте родителя: kill -9 1050 . Зомби исчезнет вместе с ним (или его подберет процесс init ).

#linux #processes #zombie #troubleshooting #kernel #theory
📶 Модель OSI: "Please Do Not Throw Sausage Pizza Away"

Когда сеть не работает, Джун говорит: "Интернет сломался". Сеньор говорит: "Проблема на L1 (физика) или L3 (маршрутизация)?".

Чтобы траблшутить как Бог, нужно думать слоями модели OSI.

Шпаргалка траблшутинга:

1. L1 Physical (Физический): Кабель включен? Линк горит? SFP-модуль сдох?

2. L2 Data Link (Канальный): MAC-адреса видны? VLAN настроен верно? STP не заблокировал порт?

3. L3 Network (Сети): IP-адрес есть? Пинг идет? Шлюз доступен? Маршруты прописаны?

4. L4 Transport (Транспортный): Порт открыт? Файрвол блокирует TCP/UDP?

5. L7 Application (Приложение): Nginx отдает 502? Сертификат протух?

Запомните: Всегда начинайте диагностику снизу вверх (от кабеля к софту). 90% проблем — это L1 (отошел патч-корд) или L3 (кривой IP).

#network #osi #theory #troubleshooting #basics #education #cisco
🔥3
🚚 MTU: Почему "большие" пакеты застревают?

Вы настроили VPN (WireGuard/OpenVPN), пинг идет, а сайты не открываются или RDP зависает. В 90% случаев виноват MTU (Maximum Transmission Unit).

Представьте, что сеть — это труба диаметром 1500 мм (байт). Это стандарт Ethernet. VPN добавляет свои заголовки, и полезная нагрузка становится 1420 байт. Если сервер пытается пропихнуть вам пакет размером 1500 байт через эту VPN-трубу, происходит одно из двух:

1. Фрагментация: Роутер рубит пакет на два куска (нагрузка на CPU, тормоза).

2. Drop: Если на пакете стоит флаг DF (Don't Fragment), роутер просто уничтожает его. Связь рвется.

Как найти идеальный размер (Ping Test): В Windows используем флаг -f (не фрагментировать) и -l (размер):

ping google.com -f -l 1472

(1472 + 28 байт заголовков = 1500. Если проходит — ок. Если "Packet needs to be fragmented" — уменьшайте число, пока не пройдет).

#network #mtu #vpn #troubleshooting #theory #fragmentation #ping
🧟‍♂️ Linux: Атака зомби. Как убить то, что уже мертво?

Вы смотрите в top и видите: zombie: 5. Новички пытаются сделать kill -9 <PID_ZOMBIE> . Спойлер: Это бесполезно. Зомби нельзя убить, потому что он уже мертв.

Что такое Zombie Process: Это процесс, который завершил выполнение, освободил память, но его запись осталась в таблице процессов, потому что "Родитель" (Parent Process) не прочитал его код завершения (exit code).

Как починить правильно: Нужно найти родителя и "пнуть" его (или убить).

1. Ищем зомби и их родителей:

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

Вывод: Z 1050 1051 [php-fpm] <defunct> (Где 1050 — PPID родителя, 1051 — PID зомби).

2. Решение: Отправьте сигнал родителю, чтобы он "прибрался за детьми":

kill -SIGCHLD 1050

Если не помогло — убивайте родителя: kill -9 1050. Зомби исчезнет вместе с ним (или его подберет процесс init).

#linux #processes #zombie #troubleshooting #kernel #theory
📡 DHCP: Принцип DORA. Почему нет интернета?

Когда пользователь подключает кабель, происходит магия получения IP-адреса. Если магия не сработала, Windows пишет "Unidentified Network" (APIPA 169.254.x.x).

Чтобы чинить, нужно знать 4 шага процесса DORA:

D — Discover (Поиск): Клиент кричит на всю сеть (Broadcast): "Есть тут кто живой? Дайте IP!".

Ошибка здесь: Если VLAN настроен криво или нет DHCP Relay, крик никто не услышит.

O — Offer (Предложение): Сервер слышит и отвечает: "Я тут (10.0.0.1)! Могу дать тебе 10.0.0.50".

R — Request (Запрос): Клиент соглашается: "Ок, беру 10.0.0.50, подтверди!".

A — Acknowledge (Подтверждение): Сервер записывает клиента в базу и дает добро: "Забирай. Вот тебе еще шлюз и DNS".

Траблшутинг: Включите Wireshark и фильтр bootp.

Видите только Discover? 👉 Проблема с сетью (DHCP Relay / VLAN) или сервер лежит.

Видите Offer, но нет Request? 👉 Клиенту не нравится предложение (возможно, конфликт IP).

#network #dhcp #dora #theory #troubleshooting #basics #wireshark
🔗 Symlink vs Hard Link: В чем реальная разница?

Мы все постоянно пишем ln -s , создавая символические ссылки (Symlink). Но есть еще "Жесткие ссылки" (Hard Links). В чем соль? В Inode.

В Linux файл — это не имя. Файл — это набор данных на диске, у которого есть номер (Inode). А "Имя файла" — это просто указатель на этот номер.

Разница на пальцах:

1. Hard Link (ln file link): Это второе имя для того же самого Inode.

* Если удалить оригинальный файл — ссылка продолжит работать (данные не удалятся, пока на них указывает хоть одно имя).

* Ограничение: Нельзя делать на папки и между разными дисками.

2. Soft (Symbolic) Link (ln -s file link): Это новый файл, внутри которого написан путь к оригиналу.

* Если удалить оригинал — ссылка станет "битой" (указывает в пустоту).

* Плюс: Работает везде, даже между разными файловыми системами.

Как проверить: Команда ls -li покажет номер Inode в первом столбце. У хард-линков он одинаковый.

#linux #inodes #filesystem #theory #basics #interview
🕸️ CIDR: Магия слеша (/24, /32)

В конфигах сети мы пишем 192.168.1.0/24 . Но новички часто путаются: "А /30 — это больше адресов или меньше?".

Главное правило: Чем больше цифра после слеша, тем меньше сеть. Представьте пирог. Слэш — это на сколько кусков мы его режем.

Шпаргалка для Админа:

* /32 = 1 IP (Только сам хост). Используется для жесткой привязки в фаерволах.

* /30 = 2 IP (Всего 4, но 2 служебных). Идеально для линка "точка-точка" между роутерами.

* /29 = 6 IP. Обычно столько выдает провайдер на офис.

* /24 = 254 IP. Стандартная локалка (маска 255.255.255.0).

* /16 = 65 534 IP. Огромная сеть (маска 255.255.0.0).

Сохраните. Когда нужно будет нарезать VLAN-ы, спасет от перекрытия адресов.

#network #cidr #subnetting #ip #theory #basics #cheatsheet
👍2
📦 TCP vs UDP: Почему VoIP и игры выбирают ненадежность?

Джуниор спрашивает: "TCP гарантирует доставку, а UDP теряет пакеты. Почему мы вообще используем UDP для звонков и YouTube?"

Ответ в Заголовках (Overhead).

1. TCP (Тяжеловес):
* Заголовок 20-60 байт.
* Рукопожатие, подтверждение каждого пакета (ACK), контроль порядка, повторная отправка.
* Результат: Если пакет потерялся, видео "замрет" и будет ждать его. Вы увидите лаг.

2. UDP (Спринтер):
* Заголовок всего 8 байт.
* Отправил и забыл. Никаких проверок.
* Результат: Если пакет с куском голоса потерялся — вы услышите микро-щелчок, но разговор продолжится в реальном времени.

Суть: В разговоре лучше пропустить букву, чем замолчать на 2 секунды, вспоминая её. Поэтому SIP, RTP и стриминг — это всегда UDP. Не блокируйте его на фаерволах!

#network #tcp #udp #protocols #theory #voip #streaming #basics
💾 Правило 3-2-1

В пятницу вечером самое время спросить себя: "Если завтра сгорит серверная, а облако заблокируют — я восстановлю данные?".

Существует только один стандарт надежности бэкапов. Правило 3-2-1.

Разбор:

1. 3 копии данных: Одна боевая (оригинал) + Две резервных.

* Почему: Вероятность смерти одного диска — 1/100. Трех сразу — 1/1 000 000.

2. 2 разных носителя: Не храните все копии на одном RAID-массиве или одном типе дисков.

* Пример: HDD сервера + Ленточная библиотека (или NAS другого бренда).

3. 1 копия оффсайт: Одна копия должна лежать физически в другом здании (или облаке).

* Почему: Пожар, потоп или кража в офисе уничтожат и сервер, и локальный бэкап.

Если у вас нет пункта №3 — считайте, у вас нет бэкапов.

#backup #security #theory #321rule #bestpractice #disasterrecovery #adminlife