Новости:

SMF - Just Installed!

Главное меню

Последние сообщения

#21
mysql (Mariadb) / От: Создание БД и удаленного п...
Последний ответ от George - Май 16, 2026, 11:40
Способ удалить пользователей «в одну строчку» (через Bash)Если у вас есть доступ к терминалу сервера, самый быстрый и безопасный способ — сгенерировать SQL-запросы на удаление и сразу передать их обратно в MariaDB.Выполните эту команду в терминале Linux (замените root и пароль при необходимости):
Код: bash
mysql -u root -p -e "SELECT CONCAT('DROP USER \'', user, '\'@\'', host, '\';') FROM mysql.user WHERE user LIKE 'isp%';" -B -N | mysql -u root -p
Как это работает: Первая часть команды находит всех пользователей, чье имя начинается на isp, и превращает их в строки вида DROP USER 'isp_user'@'localhost';. Вторая часть (после знака |) выполняет эти строки как готовые команды.
#22
mysql (Mariadb) / От: Создание БД и удаленного п...
Последний ответ от George - Май 15, 2026, 08:19
Код: bash
CREATE USER 'ispconfig'@'localhost' IDENTIFIED BY 'пароль';
Принудительно удаляем старого пользователя, если он мешает установке
Код: bash
DROP USER IF EXISTS 'ispconfig'@'localhost';
DROP USER IF EXISTS 'ispconfig'@'10.10.1.%';
DROP USER IF EXISTS 'ispconfig'@'%';
-- Даем пользователю root максимальные права с возможностью делегирования (GRANT OPTION)
Код: bash
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.1.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Используйте код с осторожностью.
#23
0. Архитектура (важно понять перед началом)

Instant Clone = каждая VM одноразовая, поэтому:

профили → только через FSLogix (Profile Container)
локальный диск → мусор, не используем
обязательна сеть-хранилище (SMB)

Минимум:

File Server (SMB шарa)
AD (у тебя уже есть)
Golden Image (template)
OU для VDI машин
1. Файловая шара под профили
Создаёшь папку

Например:

\\fileserver\FSLogixProfiles
NTFS права (критично!)

На корень:

SYSTEM — Full
Domain Admins — Full
Users (или Domain Users) — Create Folder / Append Data + List
CREATOR OWNER — Full (Subfolders only)
Самый важный момент:

👉 Пользователь должен создавать свою папку, но не видеть чужие.

Share permissions:

Проще всего:

Everyone — Full

(контроль через NTFS)

2. Установка FSLogix в Golden Image

Ставишь FSLogix Apps:

👉 качается с Microsoft

Устанавливаешь:

FSLogixAppsSetup.exe /install /quiet

После установки:

C:\Program Files\FSLogix
3. Настройка через реестр (основа)

ВСЁ управление через:

HKLM\SOFTWARE\FSLogix\Profiles
Минимально необходимое:
[HKLM\SOFTWARE\FSLogix\Profiles]
Enabled=1
VHDLocations=\\fileserver\FSLogixProfiles
DeleteLocalProfileWhenVHDShouldApply=1
FlipFlopProfileDirectoryName=1
Объяснение (важное)
Enabled=1 — включает FSLogix
VHDLocations — путь к шаре
DeleteLocalProfileWhenVHDShouldApply=1
→ убирает локальные профили (must-have для Instant Clone)

FlipFlopProfileDirectoryName=1
→ делает папки вида:

username_SID

(это правильно для Horizon)

4. Формат контейнера

Рекомендуется:

VolumeType=VHDX
SizeInMBs=30000
IsDynamic=1

👉 30GB — норм старт, потом регулируешь

5. Исключения (чтобы не раздулся профиль)

Добавь:

RedirectionsXML=C:\Program Files\FSLogix\redirections.xml

Создаёшь файл:

Код: bash
<?xml version="1.0" encoding="UTF-8"?>
<FrxProfileFolderRedirection ExcludeCommonFolders="0">
    <Excludes>
        <Exclude Copy="0">AppData\Local\Temp</Exclude>
        <Exclude Copy="0">AppData\Local\Microsoft\Windows\INetCache</Exclude>
        <Exclude Copy="0">AppData\Local\Google\Chrome\User Data\Default\Cache</Exclude>
    </Excludes>
</FrxProfileFolderRedirection>

👉 Это реально спасает от мусора

📌 Куда класть redirections.xml

Файл создаётся на Golden Image:

C:\Program Files\FSLogix\redirections.xml

👉 именно локально в системе, не на шаре
👉 он читается агентом FSLogix при логине

📌 Нужно ли прописывать в GPO?

👉 ДА, обязательно

