Инструменты пользователя

Инструменты сайта


service:ha

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:ha [30.07.2023 15:32] – [DRBD / Linstor] viacheslavservice:ha [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +===== Отказоустойчивость IP =====
 +Обеспечение общего IP-адреса между однотипными узлами кластера.
 +==== ucarp ====
 +[[https://github.com/jedisct1/UCarp|Ucarp]] — свободная реализация протокола CARP, который позволяет нескольким серверам иметь дополнительный одинаковый ip-адрес из одной подсети. В конкретный момент времени адрес может быть активен только на одном сервере.
 +<code bash>
 +apt-get install ucarp
 +</code>
  
 +<WRAP group>
 +<WRAP half column>
 +Сервер 1:
 +<code file /etc/network/interfaces>
 +iface lo inet loopback
 + 
 +auto eth0
 +allow-hotplug eth0
 +iface eth0 inet static
 +        address 192.168.0.1
 +        netmask 255.255.255.0
 +        gateway 192.168.0.254
 +        ucarp-vid 1
 +        ucarp-vip 192.168.0.3
 +        ucarp-password password
 +iface eth0:ucarp inet static
 +        address 192.168.0.3
 +        netmask 255.255.255.0
 +</code>
 +</WRAP>
 +
 +<WRAP half column>
 +Сервер 2:
 +<code file /etc/network/interfaces>
 +iface lo inet loopback
 + 
 +auto eth0
 +allow-hotplug eth0
 +iface eth0 inet static
 +        address 192.168.0.2
 +        netmask 255.255.255.0
 +        gateway 192.168.0.254
 +        ucarp-vid 1
 +        ucarp-vip 192.168.0.3
 +        ucarp-password password
 +iface eth0:ucarp inet static
 +        address 192.168.0.3
 +        netmask 255.255.255.0
 +</code>
 +</WRAP>
 +</WRAP>
 +[[https://blog.bissquit.com/unix/debian/prostejshij-otkazoustojchivyj-balansirovshhik-layer-4/|Простейший отказоустойчивый балансировщик layer 4]]
 +
 +==== Другие варианты ====
 +  * [[https://clusterlabs.org/|corosync2/pacemaker]]
 +  * [[https://www.keepalived.org/|keepalived]]
 +  * [[http://www.linuxvirtualserver.org/|LVS]] (модуль ядра Linux ipvs).
 +
 +===== Pacemaker =====
 +https://clusterlabs.org/pacemaker/doc/\\
 +If you're new to Pacemaker or clustering in general, the best place to start is **Clusters from Scratch,** which walks you step-by-step through the installation and configuration of a high-availability cluster with Pacemaker. It even makes common configuration mistakes so that it can demonstrate how to fix them.
 +
 +On the other hand, if you're looking for an exhaustive reference of all of Pacemaker's options and features, try **Pacemaker Explained.** It's dry, but should have the answers you're looking for.
 +
 +There is also a [[https://wiki.clusterlabs.org/wiki/Main_Page|project wiki]] with examples, how-to guides, and other information that doesn't make it into the manuals.
 +
 +===== DRBD =====
 +https://linbit.com/drbd-user-guide/drbd-guide-9_0-en
 +
 +> В интернете также можно найти кучу статей, где люди ошибочно советуют запускать DRBD в режиме dual-primary и поверх него настроить кластерную файловую систему. Это наихудший вариант, потому что получается двунаправленная синхронизация, и в случае каких-либо проблем вы рискуете получить неразрешимый split-brain с гарантированной потерей данных. Никогда не используйте опцию allow-two-primaries в DRBD для чего-либо, кроме live-миграции виртуальных машин.
 +
 +В Ubuntu 22.04 версия DRBD 8-я, чтобы поставить 9-ю, надо заменить модуль ядра.\\
 +Distribution Supplied Packages: [[https://linbit.com/drbd-user-guide/drbd-guide-9_0-en/#s-install-pkgs-ubuntu_linux|Ubuntu Linux]]
 +<code bash>
 +# Проверка версии встроенного модуля
 +modinfo -F version drbd
 +8.4.11
 +# Установка модуля ядра и утилит управления
 +add-apt-repository ppa:linbit/linbit-drbd9-stack
 +apt update
 +apt install drbd-dkms drbd-utils -y
 +# Проверка версии после установки
 +dkms status
 +drbd/9.2.4-1ppa1~jammy1, 5.15.0-78-generic, x86_64: installed
 +</code>
 +
 +<code bash>
 +# На вcех нодах выключить сбор и отправку статистики
 +sed -i 's/usage-count yes/usage-count no/' /etc/drbd.d/global_common.conf
 +</code>
 +
 +На вcех нодах создать конфиг ресурса
 +<file yaml /etc/drbd.d/r0.res>
 +resource "r0" {
 +  device minor 1;
 +  disk "/dev/sdb";
 +  meta-disk internal;
 +
 +  on "gitlab-server" {
 +    address 192.168.1.9:7789;
 +    node-id 0;
 +  }
 +  on "gitlab-runner" {
 +    address 192.168.1.7:7789;
 +    node-id 1;
 +  }
 +  on "deploy-server" {
 +    address 192.168.1.8:7789;
 +    node-id 2;
 +  }
 +  connection-mesh {
 +    hosts gitlab-server gitlab-runner deploy-server;
 +  }
 +}
 +</file>
 +
 +<code bash>
 +# На всех нодах создать блочное drbd-устройство на основе конфига
 +drbdadm create-md r0
 +initializing activity log
 +initializing bitmap (64 KB) to all zero
 +Writing meta data...
 +New drbd meta data block successfully created.
 +
 +# На всех нодах запустить drbd-устройство
 +drbdadm up r0
 +
 +# Статус - все вторичные
 +drbdadm status
 +r0 role:Secondary
 +  disk:Inconsistent
 +  deploy-server role:Secondary
 +    peer-disk:Inconsistent
 +  gitlab-runner role:Secondary
 +    peer-disk:Inconsistent
 +
 +# Список блочных устройств: появилось sdb/drbd1 (1 - это в конфиге "device minor")
 +lsblk
 +NAME                      MAJ:MIN RM    SIZE RO TYPE MOUNTPOINTS
 +loop0                       7:   0   63.3M  1 loop /snap/core20/1822
 +loop1                       7:   0   63.4M  1 loop /snap/core20/1974
 +loop2                       7:   0  111.9M  1 loop /snap/lxd/24322
 +loop3                       7:   0   53.3M  1 loop /snap/snapd/19457
 +loop4                       7:   0   49.8M  1 loop /snap/snapd/18357
 +sda                         8:   0    127G  0 disk
 +├─sda1                      8:1    0      1G  0 part /boot/efi
 +├─sda2                      8:2    0      2G  0 part /boot
 +└─sda3                      8:3    0  123.9G  0 part
 +  └─ubuntu--vg-ubuntu--lv 253:0    0  123.9G  0 lvm  /
 +sdb                         8:16        1G  0 disk
 +└─drbd1                   147:   0 1023.9M  0 disk
 +sr0                        11:0    1   1024M  0 rom
 +
 +# Сделать один из серверов первичным (или не делать, а просто смонтировать /dev/drbd1)
 +drbdadm primary --force r0
 +
 +# Статус - вторичные начали синхронизацию
 +drbdadm status
 +r0 role:Primary
 +  disk:UpToDate
 +  deploy-server role:Secondary congested:yes ap-in-flight:0 rs-in-flight:8192
 +    replication:SyncSource peer-disk:Inconsistent done:67.39
 +  gitlab-runner role:Secondary congested:yes ap-in-flight:0 rs-in-flight:6144
 +    replication:SyncSource peer-disk:Inconsistent done:67.29
 +
 +# Создать файловую систему на первичном сервере (окончания синхронизации можно не ждать)
 +mkfs.ext4 /dev/drbd1
 +mke2fs 1.46.5 (30-Dec-2021)
 +Discarding device blocks: done
 +Creating filesystem with 262119 4k blocks and 65536 inodes
 +Filesystem UUID: 659cdd2a-fedc-42a0-8d44-6895a92700c5
 +Superblock backups stored on blocks:
 +        32768, 98304, 163840, 229376
 +
 +Allocating group tables: done
 +Writing inode tables: done
 +Creating journal (4096 blocks): done
 +Writing superblocks and filesystem accounting information: done
 +
 +# Статус
 +drbdadm status
 +r0 role:Primary
 +  disk:UpToDate
 +  deploy-server role:Secondary
 +    peer-disk:UpToDate
 +  gitlab-runner role:Secondary
 +    peer-disk:UpToDate
 +
 +# Проверка - на первичном сервере смонтировать диск и создать файл, размонтировать
 +mkdir /drbd
 +mount /dev/drbd1 /drbd
 +echo "Hello, it should work" > /drbd/file.txt
 +umount /drbd
 +
 +# Проверка на остальных серверах
 +mkdir /drbd
 +mount /dev/drbd1 /drbd
 +cat /drbd/file.txt
 +umount /drbd
 +</code>
 +
 +[[https://habr.com/ru/articles/417473/|Надежное хранилище с DRBD9 и Proxmox (Часть 1: NFS)]]\\
 +[[https://habr.com/ru/articles/417597/|Надежное хранилище с DRBD9 и Proxmox (Часть 2: iSCSI+LVM)]]\\
 +[[https://habr.com/ru/articles/423101/|Разворачиваем хранилище LINSTOR для Proxmox]]\\
 +
 +==== Linstor ====
 +
 +  * linstor-controller - распределяет конфигурации по узлам, порты 3370 и 3376.
 +  * linstor-satellite - применяет конфигурацию на узле (устанавливается на каждый сервер drbd), порт 3366.
 +  * linstor-client - клиентская часть, общается с контроллером, применяя через него конфигурации.
 +
 +Контроллер можно ставить на один сервер с сателлитом. Клиент ставится на один сервер с контроллером.
 +
 +<code bash>
 +# Контроллер + сателлит + клиент
 +apt install linstor-controller linstor-satellite linstor-client
 +systemctl start linstor-controller
 +systemctl enable linstor-controller
 +# Сателлит
 +apt install linstor-satellite
 +systemctl start linstor-satellite
 +systemctl enable linstor-satellite
 +
 +# Добавление нод в кластер
 +linstor node create --node-type combined gitlab-server 192.168.1.9
 +linstor node create --node-type satellite gitlab-runner 192.168.1.7
 +linstor node create --node-type satellite deploy-server 192.168.1.8
 +
 +linstor node list
 +╭───────────────────────────────────────────────────────────────╮
 +┊ Node          ┊ NodeType  ┊ Addresses                ┊ State  ┊
 +╞═══════════════════════════════════════════════════════════════╡
 +┊ deploy-server ┊ SATELLITE ┊ 192.168.1.8:3366 (PLAIN) ┊ Online ┊
 +┊ gitlab-runner ┊ SATELLITE ┊ 192.168.1.7:3366 (PLAIN) ┊ Online ┊
 +┊ gitlab-server ┊ COMBINED  ┊ 192.168.1.9:3366 (PLAIN) ┊ Online ┊
 +╰───────────────────────────────────────────────────────────────╯
 +
 +# Создание LVM
 +pvcreate /dev/sdb
 +vgcreate drbd_test /dev/sdb
 +lvcreate -L 1000M -T drbd_test/thin_pool
 +  Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data.
 +  Logical volume "thin_pool" created.
 +
 +# Пул
 +linstor storage-pool create lvmthin gitlab-server drbd_test drbd_test/thin_pool
 +linstor storage-pool create lvmthin gitlab-runner drbd_test drbd_test/thin_pool
 +linstor storage-pool create lvmthin deploy-server drbd_test drbd_test/thin_pool
 +
 +linstor storage-pool list
 +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 +┊ StoragePool          ┊ Node          ┊ Driver   ┊ PoolName            ┊ FreeCapacity ┊ TotalCapacity ┊ CanSnapshots ┊ State ┊ SharedName                         ┊
 +╞══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
 +┊ DfltDisklessStorPool ┊ deploy-server ┊ DISKLESS ┊                     ┊              ┊               ┊ False        ┊ Ok    ┊ deploy-server;DfltDisklessStorPool ┊
 +┊ DfltDisklessStorPool ┊ gitlab-runner ┊ DISKLESS ┊                     ┊              ┊               ┊ False        ┊ Ok    ┊ gitlab-runner;DfltDisklessStorPool ┊
 +┊ DfltDisklessStorPool ┊ gitlab-server ┊ DISKLESS ┊                     ┊              ┊               ┊ False        ┊ Ok    ┊ gitlab-server;DfltDisklessStorPool ┊
 +┊ drbd_test            ┊ deploy-server ┊ LVM_THIN ┊ drbd_test/thin_pool ┊     1000 MiB ┊      1000 MiB ┊ True         ┊ Ok    ┊ deploy-server;drbd_test            ┊
 +┊ drbd_test            ┊ gitlab-runner ┊ LVM_THIN ┊ drbd_test/thin_pool ┊     1000 MiB ┊      1000 MiB ┊ True         ┊ Ok    ┊ gitlab-runner;drbd_test            ┊
 +┊ drbd_test            ┊ gitlab-server ┊ LVM_THIN ┊ drbd_test/thin_pool ┊     1000 MiB ┊      1000 MiB ┊ True         ┊ Ok    ┊ gitlab-server;drbd_test            ┊
 +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
 +
 +# Определение ресурса
 +linstor resource-definition create test1 --port 7070
 +
 +linstor resource-definition list -r test1
 +╭─────────────────────────────────────────────╮
 +┊ ResourceName ┊ Port ┊ ResourceGroup ┊ State ┊
 +╞═════════════════════════════════════════════╡
 +┊ test1        ┊ 7070 ┊ DfltRscGrp    ┊ ok    ┊
 +╰─────────────────────────────────────────────╯
 +
 +# Определение тома
 +linstor volume-definition create test1 200M --storage-pool drbd_test
 +
 +# Создание ресурса
 +linstor resource create test1 --auto-place 3
 +
 +# Статус
 +linstor resource list
 +╭───────────────────────────────────────────────────────────────────────────────────────────╮
 +┊ ResourceName ┊ Node          ┊ Port ┊ Usage  ┊ Conns ┊        State ┊ CreatedOn           ┊
 +╞═══════════════════════════════════════════════════════════════════════════════════════════╡
 +┊ test1        ┊ deploy-server ┊ 7070 ┊ Unused ┊ Ok    ┊ Inconsistent ┊ 2023-07-30 17:47:05 ┊
 +┊ test1        ┊ gitlab-runner ┊ 7070 ┊ Unused ┊ Ok    ┊ Inconsistent ┊ 2023-07-30 17:47:05 ┊
 +┊ test1        ┊ gitlab-server ┊ 7070 ┊ Unused ┊ Ok    ┊ Inconsistent ┊ 2023-07-30 17:47:06 ┊
 +╰───────────────────────────────────────────────────────────────────────────────────────────╯
 +linstor volume list
 +╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
 +┊ Node          ┊ Resource ┊ StoragePool ┊ VolNr ┊ MinorNr ┊ DeviceName    ┊ Allocated ┊ InUse  ┊        State ┊
 +╞══════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
 +┊ deploy-server ┊ test1    ┊ drbd_test   ┊     0 ┊    1000 ┊ /dev/drbd1000 ┊   125 KiB ┊ Unused ┊ Inconsistent ┊
 +┊ gitlab-runner ┊ test1    ┊ drbd_test   ┊     0 ┊    1000 ┊ /dev/drbd1000 ┊   125 KiB ┊ Unused ┊ Inconsistent ┊
 +┊ gitlab-server ┊ test1    ┊ drbd_test   ┊     0 ┊    1000 ┊ /dev/drbd1000 ┊   125 KiB ┊ Unused ┊ Inconsistent ┊
 +╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
 +</code>
 +
 +[[https://www.youtube.com/watch?v=5LUw_B10FJ8&list=PLtGnc4I6s8dtam3Y2YFdfQgaPdJcqHxS7&index=8&pp=iAQB|Highly Available Storage made easy with DRBD from LINBIT]]\\
 +[[https://habr.com/ru/companies/flant/articles/680286/|LINSTOR — это как Kubernetes, но для блочных устройств]]\\
 +[[https://habr.com/ru/articles/531344/|Траблшутинг DRBD9 в LINSTOR]]
 +===== Отказоустойчивость файловых ресурсов =====
 +[[https://social.technet.microsoft.com/Forums/windowsserver/en-US/9ddc9513-861c-485c-b299-6d849f6bf161/best-design-for-file-services-high-availability?forum=winserverClustering]]\\
 +[[https://www.unitrends.com/blog/sofs-help-hyper-v]]\\
 +[[https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831349(v=ws.11)?redirectedfrom=MSDN]]\\
 +[[https://www.theurbanpenguin.com/category/linux/drbd/|DRBD Pacemaker HA Cluster]]\\

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki