クラウドに再現する従来型ストレージ【CLI導入・実践編】
はじめに
クラウドに再現する[1]従来型ストレージのCLI導入・実践編です。
事前にストレージ環境のセットアップが必要です。GCP、AWS、VirtualBox各記事に沿ってセットアップして下さい。
クラウド利用にあたっては料金がかかります。 未使用時にはインスタンスを停止する、不要になった際には速やかにリソースを削除することで料金を抑えられます。
CLI導入
コントローラ1,2にログイン、sudo su -
コマンドでrootユーザになります。
以下コマンドでCLI (シェルスクリプト)を取得、/usr/binに配置、alienユーザでの実行を許可2023.11.19追加
します。
cd /usr/bin ; pwd
curl --retry 3 -OL https://github.com/lightgreenface/star-storage/raw/main/starcli
chmod 755 ./starcli # 2023.11.19変更
cd ~
starcli
ll /usr/bin | grep starcli
for CMD in `starcli | awk '{ print $1 }'`
do
CMD_PATH="$(which $CMD 2>/dev/null)" || continue
ALLOW_CMD="alien ALL=NOPASSWD: $CMD_PATH"
fgrep -q "$ALLOW_CMD" /etc/sudoers \
|| { echo "$ALLOW_CMD" | EDITOR='tee -a' visudo ; }
done
for ENV in `starclienv | grep STARCLI_ | awk -F= '{ print $1 }'` # 2024.4.8変更
do
ALLOW_ENV="Defaults:alien env_keep += \"$ENV\""
fgrep -q "$ALLOW_ENV" /etc/sudoers \
|| { echo "$ALLOW_ENV" | EDITOR='tee -a' visudo ; }
done
実装されているコマンドは以下の通りです。rootユーザで実行[2]する必要があります。2023.11.19変更
[alien@star0001-ctl1 ~]$ starcli
starcli version 0.9
Available Commands:
starcli
starclienv
starlistlun
starshowlun lun_or_snap_name1[,lun_or_snap_name2 ...]
starcreatelun lun_name lun_size
stardeletelun lun_name [-nop] # Specify '-nop', does not ask yes/no.
starlisthost
starcreatehost host_name host_iqn [lun_or_snap_name1,lun_or_snap_name2 ...]
stardeletehost host_name [-nop]
starattachlun host_name lun_or_snap_name1[,lun_or_snap_name2 ...]
stardetachlun host_name lun_or_snap_name1[,lun_or_snap_name2 ...] [-nop]
starlistsnap
starcreatesnap snap_name src_lun_name snap_alloc_size
starrecreatesnap snap_name [-nop]
starextendsnap snap_name snap_alloc_size [-nop]
starrestoresnap snap_name [-nop]
stardeletesnap snap_name [-nop]
staractivatelun lun_or_snap_name1[,lun_or_snap_name2 ...]
stardeactivatelun lun_or_snap_name1[,lun_or_snap_name2 ...] [-nop]
starshowpool
stargazing # Run 'pcs status' command.
shootingstar [-nop] # Run 'pcs resource move' command.
starupdatetarget [-withclear] # Update iSCSI target according to definitions.
stargetactive # Return active controller name.
starshowconfig
starsetconfig variable1=value1[,variable2=value2 ...] [-nop]
galaxyrebootnode [-nop]
galaxyshutdownnode [-nop]
galaxyshutdownarray [-nop]
bigbang -force [-nop] # Delete all hosts and luns. DO NOT USE unless necessary.
CLI実践
[3])
新規LUN作成とサーバへのアタッチ (アクセス許可ACTIVEコントローラにログイン、sudo su - alien
コマンドでalienユーザになります。
ストレージをセットアップした初期の構成ではLUNが6つ (LUN0~LUN5) 存在します。
[alien@star0001-ctl1 ~]$ starlistlun
LUN0 20e60a12-ef77-440d-9708-123deb3d3be4 3072M
LUN1 42f2a376-dd7f-489f-80a6-f9c39b37b4be 3072M
LUN2 30380713-77c1-464e-8c1b-9c062343c408 3072M
LUN3 cd696fe0-3667-48e7-945a-99dbc3980c98 3072M
LUN4 9fc64d87-73a8-4524-ac54-dd2cad27e69f 3072M
LUN5 2356cf10-db18-4d00-8422-e6e41c9c85be 3072M
これらのLUNは2台のサーバに対してアタッチ (アクセス許可) されています。
[alien@star0001-ctl1 ~]$ starlisthost
Host_1 iqn.2023-09.com.example:host1-initiator LUN0,LUN1,LUN2,LUN3,LUN4,LUN5
Host_2 iqn.2023-09.com.example:host2-initiator LUN0,LUN1,LUN2,LUN3,LUN4,LUN5
新しく、LUN6を1,024MBで作成します[4]。
[alien@star0001-ctl1 ~]$ starcreatelun LUN6 1024M
Logical volume "LUN6" created.
lunlist 100% 336 108.8KB/s 00:00
LUN6 6dfb4039-8f3d-48c6-8b34-8d17bdbb5c11 1024M
変更・操作コマンドはACTIVEコントローラで実行
LUNの作成をSTANDBYコントローラで実行すると以下のようになります。
[root@star0001-ctl2 ~]# starcreatelun LUN6 1024M
This command must be run on active controller.
作成したLUN6が追加されています。
[alien@star0001-ctl1 ~]$ starlistlun | grep LUN6
LUN6 6dfb4039-8f3d-48c6-8b34-8d17bdbb5c11 1024M
作成したLUN6をHost_1にアタッチします。
[alien@star0001-ctl1 ~]$ starattachlun Host_1 LUN6
Updating iSCSI target configs on star0001-ctl1, takes a while.
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
saveconfig.json.active 100% 23KB 10.3MB/s 00:00
hostlist 100% 159 51.1KB/s 00:00
Updating iSCSI target configs on star0001-ctl2, takes a while.
Waiting for the device to appear. [1]
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
LUN6 atached to Host_1.
Host_1のアクセス許可にLUN6が増えました。
[alien@star0001-ctl1 ~]$ starlisthost
Host_1 iqn.2023-09.com.example:host1-initiator LUN0,LUN1,LUN2,LUN3,LUN4,LUN5,LUN6
Host_2 iqn.2023-09.com.example:host2-initiator LUN0,LUN1,LUN2,LUN3,LUN4,LUN5
Host_1のサーバでLUN6を検出します。
[root@instance-1 ~]# for ISCSI_HOST in `ls -1 /sys/class/iscsi_host`
> do
> echo '- - -' > /sys/class/scsi_host/$ISCSI_HOST/scan
> done
[root@instance-1 ~]# # 実行しても出力はありません
LUN6が検出され、マルチパスに組み込まれました。
[root@instance-1 ~]# multipath -ll
(省略)
mpathg (360014056dfb40398f3d48c68b348d17b) dm-6 LIO-ORG,STAR-LUN6
size=1.0G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 0:0:0:6 sdm 8:192 active ready running
`- 1:0:0:6 sdn 8:208 active ready running
ACTIVEコントローラ切替
クラスタ状態の確認をします。リソースが起動するstar0001-ctl1がACTIVEコントローラです。
[alien@star0001-ctl1 ~]$ stargazing
Cluster name: star0001
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: star0001-ctl1 (version 2.1.6-9.el8_9-6fdc9deea29) - partition with quorum
* Last updated: Fri Mar 29 12:42:45 2024 on star0001-ctl1
* Last change: Fri Mar 29 12:06:48 2024 by hacluster via crmd on star0001-ctl2
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ star0001-ctl1 star0001-ctl2 ]
Full List of Resources:
* Resource Group: star_group:
* STARpool (ocf::heartbeat:LVM-activate): Started star0001-ctl1
* STARorbit (lsb:STARorbit): Started star0001-ctl1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
ACTIVEコントローラを切り替えます (star0001-ctl1 → star0001-ctl2)。
[alien@star0001-ctl1 ~]$ shootingstar
Execute shootingstar? (means node failover) [y/N]:y
Location constraint to move resource 'STARpool' has been created
Waiting for the cluster to apply configuration changes...
Location constraint created to move resource 'STARpool' has been removed
Waiting for the cluster to apply configuration changes...
resource 'STARpool' is running on node 'star0001-ctl2'
star0001-ctl2でリソースが起動しており、ACTIVEコントローラが切替わったことがわかります。
[alien@star0001-ctl1 ~]$ stargazing
Cluster name: star0001
Cluster Summary:
* Stack: corosync (Pacemaker is running)
* Current DC: star0001-ctl1 (version 2.1.6-9.el8_9-6fdc9deea29) - partition with quorum
* Last updated: Fri Mar 29 12:44:13 2024 on star0001-ctl1
* Last change: Fri Mar 29 12:43:45 2024 by root via cibadmin on star0001-ctl1
* 2 nodes configured
* 2 resource instances configured
Node List:
* Online: [ star0001-ctl1 star0001-ctl2 ]
Full List of Resources:
* Resource Group: star_group:
* STARpool (ocf::heartbeat:LVM-activate): Started star0001-ctl2
* STARorbit (lsb:STARorbit): Started star0001-ctl2
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
2023.11.19追加
外部ホストからSSHによるコマンド投入 コントローラ1,2のalienユーザの~/.ssh/authorized_keys
に外部ホストの公開鍵を登録することで外部ホストからSSHによるコマンド投入が可能です。
以下はHost_1のサーバから実行したものです。
[root@instance-1 ~]# ssh -l alien star0001-ctl1 starlisthost
Host_1 iqn.2023-09.com.example:host1-initiator LUN0,LUN1,LUN2,LUN3,LUN4,LUN5,LUN6
Host_2 iqn.2023-09.com.example:host2-initiator LUN0,LUN1,LUN2,LUN3,LUN4,LUN5
ACTIVEコントローラは以下コマンドで取得できます。
[root@instance-1 ~]# ssh -l alien star0001-ctl1 stargetactive
star0001-ctl2
変更・操作コマンドをACTIVEコントローラから実行するには以下のように組み合わせます。
[root@instance-1 ~]# ssh -l alien `ssh -l alien star0001-ctl1 stargetactive` \
> starcreatelun LUN7 256M
Logical volume "LUN7" created.
LUN7 d67b7268-f037-4f83-a3e6-c20c5e326619 256M
補足
CLIの実装は非常に簡素であるため、不整合が起こる可能性があります。
例えば、STANDBYコントローラが停止した状態でACTIVEコントローラからstarattachlunコマンドを投入するとコマンドは実行され、STANDBYだけが古い不整合な状態になります。
上記ケースではSTANDBYコントローラ起動後にACTIVEコントローラの/etc/star/hostlistファイルの内容をSTANDBYコントローラに反映 (scp転送 or 手動編集) し、ACTIVE → STANDBYコントローラの順番でstarupdatetargetコマンドを実行することで不整合を解消できます (または単純にstardetachlunしてから再度starattachlunしても解消します)。
他のケースでもACTIVE / STANDBYコントローラの/etc/star/hostlistファイルと/etc/star/lunlistファイルを同じ内容になるようにし、両コントローラでstarupdatetargetコマンドを実行することで不整合を解消できる可能性があります[5]。
あとがき
ストレージ構築・操作を習得するにあたって最低限のコマンドを実装しました。
この環境で実際に動かし、ストレージの基礎・バイブスを掴んだうえで実際の製品について学ぶとより早く・深く理解できるのではないかと考えています[6]。
一連の記事と誰でも自分用に使える環境がストレージを学習する人の助けになることを願います。
-
GCPからはじまったのでこのようなタイトルになっています。 ↩︎
-
一般にストレージ製品では装置のroot相当権限は利用者には開示されませんが、CLIをシェルスクリプトで実装した都合によりroot権限での実行が必要です (シェルスクリプトにはSUIDが効かないため)。→ sudoにより非rootのalienユーザで実行可能になりました。 ↩︎ -
一般にLUNマスキングと言われます。 ↩︎
-
lunlistの転送が見えるのはSTANDBYコントローラへの反映処理によるものです。 ↩︎
-
starattachlunコマンドをはじめ変更コマンドは/etc/star配下のファイルを変更してから内部的にstarupdatetargetコマンドを呼び出しており、これと同じことをしています。 ↩︎
-
本記事のコマンドと実際の製品のコマンドの対応表などあればさらに捗るかもしれません。 ↩︎
Discussion