Сам файл просто лежит, но FSLogix должен знать, что его использовать.

🚀 Как правильно через GPO

Открываешь:

Computer Configuration
 → Administrative Templates
   → FSLogix
     → Profile Containers
Включаешь параметр:
Redirection XML source folder

И указываешь:

C:\Program Files\FSLogix

👉 FSLogix автоматически найдёт там:

redirections.xml
⚠️ ВАЖНО

❗ Не надо указывать полный путь к файлу
❗ Только папку

📌 Альтернатива (если без GPO)

Можно через реестр:

HKLM\SOFTWARE\FSLogix\Profiles
RedirectionsXML = C:\Program Files\FSLogix\redirections.xml

👉 но ты же делаешь прод → лучше через GP

6. GPO (лучше чем руками)

Импортируешь ADMX:

C:\Program Files\FSLogix\Apps\frx.admx

И настраиваешь:

Computer Configuration
  → FSLogix
    → Profiles

Включаешь:

Enable FSLogix Profile Container
VHD Locations
Delete local profile
7. Golden Image (важные моменты)

Перед snapshot:

НЕ логинься доменным юзером

очисти:

C:\Users\*

проверь:

fslogix services running

Сервисы:

FSLogix Apps Services
8. Horizon Pool (Instant Clone)

В VMware Horizon:

тип: Instant Clone
floating pool (обычно)
refresh on logoff — включить
9. Первый логин (как проверить)

После входа пользователя:

На файловом сервере должно появиться:

\\fileserver\FSLogixProfiles\username_SID\
   Profile_username.vhdx
Проверка внутри VM:
C:\Users\username

👉 должен быть mounted VHD, а не локальный профиль

Логи FSLogix:
C:\ProgramData\FSLogix\Logs\Profiles

Если что-то не работает — это первое место смотреть.

10. Частые проблемы (сразу)
❌ Профиль не монтируется
права NTFS
DNS / UNC путь
пользователь не может создать папку
❌ Временный профиль
VHD не создался
блокировка файла
#24
ВАРИАНТ 2. Использование нативного драйвера Docker local (Рекомендуется для Swarm)
Этот способ правильнее для Docker Swarm, так как Docker сам управляет монтированием к GlusterFS в момент старта контейнера на любой ноде кластера.
2.1. Создание Volume через Docker CLI:
Код: bash
docker volume create --driver local --opt type=glusterfs --opt o=addr=10.10.1.42,rw --opt device=:webdata shared_gluster_vol
Где 10.10.1.42 — IP одной из рабочих нод GlusterFS, а :webdata — имя созданного ранее тома GlusterFS.
2.2. Использование в Docker Compose / Swarm Stack:Создайте файл docker-compose-swarm.yml.
Опишите в секции volumes подключение к GlusterFS напрямую. При деплое стек сам создаст нужные именованные волюмы на всех нодах.
Код: bash
version: '3.8'
services:
wordpress:
image: wordpress:latestports:- "8080:80"
volumes:- gluster_wp_data:/var/www/htmldeploy
:replicas: 3
placement:constraints:
- node.role == workervolumes
:gluster_wp_data
:driver
: localdriver_opts
:type: "glusterfs"
o: "addr=10.10.1.42,rw,network.ping-timeout=5"
device: ":webdata"
Запустите этот стек в Swarm-кластере одной командой:
Код: bash
docker stack deploy -c docker-compose-swarm.yml my_web_stack
#25
Развертывание контейнеров поверх распределенной файловой системы GlusterFS позволяет контейнерам на разных нодах одновременно читать и писать в одну и ту же директорию. Если контейнер упадет на Node 1 и перезапустится на Node 2, он мгновенно продолжит работу со своими данными.Существует два основных подхода к такой интеграции: прямое монтирование через локальный волюм и использование специализированного плагина.

ВАРИАНТ 1.
Прямое монтирование (Bind Mount) — Самый простой и надежный способ
Поскольку вы уже смонтировали GlusterFS в общую локальную папку /var/www на Web-нодах (в Шаге 7 предыдущей инструкции), вы можете использовать обычный проброс путей.

1.1. Запуск одиночного контейнера (Docker CLI):
Код: bash
docker run -d --name app-web -v /var/www/my-site:/usr/share/nginx/html -p 80:80 nginx:latest
1.2. Описание в Docker Compose:
Код: bash
version: '3.8'services:web:image: nginx:latestports:- "80:80"volumes:- /var/www/my-site:/usr/share/nginx/html
#26
ЧАСТЬ 3. Docker Swarm (Оркестрация и Кластеризация)
Docker Swarm превращает несколько серверов с Docker в один виртуальный суперкомпьютер.
 Нам понадобятся как минимум две роли: Manager (управляет кластером) и Worker (ноды, выполняющие задачи).
