blog/content/posts/2016/2016-07-02-how-to-use-coros...

358 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
author = "kazu634"
description = "Pacemaker + Corosyncを用いてクラスタ環境を構築してみました。RHEL 6.4で検証しました。今回は共有ディスクを利用できるようにします"
tags = ["clustering", "pacemaker", "corosync"]
categories = ["Labs", "Linux"]
date = "2016-07-02T23:48:32+08:00"
draft = false
title = "Pacemaker + Corosyncを用いてクラスタ環境の構築 - iSCSIサーバを利用した共有ディスクの作成"
+++
お仕事でLinux環境でHAクラスタを検証する必要が出てきたので、手順を調べてみました。
## 環境
RHEL 6.4環境で検証しております:
```
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
```
当然ながらCentOS6でも動作するかと思います。RHEL 7 or CentOS7ではOSの仕組みが変わっていると思いますので、ここでまとめた手順の通りにしてもおそらく動作しません。
ホスト名一覧などは以下のとおりです:
| # | Hostname | IP Address | Remarks |
|:-:|:--------:|:----------:|:-------:|
| 1 | rhel-act | 192.168.56.31 | Active server |
| 2 | rhel-sta | 192.168.56.32 | Standby server |
| 3 | rhel-logical | 192.168.56.30 | Logical hostname / floating IP |
| 4 | rhel-iscsi | 192.168.56.40 | iScsi server |
簡単なネットワーク図はこちら:
<a data-flickr-embed="true" href="https://www.flickr.com/photos/42332031@N02/27578460773/in/dateposted/" title="network diagram"><img src="https://c6.staticflickr.com/8/7307/27578460773_d917becbf9.jpg" width="500" height="281" alt="network diagram"></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
## iSCSIとは
[LAN接続のストレージiSCSIとは](https://www.newtech.co.jp/topics/column/ip_san/i1/index.html)によると、以下とのことです:
> iSCSIは、SCSIコマンド、データの転送をIPに変換して通信する方式で、イーサネットのインフラが使用できるため、安価にストレージネットワークを構築でき、FC-SANのような専門知識が必要な管理者が不要です。また、距離の制限がなくなるため、よりグローバルなシステム構築が可能です。
仕組みとしてはiSCSIターゲット(共有ディスク)というものに対して、iSCSIイニシエーターが接続することで、共有ディスクを利用することができるようになります。
## 今回の作業内容
今回は`rhel-iscsi`サーバに対して、iSCSIターゲットを導入、セットアップします。
その後、`rhel-act`サーバ、`rhel-sta`サーバにiSCSIイニシエーターを導入、iSCSIターゲットに接続し、共有ディスクとして利用できることを確認します。
## iSCSIのインストール
ここでは`rhel-act`およびに`rhel-sta`からの接続を許可するiSCSIターゲットを`rhel-iscsi`上に作成します。ターゲット名は`iqn.2016-06.local.test.has:sdb`、LUNに`/dev/sdb`を割り当てます。
コマンド or 設定ファイルは設定を永続化するか、しないかによって、どちらを利用するか決めてください。
### iSCSI Targetのインストール
以下のコマンドを実行し、iSCSI Targetをインストールします:
```
# yum install -y scsi-target-utils
```
### セットアップ方法
セットアップ方法を説明します。
#### 自動起動の設定
OS起動時に自動起動するよう設定します:
```
# chkconfig --list > 003_before.txt
# chkconfig tgtd on
# chkconfig --list > 003_after.txt
# diff -u 003_before.txt 003_after.txt
--- 003_before.txt 2016-06-26 14:52:28.420010884 +0800
+++ 003_after.txt 2016-06-26 14:52:39.794971288 +0800
@@ -20,5 +20,5 @@
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
svnserve 0:off 1:off 2:off 3:off 4:off 5:off 6:off
-tgtd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
+tgtd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
```
### iSCSIターゲットの作成 (コマンドによる一時的な指定)
コマンドによる一時的な指定方法を説明します。この方法を利用した場合、OS起動時に設定がリセットされます:
#### iSCSIターゲットの作成
以下のコマンドを実行し、iSCSIターゲットを作成します:
```
# tgtadm --lld iscsi --op new --mode target --tid 1 --targetname \
iqn.2016-06.local.test.has:sdb
```
#### デバイスの割当
以下のコマンドを実行し、LUN1に対してデバイスを割り当てます:
```
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 \
--backing-store /dev/sdb
```
#### 接続を許可するイニシエーターの設定
以下のコマンドを実行し、接続を許可するイニシエーターを指定します。ここでは`rhel-act`, `rhel-sta`に対する接続を許可します:
```
# tgtadm --lld iscsi --op bind --mode target --tid 1 \
--initiator-address 192.168.59.31
# tgtadm --lld iscsi --op bind --mode target --tid 1 \
--initiator-address 192.168.59.32
```
### iSCSIターゲットの作成 (設定ファイルによる永続的な指定)
設定ファイルを用いたセットアップ方法を以下に示します:
#### 設定ファイルの編集
以下のようにして、`/etc/tgt/config/*.conf`を設定ファイルとして参照するようにします:
```
# cd /etc/tgt/
# cp -p targets.conf targets.conf.${YYYYMMDD}
# vi targets.conf
# diff -u targets.conf.${YYYYMMDD} targets.conf
--- targets.conf.20160626 2016-01-20 01:57:37.000000000 +0800
+++ targets.conf 2016-06-26 18:29:04.971000264 +0800
@@ -6,7 +6,7 @@
# This one includes other config files:
-#include /etc/tgt/temp/*.conf
+include /etc/tgt/config/*.conf
# Set the driver. If not specified, defaults to "iscsi".
```
#### iSCSIターゲットの作成
以下のコマンドを実行し、iSCSIターゲットを作成します:
```
# mkdir config
# cd config
# vi shared.conf
# cat shared.conf
<target iqn.2016-06.local.test.has:sdb>
backing-store /dev/sdb
initiator-address 192.168.59.31
initiator-address 192.168.59.32
write-cache off
#incominguser iscsiuser iscsi_usr_pass
#outgoinguser iscsiserver iscsi_srv_pass
</target>
```
`tgtd`サービスを再起動し、設定を反映させます:
```
# service tgtd restart
Stopping SCSI target daemon: [ OK ]
Starting SCSI target daemon: [ OK ]
```
### iSCSIターゲットの設定確認
以下のコマンドを実行し、iSCSIターゲットの設定を確認することができます:
```
# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2016-06.local.test.has:sdb
System information:
Driver: iscsi
State: ready
I_T nexus information:
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: 8590 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
Backing store type: rdwr
Backing store path: /dev/sdb
Backing store flags:
Account information:
ACL information:
192.168.59.31
192.168.59.32
```
### iSCSIイニシエーターのインストール
`rhel-act`, `rhel-sta`サーバ上でiSCSIイニシエーターをインストールし、iSCSIターゲットに接続できるようにします。
```
# yum install -y iscsi-initiator-utils
```
#### セットアップ方法
セットアップ方法を説明します。
後ほど`Corosync`+`Pacemaker`を導入し、そこからイニシエーターを起動するため、OS起動時の自動起動を抑制します。
```
# cd /etc/iscsi/
# cp -p iscsid.conf iscsid.conf.${YYYYMMDD}
# vi iscsid.conf
# diff -u iscsid.conf.${YYYYMMDD} iscsid.conf
--- iscsid.conf.20160626 2016-05-11 07:46:56.000000000 +0800
+++ iscsid.conf 2016-06-26 13:44:40.202000111 +0800
@@ -40,7 +40,7 @@
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is automatic.
-node.startup = automatic
+node.startup = manual
# For "automatic" startup nodes, setting this to "Yes" will try logins on each
# available iface until one succeeds, and then stop. The default "No" will try
```
### iSCSIターゲットへの接続テスト
セットアップが完了したため、`rhel-act`サーバから`rhel-iscsi`サーバ上のiSCSIターゲットに接続し、共有ディスクとして利用できることを確認します。
#### iSCSIターゲットへの接続
以下のコマンドを実行し、iSCSIターゲットを探索します:
```
# iscsiadm --mode=discovery --type=sendtargets --portal=192.168.59.40 192.168.59.40:3260,1 iqn.2016-06.local.test.has:sdb
```
探索結果の確認は以下のコマンドを実行します:
```
# iscsiadm -m node
192.168.59.40:3260,1 iqn.2016-06.local.test.has:sdb
```
以下のコマンドを実行し、探索したiSCSIターゲットにログインし、デバイスとして利用できるようにします:
```
# iscsiadm -m node --targetname iqn.2016-06.local.test.has:sdb --portal 192.168.59.40:3260 --login
Logging in to [iface: default, target: iqn.2016-06.local.test.has:sdb, portal: 192.168.59.40,3260] (multiple)
Login to [iface: default, target: iqn.2016-06.local.test.has:sdb, portal: 192.168.59.40,3260] successful.
```
これにより、`/dev/sd*`としてiSCSIターゲットが認識されているはずです。私の環境では、`/dev/sdb`として認識されました。
以降では`/dev/sdb`として認識された共有ディスクをセットアップします…といっても、単純にフォーマットし、共有ディスクのマウントポイント`/share`にマウントするだけですが…
#### 共有ディスクの初回セットアップ
`/dev/sdb`として認識された共有ディスクをフォーマットし、共有ディスクのマウントポイント`/share`にマウントします。
```
# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x8e1d9842.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-8192, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-8192, default 8192):
Using default value 8192
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2097148 blocks
104857 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
```
共有ディスクのマウントテスト:
```
# mkdir /share
# mount /dev/sdb1 /share
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_rheldev-lv_root
6.0G 1.3G 4.4G 23% /
tmpfs 372M 43M 329M 12% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
/dev/sdb1 7.9G 146M 7.4G 2% /share
```
#### iSCSIターゲットの接続解除
以下のようにしてiSCSIターゲットへの接続を解除します。
まずはアンマウント:
```
# umount /share
```
そして、iSCSIターゲットからログアウトしてあげます:
```
# iscsiadm -m node --targetname iqn.2016-06.local.test.has:sdb --portal 192.168.59.40:3260 --logout
Logging out of session [sid: 1, target: iqn.2016-06.local.test.has:sdb, portal: 192.168.59.40,3260]
Logout of [sid: 1, target: iqn.2016-06.local.test.has:sdb, portal: 192.168.59.40,3260] successful.
```
## 参考リンク
- [DiskStation Manager - ナレッジベース | Synology Inc.](https://www.synology.com/ja-jp/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_and_use_iSCSI_target_on_Linux)
- [CentOS6でのiSCSI環境構築target+initiator - OSSでLinuxサーバ構築](http://www.oss-d.net/iscsi/1.0)
- [CentOS 6 - iSCSIターゲットの設定 Server World](http://www.server-world.info/query?os=CentOS_6&p=iscsi)