
iscsi+ocfs2 на CentOS 6.5
Это статья — копипаст мануала. И не более того. Здесь не будет каких-либо рассуждений о тюнинге и красоте конфигурации. Здесь будет показана простая и быстрая настройка iscsi + ocfs2 и не более того.
Возникла необходимость — подготовить хранилище для архивных таблиц базы, доступное с обоих серверов баз данных. Решил для начала собрать на тестовом стенде. Вот что из этого получилось.
Имеется два сервера на centos 6.5. Задача: на первом сервере поднять iscsi target и подключить к нему же через iscsi initiator. Второй же сервер нужно просто подключить iscsi initiator.
Сервера:
sam@centos2:~$ cat /etc/redhat-release CentOS release 6.5 (Final)
с ядром:
linuz-2.6.32-358.el6.i686
Устанавливаем необходимый софт:
sudo yum -y install scsi-target-utils iscsi-initiator-utils
Подготавливаем хранилище:
sudo pvcreate /dev/vdb1 sudo vgcreate -s 32M vg_target00 /dev/vdb1 sudo lvcreate -n lv_target00 vg_target00 sudo lvcreate -L 5G -n lv_target00 vg_target00 sudo lvcreate -L 5000M -n lv_target00 vg_target00
Настраиваем таргет:
sam@centos1:~$ sudo grep -v "#" /etc/tgt/targets.conf default-driver iscsi <target iqn.2014-06.centos1:target1> backing-store /dev/vg_target00/lv_target00 initiator-address 192.168.1.0/24 </target>
Имя таргета имеет строгий формат, рекомендуется его соблюдать: iqn.year-month.hostname:name-target.
Включаем сервис в автозапуск и стартуем его:
sudo chkconfig tgtd on sudo /etc/init.d/tgtd restart
Смотрим состояние:
sam@centos1:~$ sudo tgt-admin --show Target 1: iqn.2014-06.centos1:target1 System information: Driver: iscsi State: ready 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 Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 5268 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/vg_target00/lv_target00 Backing store flags: Account information: ACL information: 192.168.1.0/24
Переходим к инициатору. Ставим утилиты, дополнительной настройки не требуется. Нужно только дать имена инициаторам (имеет такой же формат):
sam@centos1:~$ cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.1994-05.centos1:648a11486a2 InitiatorAlias=initiator01
Не стал что-то придумывать, просто поменял hostname, остальное оставил как есть.
Снова добавим в автозапуск:
sudo chkconfig iscsid on
Теперь ищем таргет:
sam@centos1:~$ sudo iscsiadm --mode discovery -t sendtargets --portal 192.168.1.4 192.168.1.4:3260,1 iqn.2014-06.centos1:target1
И подключаем:
sudo iscsiadm --mode node --targetname iqn.2014-06.centos1:target1 --portal 192.168.1.4 --login
Смотрим, что получилось:
sam@centos1:~$ sudo tgt-admin --show Target 1: iqn.2014-06.centos1:target1 System information: Driver: iscsi State: ready I_T nexus information: I_T nexus: 2 Initiator: iqn.1994-05.centos1:648a11486a2 Connection: 0 IP Address: 192.168.1.4 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 Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 5268 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/vg_target00/lv_target00 Backing store flags: Account information: ACL information: 192.168.1.0/24
Повторяем действия по инициатору на втором сервере. Настроить инициатор не сложно, как вы заметили. После подключения второго инициатора, смотрим статус таргета:
sam@centos1:~$ sudo tgt-admin --show Target 1: iqn.2014-06.centos1:target1 System information: Driver: iscsi State: ready I_T nexus information: I_T nexus: 2 Initiator: iqn.1994-05.centos1:648a11486a2 Connection: 0 IP Address: 192.168.1.4 I_T nexus: 4 Initiator: iqn.1994-05.com.centos2:648a11486a2 Connection: 0 IP Address: 192.168.1.5 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 Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 5268 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /dev/vg_target00/lv_target00 Backing store flags: Account information: ACL information: 192.168.1.0/24
Отлично, оба сервера подключены, теперь займемся ocfs2.
К сожалению, данное ядро не поддерживает ocfs2. Попытки поставить отдельно модули и софт закончилась безуспешно, ибо тянут за собой некоторые зависимости, поэтому я решил вспомнить молодость и собрать новое ядро =)
Ставим необходимый для сборки софт:
sudo yum install gcc ncurses ncurses-devel
Качаем исходники и распаковываем:
cd /usr/src wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.5.tar.bz2 sudo tar xfvj linux-3.5.tar.bz2 cd linux-3.5/
Вызываем меню конфигурации:
sudo make menuconfig
В меню обязательно указываем необходимые модули для работы ocfs2 и собираем:
sudo make
Ставим:
sudo make modules_install install
Правим загрузчик:
sudo nano /etc/grub.conf
Выставляем значение default=0.
Ребутаем:
sudo reboot
Смотрим, что получилось:
sam@centos2:~$ uname -a Linux centos2 3.5.0 #1 SMP Thu Jun 19 17:46:48 YEKT 2014 i686 i686 i386 GNU/Linux
Теперь ставим пакеты:
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/awk2007:/free/CentOS_CentOS-6/i686/ocfs2-tools-1.6.4-2.2.i686.rpm sam@centos1:~$ sudo rpm -ivh ocfs2-tools-1.6.4-2.2.i686.rpm предупреждение: ocfs2-tools-1.6.4-2.2.i686.rpm: Заголовок V3 DSA/SHA1 Signature, key ID 872e7574: NOKEY ошибка: Неудовлетворенные зависимости: at нужен для ocfs2-tools-1.6.4-2.2.i686 gettext нужен для ocfs2-tools-1.6.4-2.2.i686 mailx нужен для ocfs2-tools-1.6.4-2.2.i686 time нужен для ocfs2-tools-1.6.4-2.2.i686
Ага, опять что-то не устраивает, нужно избавиться от зависимостей:
sudo yum install at time gettext mailx
Теперь ставим пакеты:
sudo rpm -ivh ocfs2-tools-1.6.4-2.2.i686.rpm
И идем править конфигурации:
sudo nano /etc/sysconfig/o2cb
выставляем O2CB_ENABLED=true.
Создаем папку для конфигурации:
sudo mkdir /etc/ocfs2
и вносим следующий конфиг:
sam@centos1:~$ cat /etc/ocfs2/cluster.conf node: ip_port = 7000 ip_address = 192.168.1.4 number = 1 name = centos1 cluster = ocfs2 node: ip_port = 7000 ip_address = 192.168.1.5 number = 2 name = centos2 cluster = ocfs2 cluster: node_count = 2 name = ocfs2
По опыту знаю, что ocfs2 «иногда придирается к порядку конфигурации, поэтому я всегда использую только такой». Стартуем:
sam@centos1:~$ sudo /etc/init.d/o2cb start /etc/init.d/o2cb: line 22: /lib/lsb/init-functions: No such file or directory
Опять 25! Не хватает одного пакета, сейчас исправим:
sam@centos1:~$ sudo yum install redhat-lsb.i686
Теперь старт пройдет нормально:
sudo /etc/init.d/o2cb start
Отлично. Эти операции выше нужно проделать на обоих серверах.
Далее готовим саму файловую систему. Это делаем на любом одном сервере.
sudo parted -s /dev/sda mklabel msdos sudo parted -s -- /dev/sda mkpart primary 0 -1
Тюнить не буду, укажу стандартные для меня значения:
sudo mkfs.ocfs2 -b 4k -C 32k -N4 -L cluster-storage /dev/sda1
Далее выполняем снова на обоих серверах:
sudo blockdev --rereadpt /dev/sda sudo mkdir /mnt/arch-ocfs2 sudo mount -L cluster-storage /mnt/arch-ocfs2
Смотрим статус:
sam@centos1:~$ sudo /etc/init.d/o2cb status Driver for "configfs": Loaded Filesystem "configfs": Mounted Stack glue driver: Loaded Stack plugin "o2cb": Loaded Driver for "ocfs2_dlmfs": Loaded Filesystem "ocfs2_dlmfs": Mounted Checking O2CB cluster ocfs2: Online Heartbeat dead threshold = 31 Network idle timeout: 30000 Network keepalive delay: 2000 Network reconnect delay: 2000 Checking O2CB heartbeat: Active
sam@centos1:~$ mount | grep ocfs ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw) /dev/sda1 on /mnt/arch-ocfs2 type ocfs2 (rw,_netdev,heartbeat=local)
Отлично! Все замонтировалось. Тестовый стенд успешно собран, далее — работа с базой, когда-нибудь это я размещу здесь.
PS. Картинка к статье отношения не имеет =)