3.1. Инициализация кластераВыполняется строго на главной ноде, которая станет Менеджером (например, IP 10.10.1.42):Инициализировать Swarm-режим и привязать его к сетевому интерфейсу:
Код: bash
docker swarm init --advertise-addr 10.10.1.42
После выполнения этой команды Docker выведет в консоль уникальную строку с токеном вида: docker swarm join --token SWMTKN-... 10.10.1.42:2377
Если вы забыли или потеряли токен для добавления воркеров, выведите его заново:
Код: bash
docker swarm join-token worker
Если вам нужно добавить еще один Менеджер для отказоустойчивости, выведите токен управления:
Код: bash
docker swarm join-token manager

3.2. Подключение нод к кластеру
Выполняется на целевых рабочих серверах (Workers):
Вставьте скопированную на Менеджере команду, чтобы подключить сервер к кластеру:
Код: bash
docker swarm join --token SWMTKN-1-XXXXX-XXXXX 10.10.1.42:2377

3.3. Управление нодами кластера
Выполняется только на Менеджере:
Посмотреть список всех серверов в кластере и их статус (Active/Ready):
Код: bash
docker node ls
Перевести ноду в режим обслуживания (Drain), чтобы Swarm автоматически перенес с неё все работающие контейнеры на другие живые сервера перед перезагрузкой:
Код: bash
docker node update --availability drain [имя_ноды]
Вернуть ноду в рабочий режим (Active) после обслуживания:[
code]docker node update --availability active [имя_ноды][/code
]Удалить упавшую/демонтированную ноду из списка кластера:
Код: bash
docker node rm [имя_ноды]

3.4. Управление Сервисами (Services) вместо контейнеров
В Swarm вместо одиночных контейнеров запускаются "Сервисы". Они следят за тем, чтобы указанное количество копий приложения всегда работало в кластере.Создать сервис (например, веб-сервер) в количестве 3 реплик, распределенных по всему кластеру:
Код: bash
docker service create --name swarm-web --replicas 3 -p 8080:80 nginx:latest
Посмотреть список всех запущенных сервисов в Swarm:
Код: bash
docker service ls
Посмотреть, на каких конкретно серверах (нодах) развернуты реплики конкретного сервиса:
Код: bash
docker service ps swarm-web
Посмотреть логи всего распределенного сервиса со всех нод сразу:
Код: bash
docker service logs -f swarm-web
Масштабировать сервис "на лету" (изменить количество копий, например, увеличить до 5 или уменьшить до 1):
Код: bash
docker service scale swarm-web=5
Обновить образ сервиса без остановки приложения (Rolling Update — контейнеры будут перезапускаться по очереди):
Код: bash
docker service update --image nginx:alpine swarm-web
Полностью удалить сервис из кластера:
Код: bash
docker service rm swarm-web

3.5. Деплой через Стек (Stack)
Чтобы не писать длинные команды docker service create, в Swarm используют готовые Compose-файлы, которые разворачиваются как единый Стек (Stack).
Развернуть или обновить стек приложений из файла docker-compose.yml под именем prod_env:
Код: bash
docker stack deploy -c docker-compose.yml prod_env
Посмотреть список запущенных стеков:
Код: bash
docker stack ls
Посмотреть список всех сервисов, входящих в конкретный стек:
Код: bash
docker stack services prod_env
Полностью удалить весь стек и все его ресурсы из кластера:
Код: bash
docker stack rm prod_env

🧹 ЧАСТЬ 4. Очистка системы (Полезный бонус)Docker кэширует образы и хранит логи остановленных контейнеров, что со временем забивает диск.Удалить ВСЕ остановленные контейнеры, неиспользуемые сети и кэш сборщика (безопасно, не трогает работающее):
Код: bash
docker system prune -f
Тотальная очистка (удалит вообще всё, включая неиспользуемые образы и тома):
Код: bash
docker system prune -a --volumes -f
#27
ЧАСТЬ 2. Docker Compose (Управление мультиконтейнерными приложениями)Docker Compose используется, когда нужно запустить связку (например, Web + PHP + MySQL) одной командой, описав её в файле docker-compose.yml.

