Acropolis Block Services (ABS) とは、Nutanix DSF(分散ストレージファブリック) の vDisk を、Volume Group (VG) として提供する機能です。
分散Volume の提供方法は 2パターンあります。
- Nutanix 上の VM に直接接続する。
- VG が iSCSI Target になる。
今回は、主に iSCSI Target になる 方についての話です。
Nutanix Bible の ABS
ABS については、このあたりに記載されています。
http://nutanixbible.com/#anchor-block-services-76
日本語版の説明は、このあたりです。2016年09月ごろの時点では Volumes API という項目に記載されていますが、内容は ABS についてです。
http://nutanixbible.jp/#anchor-volumes-api-69
ABS の構成要素
ABS は下記の構成要素をもちます。
Data Services IP
- Nutanix クラスタ単位で設定できる VIP。
- iSCSI Initiator からのログインで使用される。
- AOS 4.7 ~
Volume Group (VG)
- iSCSI target と Volume (DSF vDisk)のグループ。
- 集中管理(Prism で ということ?)
- クローン(スナップショット)は VG 単位で実行できる。
Disk(s)
- Nutanix DSF 上の vDisk。
- VG に含まれる vDisk ごとに、iSCSI Target が作成される。
- iSCSI 接続すると、LUN に見える。
Attachment
- VM または iSCSI Initiator IQN を指定して接続許可を設定できる。
絵で描くと、このような感じです。
iSCSI Target として接続する場合は、Nutanix 環境外のサーバ(iSCSI Initiator)からでも接続可能です。その際は、Nutanix クラスタ単位で設定する、「Data Services IP」アドレスに接続すします。
iSCSI 概要と、ABS の iSCSI
iSCSI でのストレージ接続は、ストレージ装置側が iSCSI Target で、接続する側は iSCSI Initiator で接続します。iSCSI Initiator は、IQN というアドレス(iqn.~)をもち、iSCSI Target 側では、接続を許可する Initiator の IQN を登録します。
一般的な iSCSI ストレージでは、Target ごとに複数の LUN(ディスク)を提供することができますが、ABS では LUN ごとに Target が作成されます。
たとえば、Oracle Linux 7 (Red Hat や CentOS も同じ)では、iSCSI Initiator の RPM(iscsi-initiator-utils)をインストールすると、IQN が自動生成されます。
[root@ora-rac-01 ~]# cat /etc/oracle-release Oracle Linux Server release 7.2 [root@ora-rac-01 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.1988-12.com.oracle:c3faf81f5064
Nutanix Prism から見た ABS
ABS は Prism (Nutanix の Web UI)から利用できます。
iSCSI Target への接続で指定する Data Services IP は、Nutanix Cluster の VIP とは別に設定します。
Prism の「Storage」→「Table」→「Volume Group」画面で、ABS の VG を見ることができます。VG を選択すると、VG に含まれる vDisk も見ることができます。例では「vg-rac-data」という VG に 10GB の vDisk が含まれていることが分かります。
接続対象の指定は VG 単位で、iSCSI Target にするか、VM に直接接続(Attach to a VM)するか設定できます。例では IQN を 2つ登録することで、2台のサーバから VG に iSCSI 接続可能にしています。複数の IQN を登録する場合は、「Share across multiple iSCSI Initiator or multiple VMs」のチェックを ON にします。
CVM のコマンドラインから見た ABS
Nutanix の CVM にログインして、ncli コマンドから ABS を見てみます。
まず、ncli volume-group get コマンドで、VG「vg-rac-data」を見てみると、この VG には UUID=~9b66 の vDisk が含まれることが分かります。
上記の体裁を整えてみました。これは、Prism からみた VG と同じものです。10GB の vDisk をもち、IQN が 2つ登録されています。
iSCSI Target
- vg-rac-data-b26cea52-9902-4e9c-9583-a3f4a1f53be3
Disks
- VM Disk Size=10 GiB
- VM Disk UUID=f938867c-98b1-46d7-8f71-75b6e8049b66
Shared
- true
Attachment List
- iSCSI Initiator=iqn.1988-12.com.oracle:c3faf81f5064
- iSCSI Initiator=iqn.1988-12.com.oracle:2c55924aed52
virtual-disk list コマンドで vDisk の一覧を見ると、UUID=~9b66 をもつ vDisk ファイルの格納されているパスがわかります。
CVM の nfs_ls で、vDisk の格納されているパスを見てみると、実際に 10GB のファイルが存在しています。ABS で Volume として提供する vDisk は、Nutanix で VM に割り当てる vDisk と同じように Nutanix DSF に配置されている vDisk です。
Linux iSCSI Initiator から ABS に接続した様子
Oracle Linux の iSCSI Initiator から、ABS の VG に接続してみました。
今回の環境概要です。Linux からは、Data Service IP アドレスを指定して接続(iscsiadm コマンドでログイン)します。
iscsiadm コマンドで、Data Service IP を指定して接続しました。
接続後の Linux でパスベースの /dev/disk/by-path/~ デバイスを確認すると、ちゃんと Data Service IP をもとにしたデバイス名になっています。
iscsiadm コマンドでセッション情報を見てみると、Data Service IP アドレスではなく、実際は CVM の IP アドレスに接続していることがわかります。また、TCP 3260 番ポートではなく、3205番ポートで接続していました。
lsof コマンドを実行してみると、iscsid が 3205 番ポートで接続しています。
CVM 側で lsof コマンドを実行してみると、stargate という Nutanix 独自のコンポーネントが TCP/3205 をリスニングしていることがわかります。
今回は 3-Node の Nutanix Cluster です。黒枠ごとに別ノードなのですが、クライアントから Target ごと(= vDisk ごと)に分散して接続されていることがわかります。3 Node とも 3205 番ポートをリスニングしています。1つの Initiator (サーバ)から 1つの Target に対して複数パスのセッションをはるのではなく、Target ごとに接続先 CVM を別にする、という分散をしています。
Linux から ABS VG への接続(2パターンそれぞれ)
以前、VM への直接接続と、iSCSI Target 接続とを両方ためしてみた投稿です。
おまけ: CVM 障害時の様子
たまたま iSCSI で ABS に接続しているときに CVM が落ちたので、様子を見てみました。
- iSCSI Initiator は、しばらく External Data Service IP に接続したあと、別の CVM に接続している様子。
- Oracle RAC 共有ディスクで VG を使用していても、インスタンスは落ちなかった。ただし無負荷・・・
障害発生前は、CVM に接続さえていて・・・
障害発生すると、External Data Service IP Address(Data Service IP)にしばらく接続。一瞬というわけではなく、しばらくは(厳密ではないが1分くらいは経過していたような)そのまま。
しばらく待つと、別の CVM に接続される。
以上、Meetup#14 の話の一部でした。