GFS2 на iSCSI с Multipath: различия между версиями
Нет описания правки |
|||
(не показаны 3 промежуточные версии 3 участников) | |||
Строка 1: | Строка 1: | ||
{{Stub}} | {{Stub}} | ||
GFS2 | GFS2 — кластерная файловая система обеспечивающая одновременный доступ к общим хранилищам в кластере. GFS2 позволяет всем узлам иметь прямой одновременный доступ к одному общему хранилищу. | ||
== Введение == | == Введение == | ||
В данной статье рассмотрим развертывание GFS2 на устройстве, подключенном по интерфейсу iSCSI c использованием двух сетевых подключений. | В данной статье рассмотрим развертывание GFS2 на устройстве, подключенном по интерфейсу iSCSI c использованием двух сетевых подключений. | ||
Тестовый стенд: | Тестовый стенд: | ||
* Server-iSCSI (ip: 10.10.10.202; ip: 192.168.155.100) | * Server-iSCSI (ip: 10.10.10.202; ip: 192.168.155.100) — сервер предоставляющий блочное устройство через iSCSI; | ||
* iSCSI1 (ip: 10.10.10.164; ip: 192.168.155.111) | * iSCSI1 (ip: 10.10.10.164; ip: 192.168.155.111) — первая нода кластера; | ||
* iSCSI2 (ip: 10.10.10.211; ip: 192.168.155.112) | * iSCSI2 (ip: 10.10.10.211; ip: 192.168.155.112) — вторая нода кластера. | ||
Для работы GFS2 необходим работающий кластер LVM. В качестве кластера можно использовать ALT PVE. В данной статье мы рассмотрим минимально-необходимую конфигурацию. | Для работы GFS2 необходим работающий кластер LVM. В качестве кластера можно использовать ALT PVE. В данной статье мы рассмотрим минимально-необходимую конфигурацию. | ||
== Настройка iSCSI target == | == Настройка iSCSI target == | ||
'''iSCSI-target''' | '''iSCSI-target''' — сервер предоставляющий блочное устройство (если необходимо, как правило этот сервис предоставляется оборудованием). | ||
Устанавливаем пакет scsitarget-utils, запускаем и добавляем в автозагрузку сервис tgt: | Устанавливаем пакет scsitarget-utils, запускаем и добавляем в автозагрузку сервис tgt: | ||
<pre># apt-get install scsitarget-utils | <pre># apt-get install scsitarget-utils | ||
Строка 18: | Строка 19: | ||
# systemctl start tgt</pre> | # systemctl start tgt</pre> | ||
В файле {{path|/etc/tgt/conf.d/sample.conf}} находятся примеры target-ов. | В файле {{path|/etc/tgt/conf.d/sample.conf}} находятся примеры target-ов. | ||
Настроим отдачу по iSCSI блочного устройства /dev/sdb для этого добавим в файл {{path|/etc/tgt/targets.conf}} следующие строки: | Настроим отдачу по iSCSI блочного устройства /dev/sdb для этого добавим в файл {{path|/etc/tgt/targets.conf}} следующие строки: | ||
<source lang="text"><target iqn.2016-12.com.example:server.target1> | <source lang="text"><target iqn.2016-12.com.example:server.target1> | ||
direct-store /dev/sdb | direct-store /dev/sdb | ||
</target></source> | </target></source> | ||
{{path|iqn.2016-12.com.example:server.target1}} | {{path|iqn.2016-12.com.example:server.target1}} — это IQN (iSCSI qualified name) имя длиной до 255 символов в следующем формате: | ||
<pre>iqn.<год-месяц>.<имя домена в обратном порядке>:<имя сервера>.<имя цели></pre> | <pre>iqn.<год-месяц>.<имя домена в обратном порядке>:<имя сервера>.<имя цели></pre> | ||
Перезагрузим сервис: | Перезагрузим сервис: | ||
Строка 35: | Строка 37: | ||
I_T nexus information: | I_T nexus information: | ||
I_T nexus: 100 | I_T nexus: 100 | ||
Initiator: iqn.2017-01. | Initiator: iqn.2017-01.ru.alt:01:9daa1def62d3 alias: iSCSI3 | ||
Connection: 0 | Connection: 0 | ||
IP Address: 10.10.10.201 | IP Address: 10.10.10.201 | ||
Строка 73: | Строка 75: | ||
== Настройка iSCSI initiator == | == Настройка iSCSI initiator == | ||
'''iSCSI-initiator''' | |||
'''iSCSI-initiator''' — клиент подключающийся к '''iSCSI-target'''. | |||
Установим пакет {{path|open-iscsi}} запустим и добавим в автозагрузку сервис iscsid: | Установим пакет {{path|open-iscsi}} запустим и добавим в автозагрузку сервис iscsid: | ||
<pre># apt-get install open-iscsi | <pre># apt-get install open-iscsi | ||
Строка 79: | Строка 83: | ||
# systemctl start iscsid</pre> | # systemctl start iscsid</pre> | ||
Присоединим iSCSI хранилище к нашему кластеру: | Присоединим iSCSI хранилище к нашему кластеру: | ||
Для этого выполним команды: | |||
Посмотреть доступные для подключения target-ы можно с помощью команды: | Для этого выполним команды: | ||
Посмотреть доступные для подключения target-ы можно с помощью команды: | |||
<pre># iscsiadm -m discovery -t sendtargets -p 10.10.10.202</pre> | <pre># iscsiadm -m discovery -t sendtargets -p 10.10.10.202</pre> | ||
Подключить target-ы: | Подключить target-ы: | ||
<pre># iscsiadm -m node --login</pre> | <pre># iscsiadm -m node --login</pre> | ||
То же самое нужно выполнить для второго подключения к серверу. | То же самое нужно выполнить для второго подключения к серверу. | ||
Настроим автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры: | |||
Настроим автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры: | |||
В файле {{path|/etc/iscsi/iscsid.conf}}: | В файле {{path|/etc/iscsi/iscsid.conf}}: | ||
<pre>node.startup = automatic</pre> | <pre>node.startup = automatic</pre> | ||
В файле {{path|/etc/iscsi/send_targets/<TargetServer>,<Port>/st_config}} | В файле (до p9.2) {{path|/etc/iscsi/send_targets/<TargetServer>,<Port>/st_config}} | ||
В файле (>=p9.2) {{path|/var/lib/iscsi/send_targets/<TargetServer>,<Port>/st_config}} | |||
<pre>discovery.sendtargets.use_discoveryd = Yes</pre> | <pre>discovery.sendtargets.use_discoveryd = Yes</pre> | ||
Вместо <TargetServer> подставляем IP адреса серверов. | |||
Вместо <TargetServer> подставляем IP адреса серверов. | |||
В итоге при загрузке у нас должны подключаться два устройства ({{path|/dev/sdb}}, {{path|/dev/sdc}}). | В итоге при загрузке у нас должны подключаться два устройства ({{path|/dev/sdb}}, {{path|/dev/sdc}}). | ||
== Настройка Multipath == | == Настройка Multipath == | ||
Сам по себе open-iscsi не умеет подключаться к нескольким IP одного target-а. При одновременном подключении мы получили два блочных устройства. Для решения этой проблемы существует multipath, который находит диски с одинаковым идентификаторами и обрабатывает их как один диск. | Сам по себе open-iscsi не умеет подключаться к нескольким IP одного target-а. При одновременном подключении мы получили два блочных устройства. Для решения этой проблемы существует multipath, который находит диски с одинаковым идентификаторами и обрабатывает их как один диск. | ||
Установим необходимый пакет: | Установим необходимый пакет: | ||
<pre># apt-get install multipath-tools</pre> | <pre># apt-get install multipath-tools</pre> | ||
Строка 105: | Строка 118: | ||
<pre># systemctl enable multipathd | <pre># systemctl enable multipathd | ||
# systemctl start multipathd</pre> | # systemctl start multipathd</pre> | ||
Multipath обработает наши iSCSI устройства, сделает из них одно, и положит его в каталог {{path|/dev/mapper}} | Multipath обработает наши iSCSI устройства, сделает из них одно, и положит его в каталог {{path|/dev/mapper}}. | ||
Посмотреть обработанные multipath устройства можно командой: | Посмотреть обработанные multipath устройства можно командой: | ||
<pre># multipath -ll | <pre># multipath -ll | ||
Строка 116: | Строка 130: | ||
Отключить устройство можно командой: | Отключить устройство можно командой: | ||
<pre># multipath -f mpatha</pre> | <pre># multipath -f mpatha</pre> | ||
== Настройка Corosync == | == Настройка Corosync == | ||
Для работы Cluster LVM нам необходимо настроить сервис Corosync. | Для работы Cluster LVM нам необходимо настроить сервис Corosync. | ||
Сначала изменим имена нод: | |||
Сначала изменим имена нод: | |||
На первой ноде: | На первой ноде: | ||
<pre># hostnamectl set-hostname iSCSI1</pre> | <pre># hostnamectl set-hostname iSCSI1</pre> | ||
Строка 129: | Строка 146: | ||
<pre># corosync-keygen -l</pre> | <pre># corosync-keygen -l</pre> | ||
Сгенерированный файл {{path|/etc/corosync/authkey}} нужно скопировать на каждую ноду. | Сгенерированный файл {{path|/etc/corosync/authkey}} нужно скопировать на каждую ноду. | ||
Далее нужно на каждой ноде привести файл конфигурации {{path|/etc/corosync/corosync.conf}} к следующему виду: | Далее нужно на каждой ноде привести файл конфигурации {{path|/etc/corosync/corosync.conf}} к следующему виду: | ||
<source lang="ruby">logging { | <source lang="ruby">logging { | ||
Строка 182: | Строка 200: | ||
# systemctl start dlm | # systemctl start dlm | ||
# systemctl start lvm2-cluster-activation</pre> | # systemctl start lvm2-cluster-activation</pre> | ||
Для корректной работы CLVM и Multipath говорим LVM не сканировать наши iSCSI-диски (sd*): | Для корректной работы CLVM и Multipath говорим LVM не сканировать наши iSCSI-диски (sd*): | ||
В файл {{path|/etc/lvm/lvm.conf}} добавляем: | В файл {{path|/etc/lvm/lvm.conf}} добавляем: | ||
<pre>devices { | <pre>devices { | ||
Строка 195: | Строка 214: | ||
В группе 'shared_vg' создаем Logical 'storage': | В группе 'shared_vg' создаем Logical 'storage': | ||
<pre># lvcreate -n storage -l +100%Free shared_vg</pre> | <pre># lvcreate -n storage -l +100%Free shared_vg</pre> | ||
Говорим CLVM, какие Volume Groups надо активировать/деактивировать при запуске/остановке: | Говорим CLVM, какие Volume Groups надо активировать/деактивировать при запуске/остановке: | ||
Файл {{path|/etc/sysconfig/clvmd}}: | Файл {{path|/etc/sysconfig/clvmd}}: | ||
<pre>START_CLVM=yes | <pre>START_CLVM=yes | ||
Строка 208: | Строка 228: | ||
Отформатируем наше multipath устройство в GFS2: | Отформатируем наше multipath устройство в GFS2: | ||
<pre># mkfs.gfs2 -p lock_dlm -t gfs2pve:mydata1 -j 2 /dev/mapper/shared_vg-storage</pre> | <pre># mkfs.gfs2 -p lock_dlm -t gfs2pve:mydata1 -j 2 /dev/mapper/shared_vg-storage</pre> | ||
В данном примере файловая система использует протокол lock_dlm. Кластер имеет имя gfs2pve, имя файловой системы — mydata1. Файловая система создана на {{path|/dev/mapper/shared_vg-storage}} и содержит 2 журнала. | В данном примере файловая система использует протокол lock_dlm. Кластер имеет имя gfs2pve, имя файловой системы — mydata1. Файловая система создана на {{path|/dev/mapper/shared_vg-storage}} и содержит 2 журнала. | ||
Примонтируем файловую систему gfs2: | Примонтируем файловую систему gfs2: | ||
<pre># mount /dev/mapper/shared_vg-storage /mnt/gfs2</pre> | <pre># mount /dev/mapper/shared_vg-storage /mnt/gfs2</pre> | ||
Добавим в {{path|/etc/fstab}} строчку для монтирования нашей файловой системы при загрузке системы: | Добавим в {{path|/etc/fstab}} строчку для монтирования нашей файловой системы при загрузке системы: | ||
<pre>/dev/mapper/shared_vg-storage /mnt/gfs2 gfs2 noatime,rw 0 0</pre> | <pre>/dev/mapper/shared_vg-storage /mnt/gfs2 gfs2 noatime,rw 0 0</pre> | ||
[[Категория:Система хранения данных]] | |||
{{Category navigation|title=Система хранения данных|category=Система хранения данных|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 13:37, 26 апреля 2022
GFS2 — кластерная файловая система обеспечивающая одновременный доступ к общим хранилищам в кластере. GFS2 позволяет всем узлам иметь прямой одновременный доступ к одному общему хранилищу.
Введение
В данной статье рассмотрим развертывание GFS2 на устройстве, подключенном по интерфейсу iSCSI c использованием двух сетевых подключений.
Тестовый стенд:
- Server-iSCSI (ip: 10.10.10.202; ip: 192.168.155.100) — сервер предоставляющий блочное устройство через iSCSI;
- iSCSI1 (ip: 10.10.10.164; ip: 192.168.155.111) — первая нода кластера;
- iSCSI2 (ip: 10.10.10.211; ip: 192.168.155.112) — вторая нода кластера.
Для работы GFS2 необходим работающий кластер LVM. В качестве кластера можно использовать ALT PVE. В данной статье мы рассмотрим минимально-необходимую конфигурацию.
Настройка iSCSI target
iSCSI-target — сервер предоставляющий блочное устройство (если необходимо, как правило этот сервис предоставляется оборудованием).
Устанавливаем пакет scsitarget-utils, запускаем и добавляем в автозагрузку сервис tgt:
# apt-get install scsitarget-utils # systemctl enable tgt # systemctl start tgt
В файле /etc/tgt/conf.d/sample.conf находятся примеры target-ов.
Настроим отдачу по iSCSI блочного устройства /dev/sdb для этого добавим в файл /etc/tgt/targets.conf следующие строки:
<target iqn.2016-12.com.example:server.target1>
direct-store /dev/sdb
</target>
iqn.2016-12.com.example:server.target1 — это IQN (iSCSI qualified name) имя длиной до 255 символов в следующем формате:
iqn.<год-месяц>.<имя домена в обратном порядке>:<имя сервера>.<имя цели>
Перезагрузим сервис:
# systemctl reload tgt
Проверим конфигурацию:
# tgtadm --lld iscsi --op show --mode target Target 1: iqn.2016-12.com.example:server.target1 System information: Driver: iscsi State: ready I_T nexus information: I_T nexus: 100 Initiator: iqn.2017-01.ru.alt:01:9daa1def62d3 alias: iSCSI3 Connection: 0 IP Address: 10.10.10.201 LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 10737 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/sdb Backing store flags: Account information: ACL information: ALL
iSCSI-target по умолчанию работает на порту 3260/tcp. На этом базовая настройка iSCSI-target окончена.
Настройка iSCSI initiator
iSCSI-initiator — клиент подключающийся к iSCSI-target.
Установим пакет open-iscsi запустим и добавим в автозагрузку сервис iscsid:
# apt-get install open-iscsi # systemctl enable iscsid # systemctl start iscsid
Присоединим iSCSI хранилище к нашему кластеру:
Для этого выполним команды:
Посмотреть доступные для подключения target-ы можно с помощью команды:
# iscsiadm -m discovery -t sendtargets -p 10.10.10.202
Подключить target-ы:
# iscsiadm -m node --login
То же самое нужно выполнить для второго подключения к серверу.
Настроим автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры:
В файле /etc/iscsi/iscsid.conf:
node.startup = automatic
В файле (до p9.2) /etc/iscsi/send_targets/<TargetServer>,<Port>/st_config
В файле (>=p9.2) /var/lib/iscsi/send_targets/<TargetServer>,<Port>/st_config
discovery.sendtargets.use_discoveryd = Yes
Вместо <TargetServer> подставляем IP адреса серверов.
В итоге при загрузке у нас должны подключаться два устройства (/dev/sdb, /dev/sdc).
Настройка Multipath
Сам по себе open-iscsi не умеет подключаться к нескольким IP одного target-а. При одновременном подключении мы получили два блочных устройства. Для решения этой проблемы существует multipath, который находит диски с одинаковым идентификаторами и обрабатывает их как один диск.
Установим необходимый пакет:
# apt-get install multipath-tools
Редактируем файл /etc/multipath.conf:
defaults { user_friendly_names yes }
Добавляем сервис в автозагрузку и запускаем его:
# systemctl enable multipathd # systemctl start multipathd
Multipath обработает наши iSCSI устройства, сделает из них одно, и положит его в каталог /dev/mapper.
Посмотреть обработанные multipath устройства можно командой:
# multipath -ll mpatha (360000000000000000e00000000010001) dm-0 QEMU,QEMU HARDDISK size=10G features='0' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 3:0:0:1 sdb 8:16 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 4:0:0:1 sdc 8:32 active ready running
Отключить устройство можно командой:
# multipath -f mpatha
Настройка Corosync
Для работы Cluster LVM нам необходимо настроить сервис Corosync.
Сначала изменим имена нод:
На первой ноде:
# hostnamectl set-hostname iSCSI1
На второй ноде:
# hostnamectl set-hostname iSCSI2
Далее пропишем в /etc/hosts на каждой ноде адреса нод:
10.10.10.164 iSCSI1 10.10.10.211 iSCSI2
Далее необходимо сгенерировать аутентификационный файл для коммуникации между нодами:
# corosync-keygen -l
Сгенерированный файл /etc/corosync/authkey нужно скопировать на каждую ноду.
Далее нужно на каждой ноде привести файл конфигурации /etc/corosync/corosync.conf к следующему виду:
logging {
debug: off
to_syslog: yes
}
nodelist {
node {
name: iSCSI1
nodeid: 1
quorum_votes: 1
ring0_addr: 10.10.10.164
}
node {
name: iSCSI2
nodeid: 2
quorum_votes: 1
ring0_addr: 10.10.10.211
}
}
quorum {
provider: corosync_votequorum
}
totem {
cluster_name: gfs2pve
config_version: 2
ip_version: ipv4
secauth: on
version: 2
interface {
bindnetaddr: 10.10.10.0
ringnumber: 0
}
}
Далее добавляем сервис в автозагрузку и запускаем его:
# systemctl enable corosync # systemctl start corosync
Настройка Cluster LVM
Установим необходимые пакеты:
# apt-get install clvm
Настраиваем LVM для работы в кластере на каждой ноде:
# lvmconf --enable-cluster
Добавляем сервисы в автозагрузку и запускаем их:
# systemctl enable dlm # systemctl enable lvm2-cluster-activation # systemctl start dlm # systemctl start lvm2-cluster-activation
Для корректной работы CLVM и Multipath говорим LVM не сканировать наши iSCSI-диски (sd*):
В файл /etc/lvm/lvm.conf добавляем:
devices { ... filter = [ "r|/dev/sd|" ] ... }
Инициализируем разделы для использования в LVM:
# pvcreate /dev/mapper/mpatha
Создаём группу томов 'shared_vg':
# vgcreate --clustered y shared_vg /dev/mapper/mpatha
В группе 'shared_vg' создаем Logical 'storage':
# lvcreate -n storage -l +100%Free shared_vg
Говорим CLVM, какие Volume Groups надо активировать/деактивировать при запуске/остановке:
Файл /etc/sysconfig/clvmd:
START_CLVM=yes LVM_VGS="shared_vg"
В итоге при запуске на всех нодах нам должно быть доступно устройство /dev/mapper/shared_vg-storage:
# lvscan ACTIVE '/dev/shared_vg/storage' [10,00 GiB] inherit
Настройка GFS2
Установим необходимые пакеты:
# apt-get install gfs2-utils
Отформатируем наше multipath устройство в GFS2:
# mkfs.gfs2 -p lock_dlm -t gfs2pve:mydata1 -j 2 /dev/mapper/shared_vg-storage
В данном примере файловая система использует протокол lock_dlm. Кластер имеет имя gfs2pve, имя файловой системы — mydata1. Файловая система создана на /dev/mapper/shared_vg-storage и содержит 2 журнала.
Примонтируем файловую систему gfs2:
# mount /dev/mapper/shared_vg-storage /mnt/gfs2
Добавим в /etc/fstab строчку для монтирования нашей файловой системы при загрузке системы:
/dev/mapper/shared_vg-storage /mnt/gfs2 gfs2 noatime,rw 0 0