diff --git a/DB/Database-and-theseTypes.md b/DB/Database-and-theseTypes.md new file mode 100644 index 0000000000..7951c98004 --- /dev/null +++ b/DB/Database-and-theseTypes.md @@ -0,0 +1,161 @@ +# Домашнее задание к занятию "Базы данных и их типы" - `Хамуро Илья` + +### Задание 1 +Кейс +Крупная строительная компания, которая также занимается проектированием и девелопментом, решила создать правильную архитектуру для работы с данными. Ниже представлены задачи, которые необходимо решить для каждой предметной области. + +Какие типы СУБД, на ваш взгляд, лучше всего подойдут для решения этих задач и почему? + +1.1. Бюджетирование проектов с дальнейшим формированием финансовых аналитических отчётов и прогнозирования рисков. СУБД должна гарантировать целостность и чёткую структуру данных. + +Рекомендуемая СУБД: Реляционная (PostgreSQL, Microsoft SQL Server, Oracle) +Почему? + +- Требуется строгая структура, ACID-гарантии, сложные JOIN-запросы для аналитики. + +- Поддержка транзакций критична для финансовых данных. + +- Возможность интеграции с BI-инструментами (Power BI, Tableau). + +1.1.* Хеширование стало занимать длительно время, какое API можно использовать для ускорения работы? + +API: Можно использовать Redis API (кеширование промежуточных результатов) или специализированные библиотеки (например, Google CityHash для быстрого хеширования). + +1.2. Под каждый девелоперский проект создаётся отдельный лендинг, и все данные по лидам стекаются в CRM к маркетологам и менеджерам по продажам. Какой тип СУБД лучше использовать для лендингов и для CRM? СУБД должны быть гибкими и быстрыми. + +Рекомендуемые СУБД: + +Лендинги: Документоориентированная (MongoDB, Firebase) – гибкость, быстрое чтение/запись. + +CRM: Реляционная (PostgreSQL) или гибрид (MongoDB + SQL для аналитики). + +1.2.* Можно ли эту задачу закрыть одной СУБД? И если да, то какой именно СУБД и какой реализацией? + +Да, если: Использовать PostgreSQL с JSONB (гибкость для лендингов + структура для CRM). + +Альтернатива – MongoDB (если CRM не требует сложных JOIN). + +1.3. Отдел контроля качества решил создать базу по корпоративным нормам и правилам, обучающему материалу и так далее, сформированную согласно структуре компании. СУБД должна иметь простую и понятную структуру. + +Рекомендуемая СУБД: Графовая (Neo4j) или реляционная (PostgreSQL). +Почему? + +Если данные иерархичны (например, дерево документов), подойдёт PostgreSQL с рекурсивными запросами. + +Если важны связи (например, правила → отделы → проекты), лучше Neo4j. + +1.3.* Можно ли под эту задачу использовать уже существующую СУБД из задач выше и если да, то как лучше это реализовать? + +Да, если: Взять PostgreSQL из 1.1 или 1.2 и добавить таблицы для документов. + +1.4. Департамент логистики нуждается в решении задач по быстрому формированию маршрутов доставки материалов по объектам и распределению курьеров по маршрутам с доставкой документов. СУБД должна уметь быстро работать со связями. + +Рекомендуемая СУБД: Графовая (Neo4j) или реляционная с гео-расширениями (PostgreSQL + PostGIS). +Почему? + +Графы идеальны для маршрутизации (поиск кратчайшего пути). + +PostGIS удобен для работы с координатами. + +1.4.* Можно ли к этой СУБД подключить отдел закупок или для них лучше сформировать свою СУБД в связке с СУБД логистов? + +Да, если: Использовать PostgreSQL (логистика + закупки в одной схеме). + +Нет, если: Закупкам нужна специализированная система (например, ERP-модуль). + +1.5.* Можно ли все перечисленные выше задачи решить, используя одну СУБД? Если да, то какую именно? + +PostgreSQL (с JSONB, PostGIS, рекурсивными запросами) покрывает 90% задач: + +Финансы (1.1) – транзакции. + +CRM (1.2) – гибкость через JSONB. + +База знаний (1.3) – иерархии. + +Логистика (1.4) – PostGIS. + +Исключение: Для сложной маршрутизации лучше добавить Neo4j. + +Альтернатива: + +MongoDB + PostgreSQL + Redis (оптимально для масштабирования). + +### Задание 2 Транзакции + +2.1. Пользователь пополняет баланс счёта телефона, распишите пошагово, какие действия должны произойти для того, чтобы транзакция завершилась успешно. Ориентируйтесь на шесть действий. + +1) Старт транзакции – СУБД начинает транзакцию, блокируя необходимые данные (баланс пользователя). + +2) Проверка реквизитов – Система проверяет, существует ли указанный номер телефона и доступен ли для пополнения. + +3) Списание средств с плательщика – Если пополнение идёт с карты/кошелька, списывается сумма. + +4) Зачисление средств на счёт телефона – Баланс номера увеличивается на указанную сумму. + +5) Фиксация операции в логе – Запись о транзакции сохраняется в историю (для отката при ошибке). + +6) Фиксация транзакции (COMMIT) – Если все шаги успешны, транзакция завершается, изменения сохраняются. + +2.1.* Какие действия должны произойти, если пополнение счёта телефона происходило бы через автоплатёж? + +1) Проверка подписки на автоплатёж – Система проверяет, активен ли автоплатёж для данного номера. + +2) Проверка лимитов – Если у пользователя установлен лимит (например, "не более 1000 руб./месяц"), система проверяет, не превышен ли он. + +3) Автоматическое списание – Средства списываются с привязанной карты/кошелька без запроса подтверждения. + +4) Уведомление пользователя – После успешного пополнения отправляется SMS/email-уведомление. + +### Задание 3 SQL NoSQL + +3.1. Пять преимуществ SQL-систем перед NoSQL +Гарантии ACID – Полная поддержка транзакций (атомарность, согласованность, изолированность, долговечность), что критично для финансовых и бизнес-приложений. + +Строгая схема данных – Чёткая структура таблиц, типы данных, внешние ключи. Упрощает валидацию и уменьшает риск ошибок. + +Мощные JOIN-запросы – Возможность сложных связей между таблицами без дублирования данных (нормализация). + +Зрелость и экосистема – Большой выбор инструментов (BI, ETL, ORM), обширная документация и сообщество. + +Универсальность – Одна СУБД (например, PostgreSQL) может закрывать задачи аналитики, транзакций и даже частично NoSQL-сценарии (через JSONB). + +3.1. Преимущества NewSQL перед SQL и NoSQL* + +NewSQL (CockroachDB, Google Spanner, YugabyteDB) – гибрид, сочетающий плюсы SQL и NoSQL: + +1) Перед классическим SQL: + +Горизонтальная масштабируемость – Распределённые кластеры без потери ACID (в отличие от шардинга в SQL). + +Высокая отказоустойчивость – Автоматическое восстановление при падении узлов. + +2) Перед NoSQL: + +Полная поддержка SQL-синтаксиса – JOIN, транзакции, сложные запросы без ограничений NoSQL. + +Гибридные модели данных – Можно использовать как реляционные таблицы, так и документы (как в MongoDB). + +### Задание 4. Кластеры + +Критерии выбора СУБД: + +1) Горизонтальная масштабируемость – Система должна эффективно распределять нагрузку на 1000 узлов без деградации производительности. + +2) Поддержка распределённых транзакций – Если нужны ACID-гарантии (например, для финансовых расчётов). + +3) Тип рабочих нагрузок: + + OLTP (много коротких транзакций) → NewSQL (CockroachDB, YugabyteDB). + OLAP (аналитика, сложные агрегации) → Колоночные СУБД (ClickHouse, Apache Druid). +Гибридные задачи → Greenplum, Vertica. + +4) Отказоустойчивость – Автоматическое восстановление при падении узлов. + +5) Скорость обработки запросов – Минимизация задержек при работе с большими данными. + +Если нужна аналитика → ClickHouse (MPP) – максимальная скорость агрегаций. + +Если нужны транзакции + масштабируемость → CockroachDB (NewSQL, Shared-Nothing). + +Если данные смешанные (OLTP + OLAP) → TiDB (гибридный подход). diff --git a/DB/ELK.md b/DB/ELK.md new file mode 100644 index 0000000000..3fa3f39b0b --- /dev/null +++ b/DB/ELK.md @@ -0,0 +1,12 @@ +# Домашнее задание к занятию "ELK" - `Хамуро Илья` + +### Задание 1 +Снимок экрана 2025-07-26 200548 + +### Задание 2 + +Снимок экрана 2025-07-26 203115 + +### Задание 3 + + diff --git a/DB/Redis_and_memcached.md b/DB/Redis_and_memcached.md new file mode 100644 index 0000000000..ffb2e6dd21 --- /dev/null +++ b/DB/Redis_and_memcached.md @@ -0,0 +1,32 @@ +# Домашнее задание к занятию "Кеширование Redis/memcached" - `Хамуро Илья` + +### Задание 1 Кеширование +1. Ускорение доступа к данным +Проблема: Частые запросы к медленным источникам (базам данных, диску, API) замедляют работу приложения. +Решение: Кеширование часто запрашиваемых данных в оперативной памяти (например, Redis, Memcached) ускоряет их получение. + +2. Снижение нагрузки на сервер +Проблема: Высоконагруженный сервер (например, веб-сайт) может не справляться с большим количеством запросов. +Решение: Кеширование страниц (например, через CDN или Nginx) снижает количество обращений к бэкенду. + +3. Уменьшение задержек в распределённых системах +Проблема: Запросы к удалённым серверам (например, внешним API) могут выполняться долго. +Решение: Локальный кеш результатов уменьшает зависимость от внешних сервисов. + +4. Оптимизация вычислений +Проблема: Сложные вычисления (например, агрегация статистики) требуют много ресурсов. +Решение: Кеширование результатов (например, в виде предварительно рассчитанных отчётов) ускоряет их получение. + +### Задание 2. Memcached + +Снимок экрана 2025-07-20 232545 + +### Задание 3. Удаление по TTL в Memcached +Решил выполнить задание с помощью пайтон) +Снимок экрана 2025-07-22 223928 + +Снимок экрана 2025-07-22 223940 + +### Задание 4. Запись данных в Redis + +Снимок экрана 2025-07-22 235551 diff --git a/Disaster_Recovery.md b/Disaster_Recovery.md new file mode 100644 index 0000000000..b241538aa8 --- /dev/null +++ b/Disaster_Recovery.md @@ -0,0 +1,12 @@ +# Домашнее задание к занятию "`Disaster Recovery. FHRP и Keepalived`" - `Хамуро Илья` + +### Задание 2 + +![Снимок экрана 2025-06-21 000020](https://github.com/user-attachments/assets/d1fe9176-3e31-4299-988c-0d3e3e7b4629) +![Снимок экрана 2025-06-21 000031](https://github.com/user-attachments/assets/aba4d9ca-6163-48a9-be12-8f6c50164b11) +![Снимок экрана 2025-06-21 000054](https://github.com/user-attachments/assets/4ff50220-d3dc-4144-89a1-965f3535999d) +![Снимок экрана 2025-06-21 000112](https://github.com/user-attachments/assets/a05ddab8-87c1-42b3-9083-09f0501f1e83) + +![Снимок экрана 2025-06-21 000158](https://github.com/user-attachments/assets/8ff8c77f-3275-48de-b0c0-074e1c77d8f6) + + diff --git a/GitLab b/GitLab new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/GitLab @@ -0,0 +1 @@ + diff --git a/GitLab.md b/GitLab.md new file mode 100644 index 0000000000..8268d7fa42 --- /dev/null +++ b/GitLab.md @@ -0,0 +1,14 @@ +# Домашнее задание к занятию "`GitLab`" - `Хамуро Илья` + +### Задание 1 +Я выполнял задание через готовый образ GitLab в ЯндексCloud. +![Снимок экрана 2025-05-29 003834](https://github.com/user-attachments/assets/7d3fe91a-1816-4138-849c-022975ad1ee7) +![Снимок экрана 2025-05-29 005054](https://github.com/user-attachments/assets/05fc97ac-d58c-4bab-b6d6-236bd2c71b79) + + +### Задание 2 +![Снимок экрана 2025-05-29 011352](https://github.com/user-attachments/assets/095c4121-7154-4595-9796-f79dcd47818d) +![Снимок экрана 2025-05-29 011052](https://github.com/user-attachments/assets/0e1c7dde-ef5a-499f-a61b-94825dbe6785) +![Снимок экрана 2025-05-29 011127](https://github.com/user-attachments/assets/68747297-e17b-425f-a315-7ccb8c6683e9) +![Снимок экрана 2025-05-29 011309](https://github.com/user-attachments/assets/2f4f6ae1-6bdf-4416-932a-fe61c40d679b) + diff --git a/Jenkins.md b/Jenkins.md new file mode 100644 index 0000000000..37ba57d42f --- /dev/null +++ b/Jenkins.md @@ -0,0 +1,77 @@ +# Домашнее задание к занятию "DevOps. CI/CD" - `Хамуро Илья` + +--- + +### Задание 1 +Выполнил задание с использованием docker, без vagrant, делал работу на вм в Яндекс облаке + +![Снимок экрана 2025-05-15 234540](https://github.com/user-attachments/assets/321af4b4-eeef-45bb-9da4-2714b3068b87) +![Снимок экрана 2025-05-15 234258](https://github.com/user-attachments/assets/d562a653-a616-4760-b853-65bffc412352) +![Снимок экрана 2025-05-15 234226](https://github.com/user-attachments/assets/26168e79-80b8-4fa7-823d-fe25140ab640) +![Снимок экрана 2025-05-15 234231](https://github.com/user-attachments/assets/c32f86c4-9011-4dce-bc5c-81f9eab62246) +![Снимок экрана 2025-05-15 234236](https://github.com/user-attachments/assets/6d1287e5-d2f4-4291-93e0-467143adc809) + + + +--- + +### Задание 2 + +pipeline { + agent any + + environment { + REPO_URL = "https://github.com/IlyaKham/sdvps-materials.git" + REGISTRY = "158.160.23.101:8082" + IMAGE = "${REGISTRY}/hello-world" + VERSION = "v${BUILD_NUMBER}" + } + + stages { + stage('Checkout') { + steps { + echo '📥 Клонируем репозиторий...' + git url: "${REPO_URL}", branch: 'main' + } + } + + stage('Go Test') { + steps { + echo '🧪 Запускаем go test...' + sh '/usr/bin/go test .' + } + } + + stage('Docker Build') { + steps { + echo '🐳 Собираем Docker-образ...' + sh 'docker build -t ${IMAGE}:${VERSION} .' + } + } + + stage('Docker Push') { + steps { + echo '📦 Публикуем в Nexus...' + sh ''' + docker login ${REGISTRY} -u admin -p zaq123 + docker push ${IMAGE}:${VERSION} + docker logout ${REGISTRY} + ''' + } + } + } + + post { + success { + echo "✅ Успешно загружено в Nexus: ${IMAGE}:${VERSION}" + } + failure { + echo "❌ Ошибка в пайплайне." + } + } +} + +![Снимок экрана 2025-05-16 000653](https://github.com/user-attachments/assets/e188e4d0-fae0-4592-bd4e-0cae72e9f2c2) + + + diff --git a/README.md b/README.md deleted file mode 100644 index 64ef33813a..0000000000 --- a/README.md +++ /dev/null @@ -1,117 +0,0 @@ -# Домашнее задание к занятию "`Название занятия`" - `Фамилия и имя студента` - - -### Инструкция по выполнению домашнего задания - - 1. Сделайте `fork` данного репозитория к себе в Github и переименуйте его по названию или номеру занятия, например, https://github.com/имя-вашего-репозитория/git-hw или https://github.com/имя-вашего-репозитория/7-1-ansible-hw). - 2. Выполните клонирование данного репозитория к себе на ПК с помощью команды `git clone`. - 3. Выполните домашнее задание и заполните у себя локально этот файл README.md: - - впишите вверху название занятия и вашу фамилию и имя - - в каждом задании добавьте решение в требуемом виде (текст/код/скриншоты/ссылка) - - для корректного добавления скриншотов воспользуйтесь [инструкцией "Как вставить скриншот в шаблон с решением](https://github.com/netology-code/sys-pattern-homework/blob/main/screen-instruction.md) - - при оформлении используйте возможности языка разметки md (коротко об этом можно посмотреть в [инструкции по MarkDown](https://github.com/netology-code/sys-pattern-homework/blob/main/md-instruction.md)) - 4. После завершения работы над домашним заданием сделайте коммит (`git commit -m "comment"`) и отправьте его на Github (`git push origin`); - 5. Для проверки домашнего задания преподавателем в личном кабинете прикрепите и отправьте ссылку на решение в виде md-файла в вашем Github. - 6. Любые вопросы по выполнению заданий спрашивайте в чате учебной группы и/или в разделе “Вопросы по заданию” в личном кабинете. - -Желаем успехов в выполнении домашнего задания! - -### Дополнительные материалы, которые могут быть полезны для выполнения задания - -1. [Руководство по оформлению Markdown файлов](https://gist.github.com/Jekins/2bf2d0638163f1294637#Code) - ---- - -### Задание 1 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 1](ссылка на скриншот 1)` - - ---- - -### Задание 2 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота 2](ссылка на скриншот 2)` - - ---- - -### Задание 3 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` - -### Задание 4 - -`Приведите ответ в свободной форме........` - -1. `Заполните здесь этапы выполнения, если требуется ....` -2. `Заполните здесь этапы выполнения, если требуется ....` -3. `Заполните здесь этапы выполнения, если требуется ....` -4. `Заполните здесь этапы выполнения, если требуется ....` -5. `Заполните здесь этапы выполнения, если требуется ....` -6. - -``` -Поле для вставки кода... -.... -.... -.... -.... -``` - -`При необходимости прикрепитe сюда скриншоты -![Название скриншота](ссылка на скриншот)` diff --git a/Zabbix_Part1.md b/Zabbix_Part1.md new file mode 100644 index 0000000000..27a34da456 --- /dev/null +++ b/Zabbix_Part1.md @@ -0,0 +1,40 @@ +# Домашнее задание к занятию "Система мониторинга Zabbix" - Хамуро Илья + +### Задание 1 + +Установите Zabbix Server с веб-интерфейсом.\ +Команды:\ +$ sudo -s \ +$ wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb\ +$ dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb\ +$ apt update\ +$ apt install zabbix-server-pgsql zabbix-frontend-php php8.3-pgsql zabbix-apache-conf zabbix-sql-scripts zabbix-agent\ +$ sudo -u postgres createuser --pwprompt zabbix\ +$ sudo -u postgres createdb -O zabbix zabbix\ +$ zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix\ +$ systemctl restart zabbix-server zabbix-agent apache2\ +$ systemctl enable zabbix-server zabbix-agent apache2\ + +![Снимок экрана 2025-06-08 155100](https://github.com/user-attachments/assets/6fa7f33c-c100-4c9d-a88e-830a30450ff6) +![Снимок экрана 2025-06-08 160706](https://github.com/user-attachments/assets/d0ed0153-dd4f-455b-9f5e-3cc8931e285a) + + +### Задание 2 + +Установите Zabbix Agent на два хоста.\ +Команды\ +$ sudo -s +$ wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb +$ dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb +$ apt update +$ apt install zabbix-agent +$ systemctl restart zabbix-agent +$ systemctl enable zabbix-agent +![Снимок экрана 2025-06-08 173312](https://github.com/user-attachments/assets/52b201d8-6837-49ad-9cb0-3fd48fa1527e) + +![Снимок экрана 2025-06-08 173716](https://github.com/user-attachments/assets/d002ad77-cd2c-445f-9c8d-67c797a679c5) + +![Снимок экрана 2025-06-08 173820](https://github.com/user-attachments/assets/b231d319-7e0b-4038-9553-d7225462cb4f) + +![Снимок экрана 2025-06-08 173905](https://github.com/user-attachments/assets/35d0a06f-3871-496e-ab6d-630930dd0702) + diff --git a/Zabbix_Part2.md b/Zabbix_Part2.md new file mode 100644 index 0000000000..4425b79b57 --- /dev/null +++ b/Zabbix_Part2.md @@ -0,0 +1,25 @@ +# Домашнее задание к занятию «Система мониторинга Zabbix. Часть 2» + +### Задание 1 +\ +Создайте свой шаблон, в котором будут элементы данных, мониторящие загрузку CPU и RAM хоста.\ +\ +![Снимок экрана 2025-06-08 235811](https://github.com/user-attachments/assets/7d03a554-9267-4a8c-b4fe-0a1a2ddf8233) + + +### Задание 2 +Добавьте в Zabbix два хоста и задайте им имена <фамилия и инициалы-1> и <фамилия и инициалы-2>. Например: ivanovii-1 и ivanovii-2. + +![Снимок экрана 2025-06-08 190512](https://github.com/user-attachments/assets/41b94541-8ee6-400b-821a-ccfb54468f7c) + +### Задание 3 +Привяжите созданный шаблон к двум хостам. Также привяжите к обоим хостам шаблон Linux by Zabbix Agent.\ +![Снимок экрана 2025-06-08 235811](https://github.com/user-attachments/assets/196a9715-eb1c-462a-9d60-0e0ffcabb85a) + +![Снимок экрана 2025-06-08 195452](https://github.com/user-attachments/assets/38463b8d-1f38-4dfb-917f-723e16608b8a) + +### Задание 4 +Создайте свой кастомный дашборд.\ +![Снимок экрана 2025-06-08 235436](https://github.com/user-attachments/assets/89e6a8e0-8605-4d07-826f-c42754570099) + + diff --git a/example b/example new file mode 100644 index 0000000000..c08c273a6e --- /dev/null +++ b/example @@ -0,0 +1,38 @@ +input { + file { + path => "/var/log/nginx/access.log" + start_position => "beginning" + sincedb_path => "/dev/null" + } +} + +filter { + grok { + match => { "message" => '%{IPORHOST:client_ip} - - \[%{HTTPDATE:timestamp}\] "%{WORD:http_method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response_code:int} %{NUMBER:bytes_sent:int} "%{GREEDYDATA:referrer}" "%{GREEDYDATA:user_agent}" "%{GREEDYDATA:other}"' } + } + + date { + match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] + target => "@timestamp" + } + + useragent { + source => "user_agent" + target => "user_agent_details" + } +} + + + +output { + stdout { + } + elasticsearch { + hosts => [ "http://elasticsearch:9200" ] + index => "logs_app_gen%-%{+YYYY.MM.dd}" + } +} + + + + diff --git a/haproxy.md b/haproxy.md new file mode 100644 index 0000000000..58c03f72b3 --- /dev/null +++ b/haproxy.md @@ -0,0 +1,120 @@ +# Домашнее задание к занятию "`Кластеризация и балансировка нагрузки" - `Хамуро И.А.` + +### Задание 1 + global + log /dev/log local0 + log /dev/log local1 notice + chroot /var/lib/haproxy + stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners + stats timeout 30s + user haproxy + group haproxy + daemon + + # Default SSL material locations + ca-base /etc/ssl/certs + crt-base /etc/ssl/private + + # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate + ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 + ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 + ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets + + defaults + log global + mode tcp + option tcplog + option dontlognull + timeout connect 5000 + timeout client 50000 + timeout server 50000 + errorfile 400 /etc/haproxy/errors/400.http + errorfile 403 /etc/haproxy/errors/403.http + errorfile 408 /etc/haproxy/errors/408.http + errorfile 500 /etc/haproxy/errors/500.http + errorfile 502 /etc/haproxy/errors/502.http + errorfile 503 /etc/haproxy/errors/503.http + errorfile 504 /etc/haproxy/errors/504.http + + listen stats # веб-страница со статистикой + bind :888 + mode http + stats enable + stats uri /stats + stats refresh 5s + stats realm Haproxy\ Statistics + + listen web_tcp # балансировка на 4 уровне (TCP) + bind :1325 + mode tcp + balance roundrobin + server s1 127.0.0.1:8888 check inter 3s + server s2 127.0.0.1:9999 check inter 3s + +![Снимок экрана 2025-06-24 200438](https://github.com/user-attachments/assets/2ae48d51-9e75-4f93-9520-4e25ce29fa54) + + +### Задание 2 + global + log /dev/log local0 + log /dev/log local1 notice + chroot /var/lib/haproxy + stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners + stats timeout 30s + user haproxy + group haproxy + daemon + + # Default SSL material locations + ca-base /etc/ssl/certs + crt-base /etc/ssl/private + + # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate + ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 + ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 + ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets + + defaults + log global + mode http + option httplog + option dontlognull + timeout connect 5000 + timeout client 50000 + timeout server 50000 + errorfile 400 /etc/haproxy/errors/400.http + errorfile 403 /etc/haproxy/errors/403.http + errorfile 408 /etc/haproxy/errors/408.http + errorfile 500 /etc/haproxy/errors/500.http + errorfile 502 /etc/haproxy/errors/502.http + errorfile 503 /etc/haproxy/errors/503.http + errorfile 504 /etc/haproxy/errors/504.http + + listen stats + bind :888 + mode http + stats enable + stats uri /stats + stats refresh 5s + stats realm Haproxy\ Statistics + + frontend http_front + bind :8080 + mode http + acl is_example_local hdr(host) -i example.local + use_backend web_servers if is_example_local + default_backend no_match + + backend web_servers + mode http + balance roundrobin + server s1 127.0.0.1:8888 weight 2 check + server s2 127.0.0.1:9999 weight 3 check + server s3 127.0.0.1:7777 weight 4 check + + backend no_match + mode http + http-request deny deny_status 403 + +![Снимок экрана 2025-06-24 204846](https://github.com/user-attachments/assets/d3b47632-42ef-45ae-8e04-829be0a239c2) + diff --git a/rsync.md b/rsync.md new file mode 100644 index 0000000000..9b6c126037 --- /dev/null +++ b/rsync.md @@ -0,0 +1,14 @@ +# Домашнее задание к занятию "Резервное копирование" - `Хамуро И.А.` + +### Задание 1 + +![Снимок экрана 2025-06-25 131328](https://github.com/user-attachments/assets/e924623a-6a97-42b0-ab27-fafca5c99709) + + +### Задание 2 +![Снимок экрана 2025-06-25 140209](https://github.com/user-attachments/assets/530140f0-8096-45f0-b3f7-2826e4451d40) + +![Снимок экрана 2025-06-25 140725](https://github.com/user-attachments/assets/aaf9e060-c757-46d0-a722-28e8b1ea115b) + +![Снимок экрана 2025-06-25 140920](https://github.com/user-attachments/assets/6f57377a-4f62-4af5-bd42-f3164674f46c) +