2.1. Основные команды управления
Все команды выполняются строго внутри директории, где лежит файл docker-compose.yml.
Собрать образы, создать и запустить все контейнеры из файла в фоновом режиме:
Код: bash
docker compose up -d
Посмотреть статус контейнеров, описанных в текущем Compose-файле:
Код: bash
docker compose ps
Посмотреть агрегированные логи всех контейнеров проекта:
Код: bash
docker compose logs -f
Остановить и полностью удалить контейнеры, сети и тома, созданные этой сборкой:
Код: bash
docker compose down
Остановить контейнеры, но не удалять их:
Код: bash
docker compose stop
Выполнить команду внутри конкретного контейнера из Compose-файла (например, в сервисе с именем db):
Код: bash
docker compose exec db mysql -u root -p
#28
Инструкция разделена на три логических этапа: базовое управление Docker, автоматизация через Docker Compose и развертывание отказоустойчивого кластера Docker Swarm.

ЧАСТЬ 1. Базовый Docker (Одиночные контейнеры)

1.1. Работа с образами (Images)
Скачать образ из Docker Hub без запуска контейнера:
Код: bash
docker pull ubuntu:latest
Посмотреть список всех скачанных образов:
Код: bash
docker images
Удалить ненужный образ:
Код: bash
docker rmi [IMAGE_ID_или_NAME]

1.2. Управление контейнерами (Containers)
Запустить контейнер в фоновом режиме (-d), пробросить порт (-p 80:80) и дать ему имя:
Код: bash
docker run -d --name my-web-server -p 80:80 nginx:latest

Посмотреть список только активных контейнеров:
Код: bash
docker ps

Посмотреть список всех контейнеров (включая остановленные):

Код: bash
docker ps -a
Остановить, запустить или перезапустить контейнер:
Код: bash
docker stop my-web-serverdocker start my-web-serverdocker restart my-web-server

Удалить остановленный контейнер:
Код: bash
docker rm my-web-server
Принудительно удалить работающий контейнер (одним махом):
Код: bash
docker rm -f my-web-server

1.3. Логи и диагностикаПосмотреть логи контейнера в реальном времени (-f) с выводом таймстампов (-t):
Код: bash
docker logs -ft my-web-server
Посмотреть только последние 50 строк лога:
Код: bash
docker logs --tail 50 my-web-server
Провалиться внутрь запущенного контейнера в интерактивном режиме (вызов терминала):
Код: bash
docker exec -it my-web-server bash

Посмотреть потребление ресурсов (CPU, RAM, Сеть) контейнерами в реальном времени:
Код: bash
docker stats
Посмотреть подробную низкоуровневую JSON-информацию о контейнере (IP-адрес, пути монтирования и т.д.):
Код: bash
docker inspect my-web-server
#29
Web servers / От: Настройка отказоустойчивог...
Последний ответ от George - Май 13, 2026, 10:14
Автоматическое восстановление данных (Self-Heal)
в GlusterFSВ реплицируемых томах (включая схемы с Arbiter) GlusterFS умеет автоматически восстанавливать согласованность данных. Если одна из нод уходила в офлайн (перезагрузка, сбой сети), а затем вернулась, механизм Self-Heal Daemon (shd) обнаружит разницу в метаданных и синхронизирует файлы.
ШАГ 1. Проверка статуса автоматического лечения
Выполняется на любой рабочей ноде.
По умолчанию в современных версиях GlusterFS функция лечения включена. Проверить её состояние можно командой:
Код: bash
gluster volume info webdata

В выводе найдите строку cluster.self-heal-daemon. Она должна иметь значение on или enable.
Если по какой-то причине демон выключен, включите его принудительно:
Код: bash
gluster volume set webdata cluster.self-heal-daemon on

ШАГ 2. Мониторинг процесса восстановленияЧтобы узнать, есть ли прямо сейчас файлы, ожидающие синхронизации (очередь на лечение), выполните:[
code]gluster volume heal webdata info[/code]

Интерпретация вывода:Если для каждого кирпича (Brick) написано Number of entries: 0 — все данные полностью синхронны, кластер здоров.Если число больше нуля — эти файлы прямо сейчас находятся в очереди на копирование.Посмотреть список файлов, которые заблокированы из-за критического рассинхрона (Split-Brain):

Код: bash
gluster volume heal webdata info split-brain

ШАГ 3. Ручной запуск лечения (Если нужно срочно)GlusterFS проверяет файлы при обращении к ним (клиентский self-heal) или по таймеру демона. Если вы только что включили упавшую ноду и хотите немедленно запустить полную проверку и синхронизацию всего тома, выполните:[
code]gluster volume heal webdata[/code]
Чтобы проверить состояние запущенного вручную процесса:
Код: bash
gluster volume heal webdata info healed
ШАГ 4. Тюнинг производительности леченияВыполняется на первой ноде.
Если на серверах хранятся миллионы мелких файлов (что часто бывает в /var/www у CMS вроде WordPress или Bitrix), стандартная скорость проверки может замедлять дисковую систему, либо наоборот — лечить слишком медленно.Регулировка количества потоков лечения (по умолчанию 1).
Увеличение ускорит синхронизацию, но поднимет нагрузку на CPU и диски:
Код: bash
gluster volume set webdata cluster.healer-count 4
Включение ускоренного сканирования мелких файлов:
Код: bash
gluster volume set webdata performance. those-readdir-ahead on

