読者です 読者をやめる 読者になる 読者になる

NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix CE の Acropolis Block Services (ABS) の様子。

Acropolis Block Services (ABS) とは、Nutanix DSF(分散ストレージファブリック) の vDisk を、Volume Group (VG) として提供する機能です。

分散Volume の提供方法は 2パターンあります。

  1. Nutanix 上の VM に直接接続する。
  2. 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」アドレスに接続すします。

f:id:gowatana:20161004212606p:plain

iSCSI 概要と、ABS の iSCSI

iSCSI でのストレージ接続は、ストレージ装置側が iSCSI Target で、接続する側は iSCSI Initiator で接続します。iSCSI Initiator は、IQN というアドレス(iqn.~)をもち、iSCSI Target 側では、接続を許可する Initiator の IQN を登録します。

一般的な iSCSI ストレージでは、Target ごとに複数の LUN(ディスク)を提供することができますが、ABS では LUN ごとに Target が作成されます。

f:id:gowatana:20161004212933p:plain

たとえば、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 とは別に設定します。

f:id:gowatana:20161004214249p:plain

Prism の「Storage」→「Table」→「Volume Group」画面で、ABS の VG を見ることができます。VG を選択すると、VG に含まれる vDisk も見ることができます。例では「vg-rac-data」という VG に 10GB の vDisk が含まれていることが分かります。

f:id:gowatana:20161004214357p:plain

接続対象の指定は VG 単位で、iSCSI Target にするか、VM に直接接続(Attach to a VM)するか設定できます。例では IQN を 2つ登録することで、2台のサーバから VG に iSCSI 接続可能にしています。複数の IQN を登録する場合は、「Share across multiple iSCSI Initiator or multiple VMs」のチェックを ON にします。

f:id:gowatana:20161004214730p:plain

CVM のコマンドラインから見た ABS

Nutanix の CVM にログインして、ncli コマンドから ABS を見てみます。

まず、ncli volume-group get コマンドで、VG「vg-rac-data」を見てみると、この VG には UUID=~9b66 の vDisk が含まれることが分かります。

f:id:gowatana:20161004215415p:plain

上記の体裁を整えてみました。これは、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 ファイルの格納されているパスがわかります。

f:id:gowatana:20161004215848p:plain

CVM の nfs_ls で、vDisk の格納されているパスを見てみると、実際に 10GB のファイルが存在しています。ABS で Volume として提供する vDisk は、Nutanix で VM に割り当てる vDisk と同じように Nutanix DSF に配置されている vDisk です。

f:id:gowatana:20161004220033p:plain

Linux iSCSI Initiator から ABS に接続した様子

Oracle Linux の iSCSI Initiator から、ABS の VG に接続してみました。

今回の環境概要です。Linux からは、Data Service IP アドレスを指定して接続(iscsiadm コマンドでログイン)します。

f:id:gowatana:20161004220713p:plain

iscsiadm コマンドで、Data Service IP を指定して接続しました。

接続後の Linux でパスベースの /dev/disk/by-path/~ デバイスを確認すると、ちゃんと Data Service IP をもとにしたデバイス名になっています。

f:id:gowatana:20161004220831p:plain

iscsiadm コマンドでセッション情報を見てみると、Data Service IP アドレスではなく、実際は CVM の IP アドレスに接続していることがわかります。また、TCP 3260 番ポートではなく、3205番ポートで接続していました。

f:id:gowatana:20161004221123p:plain

 lsof コマンドを実行してみると、iscsid が 3205 番ポートで接続しています。

f:id:gowatana:20161004221428p:plain

CVM 側で lsof コマンドを実行してみると、stargate という Nutanix 独自のコンポーネントが TCP/3205 をリスニングしていることがわかります。

f:id:gowatana:20161004221615p:plain

今回は 3-Node の Nutanix Cluster です。黒枠ごとに別ノードなのですが、クライアントから Target ごと(= vDisk ごと)に分散して接続されていることがわかります。3 Node とも 3205 番ポートをリスニングしています。1つの Initiator (サーバ)から 1つの Target に対して複数パスのセッションをはるのではなく、Target ごとに接続先 CVM を別にする、という分散をしています。

f:id:gowatana:20161004221809p:plain

Linux から ABS VG への接続(2パターンそれぞれ)

以前、VM への直接接続と、iSCSI Target 接続とを両方ためしてみた投稿です。

おまけ: CVM 障害時の様子

たまたま iSCSI で ABS に接続しているときに CVM が落ちたので、様子を見てみました。

  • iSCSI Initiator は、しばらく External Data Service IP に接続したあと、別の CVM に接続している様子。
  • Oracle RAC 共有ディスクで VG を使用していても、インスタンスは落ちなかった。ただし無負荷・・・

障害発生前は、CVM に接続さえていて・・・

f:id:gowatana:20161004225519p:plain

障害発生すると、External Data Service IP Address(Data Service IP)にしばらく接続。一瞬というわけではなく、しばらくは(厳密ではないが1分くらいは経過していたような)そのまま。

f:id:gowatana:20161004225531p:plain

しばらく待つと、別の CVM に接続される。

f:id:gowatana:20161004225539p:plain

 

以上、Meetup#14 の話の一部でした。