service:ha
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
service:ha [13.01.2022 12:40] – [HAProxy] viacheslav | service:ha [30.07.2024 19:21] (текущий) – внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ===== Отказоустойчивость IP ===== | ||
+ | Обеспечение общего IP-адреса между однотипными узлами кластера. | ||
+ | ==== ucarp ==== | ||
+ | [[https:// | ||
+ | <code bash> | ||
+ | apt-get install ucarp | ||
+ | </ | ||
+ | <WRAP group> | ||
+ | <WRAP half column> | ||
+ | Сервер 1: | ||
+ | <code file / | ||
+ | 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 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP half column> | ||
+ | Сервер 2: | ||
+ | <code file / | ||
+ | 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 | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | [[https:// | ||
+ | |||
+ | ==== Другие варианты ==== | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | |||
+ | ===== Pacemaker ===== | ||
+ | https:// | ||
+ | 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' | ||
+ | |||
+ | There is also a [[https:// | ||
+ | |||
+ | ===== DRBD ===== | ||
+ | https:// | ||
+ | |||
+ | > В интернете также можно найти кучу статей, | ||
+ | |||
+ | В Ubuntu 22.04 версия DRBD 8-я, чтобы поставить 9-ю, надо заменить модуль ядра.\\ | ||
+ | Distribution Supplied Packages: [[https:// | ||
+ | <code bash> | ||
+ | # Проверка версии встроенного модуля | ||
+ | modinfo -F version drbd | ||
+ | 8.4.11 | ||
+ | # Установка модуля ядра и утилит управления | ||
+ | add-apt-repository ppa: | ||
+ | apt update | ||
+ | apt install drbd-dkms drbd-utils -y | ||
+ | # Проверка версии после установки | ||
+ | dkms status | ||
+ | drbd/ | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | # На вcех нодах выключить сбор и отправку статистики | ||
+ | sed -i ' | ||
+ | </ | ||
+ | |||
+ | На вcех нодах создать конфиг ресурса | ||
+ | <file yaml / | ||
+ | resource " | ||
+ | device minor 1; | ||
+ | disk "/ | ||
+ | meta-disk internal; | ||
+ | |||
+ | on " | ||
+ | address 192.168.1.9: | ||
+ | node-id 0; | ||
+ | } | ||
+ | on " | ||
+ | address 192.168.1.7: | ||
+ | node-id 1; | ||
+ | } | ||
+ | on " | ||
+ | address 192.168.1.8: | ||
+ | node-id 2; | ||
+ | } | ||
+ | connection-mesh { | ||
+ | hosts gitlab-server gitlab-runner deploy-server; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <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: | ||
+ | disk: | ||
+ | deploy-server role: | ||
+ | peer-disk: | ||
+ | gitlab-runner role: | ||
+ | peer-disk: | ||
+ | |||
+ | # Список блочных устройств: | ||
+ | lsblk | ||
+ | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS | ||
+ | loop0 | ||
+ | loop1 | ||
+ | loop2 | ||
+ | loop3 | ||
+ | loop4 | ||
+ | sda | ||
+ | ├─sda1 | ||
+ | ├─sda2 | ||
+ | └─sda3 | ||
+ | └─ubuntu--vg-ubuntu--lv 253:0 0 123.9G | ||
+ | sdb | ||
+ | └─drbd1 | ||
+ | sr0 11:0 1 | ||
+ | |||
+ | # Сделать один из серверов первичным (или не делать, | ||
+ | drbdadm primary --force r0 | ||
+ | |||
+ | # Статус - вторичные начали синхронизацию | ||
+ | drbdadm status | ||
+ | r0 role: | ||
+ | disk: | ||
+ | deploy-server role: | ||
+ | replication: | ||
+ | gitlab-runner role: | ||
+ | replication: | ||
+ | |||
+ | # Создать файловую систему на первичном сервере (окончания синхронизации можно не ждать) | ||
+ | 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: | ||
+ | |||
+ | # Статус | ||
+ | drbdadm status | ||
+ | r0 role: | ||
+ | disk: | ||
+ | deploy-server role: | ||
+ | peer-disk: | ||
+ | gitlab-runner role: | ||
+ | peer-disk: | ||
+ | |||
+ | # Проверка - на первичном сервере смонтировать диск и создать файл, размонтировать | ||
+ | mkdir /drbd | ||
+ | mount /dev/drbd1 /drbd | ||
+ | echo " | ||
+ | umount /drbd | ||
+ | |||
+ | # Проверка на остальных серверах | ||
+ | mkdir /drbd | ||
+ | mount /dev/drbd1 /drbd | ||
+ | cat / | ||
+ | umount /drbd | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | ==== 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 | ||
+ | ╞═══════════════════════════════════════════════════════════════╡ | ||
+ | ┊ deploy-server ┊ SATELLITE ┊ 192.168.1.8: | ||
+ | ┊ gitlab-runner ┊ SATELLITE ┊ 192.168.1.7: | ||
+ | ┊ gitlab-server ┊ COMBINED | ||
+ | ╰───────────────────────────────────────────────────────────────╯ | ||
+ | |||
+ | # Создание LVM | ||
+ | pvcreate /dev/sdb | ||
+ | vgcreate drbd_test /dev/sdb | ||
+ | lvcreate -L 1000M -T drbd_test/ | ||
+ | Thin pool volume with chunk size 64.00 KiB can address at most 15.81 TiB of data. | ||
+ | Logical volume " | ||
+ | |||
+ | # Пул | ||
+ | linstor storage-pool create lvmthin gitlab-server drbd_test drbd_test/ | ||
+ | linstor storage-pool create lvmthin gitlab-runner drbd_test drbd_test/ | ||
+ | linstor storage-pool create lvmthin deploy-server drbd_test drbd_test/ | ||
+ | |||
+ | linstor storage-pool list | ||
+ | ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ | ||
+ | ┊ StoragePool | ||
+ | ╞══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡ | ||
+ | ┊ DfltDisklessStorPool ┊ deploy-server ┊ DISKLESS ┊ | ||
+ | ┊ DfltDisklessStorPool ┊ gitlab-runner ┊ DISKLESS ┊ | ||
+ | ┊ DfltDisklessStorPool ┊ gitlab-server ┊ DISKLESS ┊ | ||
+ | ┊ drbd_test | ||
+ | ┊ drbd_test | ||
+ | ┊ drbd_test | ||
+ | ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ | ||
+ | |||
+ | # Определение ресурса | ||
+ | linstor resource-definition create test1 --port 7070 | ||
+ | |||
+ | linstor resource-definition list -r test1 | ||
+ | ╭─────────────────────────────────────────────╮ | ||
+ | ┊ ResourceName ┊ Port ┊ ResourceGroup ┊ State ┊ | ||
+ | ╞═════════════════════════════════════════════╡ | ||
+ | ┊ test1 ┊ 7070 ┊ DfltRscGrp | ||
+ | ╰─────────────────────────────────────────────╯ | ||
+ | |||
+ | # Определение тома | ||
+ | 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 | ||
+ | ╞══════════════════════════════════════════════════════════════════════════════════════════════════════════════╡ | ||
+ | ┊ deploy-server ┊ test1 ┊ drbd_test | ||
+ | ┊ gitlab-runner ┊ test1 ┊ drbd_test | ||
+ | ┊ gitlab-server ┊ test1 ┊ drbd_test | ||
+ | ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ | ||
+ | </ | ||
+ | |||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | ===== Отказоустойчивость файловых ресурсов ===== | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// |