🚨 Что делать, если файл попал в Split-Brain?Если две ноды одновременно записывали данные в один файл, пока связь между ними была разорвана, арбитр может не справиться, и файл заблокируется (ошибка ввода-вывода при попытке открыть).
Самый простой и безопасный способ решить это — сказать GlusterFS, какая из нод (выбираем по IP) содержит правильную/свежую версию файла, чтобы затереть устаревшую на другой ноде:
Код: bash
gluster volume heal webdata split-brain favorite-child-replica 10.10.1.42 /test.txt
Где 10.10.1.42 — IP ноды с актуальными данными, а /test.txt — путь к проблемному файлу относительно корня тома.
#30
Web servers / От: Настройка отказоустойчивог...
Последний ответ от George - Май 13, 2026, 10:09
📊 Статус кластера и нод (Peers)

Посмотреть состояние подключений других нод к текущему серверу:
Код: bash
gluster peer status
Вывести список всех серверов, входящих в доверенный пул (включая локальный):
Код: bash
gluster pool list
Удалить ноду из кластера (перед этим на ней нужно остановить все брики):
Код: bash
gluster peer detach [IP_или_ИМЯ_НОДЫ]

📂 Управление томами (Volumes)
Вывести список имен всех созданных томов:
Код: bash
gluster volume list
Показать подробную конфигурацию тома (тип репликации, список кирпичей, опции):
Код: bash
gluster volume info [ИМЯ_ТОМА]
Показать текущий статус тома (онлайн ли кирпичи, PID процессов, порты):
Код: bash
gluster volume status [ИМЯ_ТОМА]
Остановить работу тома (необходимо перед удалением тома):
Код: bash
gluster volume stop [ИМЯ_ТОМА]
Полностью удалить том из системы (данные на дисках при этом не стираются автоматически):
Код: bash
gluster volume delete [ИМЯ_ТОМА]

🧱 Управление кирпичами (Bricks / "Дисками")
Посмотреть детальную информацию по дискам конкретного тома (размер, свободное место, inode):
Код: bash
gluster volume status [ИМЯ_ТОМА] detail
Заменить вышедший из строя или старый кирпич на новый без остановки кластера:
Код: bash
gluster volume replace-brick [ИМЯ_ТОМА] [СТАРЫЙ_IP:/путь] [НОВЫЙ_IP:/путь] commit force
Очистить расширенные атрибуты (xattrs) на директории кирпича, если вы принудительно пересоздаете заваленный том на старом месте:
Код: bash
setfattr -x trusted.glusterfs.volume-id /data/gluster/brick1setfattr -x trusted.gfid /data/gluster/brick1rm -rf /data/gluster/brick1/.glusterfs

📈 Мониторинг и диагностика (Профайлинг)Включить сбор статистики производительности для конкретного тома:
Код: bash
gluster volume profile [ИМЯ_ТОМА] start
Посмотреть текущую статистику (количество операций ввода-вывода, latency, чтение/запись):
Код: bash
gluster volume profile [ИМЯ_ТОМА] info
Остановить сбор статистики:
Код: bash
gluster volume profile [ИМЯ_ТОМА] stop
Посмотреть информацию о заблокированных файлах (полезно при зависании процессов):
Код: bash
gluster volume statedump [ИМЯ_ТОМА]
Файл дампа сохранится в директорию /var/run/gluster/ или /var/log/glusterfs/

🪵 Логи системыGlusterFS пишет детальные логи для каждого компонента отдельно. Найти их можно в системной директории:
Главный лог демона управления (ошибки подключения нод, создание томов):
Код: bash
tail -f /var/log/glusterfs/glusterd.log
Лог конкретного кирпича (замените путь на ваш, точки заменяются дефисами):
Код: bash
tail -f /var/log/glusterfs/bricks/data-gluster-brick1.log
Лог клиента на стороне монтирования (ошибки со стороны Web-нод):
Код: bash
tail -f /var/log/glusterfs/var-www.log

⚙️ Сброс настроек (Если всё сломалось)
Команда для принудительного снятия опций тюнинга и возврата к стандартным значениям:
Код: bash
gluster volume reset [ИМЯ_ТОМА] [НАЗВАНИЕ_ОПЦИИ]
🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.