GFS2 на iSCSI с Multipath: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 8 промежуточных версий 3 участников)
Строка 1: Строка 1:
{{Stub}}
{{Stub}}
GFS2 - кластерная файловая система обеспечивающая одновременный доступ к общим хранилищам в кластере.  GFS2 позволяет всем узлам иметь прямой одновременный доступ к одному общему хранилищу.
GFS2 кластерная файловая система обеспечивающая одновременный доступ к общим хранилищам в кластере.  GFS2 позволяет всем узлам иметь прямой одновременный доступ к одному общему хранилищу.
== Введение ==
== Введение ==
В данной статье рассмотрим развертывание GFS2 на устройстве, подключенном по интерфейсу iSCSI c использованием двух сетевых подключений.<br>
В данной статье рассмотрим развертывание GFS2 на устройстве, подключенном по интерфейсу iSCSI c использованием двух сетевых подключений.


Тестовый стенд:<br>
Тестовый стенд:
1. Server-iSCSI (ip: 10.10.10.202; ip: 192.168.155.100) - сервер предоставляющий блочное устройство через iSCSI<br>
* Server-iSCSI (ip: 10.10.10.202; ip: 192.168.155.100) сервер предоставляющий блочное устройство через iSCSI;
2. iSCSI1 (ip: 10.10.10.164; ip: 192.168.155.111) - Первая нода кластера<br>
* iSCSI1 (ip: 10.10.10.164; ip: 192.168.155.111) — первая нода кластера;
3. iSCSI2 (ip: 10.10.10.211; ip: 192.168.155.112) - Вторая нода кластера<br>
* 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''' - сервер предоставляющий блочное устройство (если необходимо, как правило этот сервис предоставляется оборудованием).<br>
'''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-ов.<br>
В файле {{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}} - это IQN (iSCSI qualified name) имя длиной до 255 символов в следующем формате:<br>
{{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.ua.alt:01:9daa1def62d3 alias: iSCSI3
             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-target'''.
 
'''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 хранилище к нашему кластеру:<br>
Присоединим iSCSI хранилище к нашему кластеру:
Для этого выполним команды:<br>
 
Посмотреть доступные для подключения target-ы можно с помощью команды:<br>
Для этого выполним команды:
 
Посмотреть доступные для подключения 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>
То же самое нужно выполнить для второго подключения к серверу.<br>
То же самое нужно выполнить для второго подключения к серверу.
Настроим автоматическое подключение iSCSI-target-ов. Для этого необходимо поменять следующие параметры:<br>
 
Настроим автоматическое подключение 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 адреса серверов.<br>
 
Вместо <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}}<br>
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. <br>
Для работы Cluster LVM нам необходимо настроить сервис Corosync.
Сначала изменим имена нод:<br>
 
Сначала изменим имена нод:
 
На первой ноде:
На первой ноде:
<pre># hostnamectl set-hostname iSCSI1</pre>
<pre># hostnamectl set-hostname iSCSI1</pre>
Строка 124: Строка 141:
<pre># hostnamectl set-hostname iSCSI2</pre>
<pre># hostnamectl set-hostname iSCSI2</pre>
Далее пропишем в {{path|/etc/hosts}} на каждой ноде адреса нод:
Далее пропишем в {{path|/etc/hosts}} на каждой ноде адреса нод:
<pre>10.10.10.211    iSCSI1
<pre>10.10.10.164    iSCSI1
10.10.10.164   iSCSI2</pre>
10.10.10.211    iSCSI2</pre>
Далее необходимо сгенерировать аутентификационный файл для коммуникации между нодами:
<pre># corosync-keygen -l</pre>
Сгенерированный файл {{path|/etc/corosync/authkey}} нужно скопировать на каждую ноду.
 
Далее нужно на каждой ноде привести файл конфигурации {{path|/etc/corosync/corosync.conf}} к следующему виду:
<source lang="ruby">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
  }
 
}</source>
Далее добавляем сервис в автозагрузку и запускаем его:
<pre># systemctl enable corosync
# systemctl start corosync</pre>


== Настройка Cluster LVM ==
== Настройка Cluster LVM ==
Строка 131: Строка 194:
<pre># apt-get install clvm</pre>
<pre># apt-get install clvm</pre>
Настраиваем LVM для работы в кластере на каждой ноде:
Настраиваем LVM для работы в кластере на каждой ноде:
<pre># lvmconf --enable-cluster
<pre># lvmconf --enable-cluster</pre>
# systemctl enable dlm
Добавляем сервисы в автозагрузку и запускаем их:
<pre># systemctl enable dlm
# systemctl enable lvm2-cluster-activation
# systemctl enable lvm2-cluster-activation
# systemctl start dlm
# systemctl start dlm
# systemctl start lvm2-cluster-activation</pre>
# systemctl start lvm2-cluster-activation</pre>
Для корректной работы CLVM и Multipath говорим LVM не сканировать наши iSCSI-диски (sd*):<br>
Для корректной работы CLVM и Multipath говорим LVM не сканировать наши iSCSI-диски (sd*):
 
В файл {{path|/etc/lvm/lvm.conf}} добавляем:
В файл {{path|/etc/lvm/lvm.conf}} добавляем:
<pre>devices {
<pre>devices {
Строка 149: Строка 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 надо активировать/деактивировать при запуске/остановке:<br>
Говорим CLVM, какие Volume Groups надо активировать/деактивировать при запуске/остановке:
 
Файл {{path|/etc/sysconfig/clvmd}}:
Файл {{path|/etc/sysconfig/clvmd}}:
<pre>START_CLVM=yes
<pre>START_CLVM=yes
Строка 162: Строка 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 журнала.<br>
В данном примере файловая система использует протокол 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

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

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