vSphereからの移行の為にiSCSIストレージを作成して利用してみた。
ことの背景はvSphereからの移行先としてProxmoxが選ばれた。
今ある環境vSphereClusterを1台ずつ消していき、最終的に全台Proxmoxにしようという計画
iSCSIストレージについて
訳あってストレージが用意出来ない為、
nvmeディスクを積んだサーバをmdadmでRAID化し、rawデバとしてiSCSIターゲットに利用することとする。
構成はこんな感じ
でもたぶん今回の環境だとクラスタ化したら壊れちゃう気がする。
排他制御が上手く働くかは不明。
ちゃんと検証したいがホストが足りないのでまた今度。
本当は製品としてちゃんとしてる共有ストレージ用意出来たらいいんだけどね。。
環境は以下の通り
tgtadm --mode target --op show
Target 1: iqn.2025-09.iscsi-flachesan:iscsi
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
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: 26884343 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/md1
Backing store flags:
Account information:
ACL information:
10.0.1.0/24
10.0.2.0/24
Proxmoxについて
特別な手順を踏まず普通にインストールし、ストレージと繋がるNICにIPを振っている
Proxmox側multipathの設定
物理NICは2本で、iSCSIマルチパスを利用する。
推奨設定(マニュアルに記載のあった設定)
vi /etc/iscsi/iscsid.conf
node.session.timeo.replacement_timeout = 15
node.session.timeo.replacement_timeout = 120をコメントアウトし、15を追記
デフォルトのパラメータは120だが、より短い15秒が推奨とのこと
GUIでストレージ登録
「データセンター」->「ストレージ」->「追加」->「iSCSI」を選択
ID:適当にわかりやすい名前を入力
Portal:iSCSIのIPを入力
ターゲット:LUNが自動的に認識されるので、ドロップボックスから選ぶ
今回は iqn.2025-09.iscsi-flachesan:iscsi
iscsiadm -m session
tcp: [1] 10.0.1.1:3260,1 iqn.2025-09.iscsi-flachesan:iscsi (non-flash)
tcp: [2] 10.0.2.1:3260,1 iqn.2025-09.iscsi-flachesan:iscsi (non-flash)
iscsiセッションが見えている。
iscsiadm -m session -P3
iSCSI Transport Class version 2.0-870
version 2.1.11
Target: iqn.2025-09.iscsi-flachesan:iscsi (non-flash)
Current Portal: 10.0.1.1:3260,1
Persistent Portal: 10.0.1.1:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1993-08.org.debian:01:4c97face5ba
Iface IPaddress: 10.0.1.2
Iface HWaddress: default
Iface Netdev: default
SID: 1
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
*********
Timeouts:
*********
Recovery Timeout: 15
Target Reset Timeout: 30
LUN Reset Timeout: 30
Abort Timeout: 15
*****
CHAP:
*****
username: <empty>
password: ********
username_in: <empty>
password_in: ********
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 8192
FirstBurstLength: 65536
MaxBurstLength: 262144
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 8 State: running
scsi8 Channel 00 Id 0 Lun: 0
scsi8 Channel 00 Id 0 Lun: 1
Attached scsi disk sdd State: running
Current Portal: 10.0.2.1:3260,1
Persistent Portal: 10.0.2.1:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1993-08.org.debian:01:4c97face5ba
Iface IPaddress: 10.0.2.2
Iface HWaddress: default
Iface Netdev: default
SID: 2
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED_IN
Internal iscsid Session State: NO CHANGE
*********
Timeouts:
*********
Recovery Timeout: 15
Target Reset Timeout: 30
LUN Reset Timeout: 30
Abort Timeout: 15
*****
CHAP:
*****
username: <empty>
password: ********
username_in: <empty>
password_in: ********
************************
Negotiated iSCSI params:
************************
HeaderDigest: None
DataDigest: None
MaxRecvDataSegmentLength: 262144
MaxXmitDataSegmentLength: 8192
FirstBurstLength: 65536
MaxBurstLength: 262144
ImmediateData: Yes
InitialR2T: Yes
MaxOutstandingR2T: 1
************************
Attached SCSI devices:
************************
Host Number: 9 State: running
scsi9 Channel 00 Id 0 Lun: 0
scsi9 Channel 00 Id 0 Lun: 1
Attached scsi disk sdc State: running
こんな感じで表示されるはず。
※Proxmox側でscsi diskがsdc,sddとして認識されてる
multipath-toolsの導入
デフォルトではmutilpath-toolsが入っていない為、インストール
apt install -y multipath-tools
WWWIDを追記
デバイスの識別には以下コマンドにてWWIDを確認することができる
/lib/udev/scsi_id -g -u -d /dev/sdc
360000000000000000e00000000010001
/lib/udev/scsi_id -g -u -d /dev/sdd
360000000000000000e00000000010001
同じ結果となっているので、1つのデバイスであることがわかる。
multipath -a 360000000000000000e00000000010001
wwid '360000000000000000e00000000010001' added
この時のWWWIDは/lib/udev/scsi_id -g -u -d /dev/sdXコマンドの結果であること。
multipathのリロード
multipath -r
multipath -ll
360000000000000000e00000000010001 dm-5 IET,VIRTUAL-DISK
size=24T features='0' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=1 status=active
| `- 8:0:0:1 sdd 8:48 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 9:0:0:1 sdc 8:32 active ready running
フェイルオーバ形式で表示された。
公式の例だと、ラウンドロビンで表示されたので調べてみた。
multipath -t
このコマンドで設定値が確認出来るらしい。
デフォルト設定が以下の通りだった。
defaults {
verbosity 2
polling_interval 5
max_polling_interval 20
reassign_maps "no"
path_selector "service-time 0"
path_grouping_policy "failover"
uid_attribute "ID_SERIAL"
prio "const"
prio_args ""
features "0"
path_checker "tur"
alias_prefix "mpath"
failback "manual"
rr_min_io 1000
rr_min_io_rq 1
max_fds "max"
rr_weight "uniform"
queue_without_daemon "no"
allow_usb_devices "no"
flush_on_last_del "unused"
user_friendly_names "no"
fast_io_fail_tmo 5
log_checker_err "always"
all_tg_pt "no"
retain_attached_hw_handler "yes"
detect_prio "yes"
detect_checker "yes"
detect_pgpolicy "yes"
detect_pgpolicy_use_tpg "no"
force_sync "no"
strict_timing "no"
deferred_remove "no"
delay_watch_checks "no"
delay_wait_checks "no"
san_path_err_threshold "no"
san_path_err_forget_rate "no"
san_path_err_recovery_time "no"
marginal_path_err_sample_time "no"
marginal_path_err_rate_threshold "no"
marginal_path_err_recheck_gap_time "no"
marginal_path_double_failed_time "no"
find_multipaths "strict"
uxsock_timeout 4000
retrigger_tries 3
retrigger_delay 10
missing_uev_wait_timeout 30
skip_kpartx "no"
remove_retries 0
ghost_delay "no"
auto_resize "never"
find_multipaths_timeout -10
enable_foreign "NONE"
marginal_pathgroups "off"
recheck_wwid "no"
}
どうやらデフォルトはfailoverのようです。
※マニュアル見た感じメーカーから出ている共有ストレージを使っている場合は適切なデフォルトが読み込まれてるかも?あんまりいじらない方が良さげ?
今回は無理やりiSCSI動かしているので、変更してみる。
というわけでconfigをchatgptに作ってもらった
defaults {
user_friendly_names yes
path_selector "round-robin 0"
path_grouping_policy multibus
rr_min_io 100
rr_weight priorities
failback immediate
no_path_retry 300
}
multipaths {
multipath {
wwid "360000000000000000e00000000010001"
alias proxmox-san
}
}
devices {
device {
vendor "*"
product "*"
path_checker tur
features "1 queue_if_no_path"
hardware_handler "0"
failback immediate
rr_weight priorities
no_path_retry 300
path_selector "round-robin 0"
}
}
パッと見たところ問題無さそうなので、これで設定
vi /etc/multipath.conf
↑のやつを入力それぞれWWIDは変えてね。
再読み込み後、確認。
multipath -r
multipath -ll
proxmox-san (360000000000000000e00000000010001) dm-5 IET,VIRTUAL-DISK
size=24T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
|- 8:0:0:1 sdd 8:48 active ready running
`- 9:0:0:1 sdc 8:32 active ready running
ラウンドロビンになっている。やったぜ。
LVMでストレージを作成
この後VMデータが配置出来る様にGUIでLUN上にLVMを作成していきます。
「データセンター」->「ストレージ」->「追加」
この時共有済みにチェックを入れている(将来的にクラスタ化を検討する為)
ただ排他制御が上手く働いてくれるかはしっかり検証してみないと怪しい。
こんな感じでLVMストレージを作成
このVMを作成するときにこのストレージを選択することでVMを作成することが出来る。
残念な点
snapshotが取れない。やっぱりCephが一番いいと思います。IO遅いけど。
参考情報
先人が共有ストレージとしての利用を検証してくれていた。
-
Proxmox × iSCSI (+ LVM) で共有ストレージを作り、VMマイグレーションしてみた
LVM-thinやZFSではトラブったと記載が有るため、基本的には1ホストからのみのIOという運用がいいかも。 -
マニュアル
基本ここに書いてあることをやってみただけ。
最後に
クラスタ化を考えるとこれを全台作成するのは面倒(かもしれない)
一時利用としてのiSCSIターゲットなので、早くちゃんとした共有ストレージ使いたいな。