複数のUbuntuインスタンスにブロック・ボリュームをマウントした備忘録を共有。
(OCI Linux向けのドキュメントは揃っていましたが、Ubuntu向けはなかったので)
参考
先人の力をお借りしました。
想定
- Ubuntuインスタンス0(ブート・ボリューム 50GB)【以後、ins0と呼びます】
- Ubuntuインスタンス1(ブート・ボリューム 50GB)【以後、ins1と呼びます】
- ブロック・ボリューム 100GB
- ブロック・ボリュームを使って、ストレージを拡張したい
- ついでにファイルをインスタンス間で共有したい
- 同一のVCNを使用
Step1. インスタンスとブロック・ストレージを起動
ドキュメントがたくさん公開されているので、ここでは省略。
Step2. インスタンスにブロック・ストレージをアタッチ
ins0とins1のそれぞれにブロック・ボリュームを接続します。
次の1つの注意点を除いて、一般的な手順で進めてください。
各コンテナで3つのiSCSIコマンドを実行するところまで完了させてください。
※パーティションの作成以降はこのあとで
参考になる記事
https://zenn.dev/kotapon/articles/d887eef29914e8
Step3. 各インスタンスのローカルIPを確認 & 7777番ポートを開ける
Step2で注意メッセージが表示されたと思いますが、そのままで複数のインスタンスからアクセスすることはデータ破損を起こし危険です。
(また、各インスタンスでファイル情報を手動で更新しなければなりません。)
そこでOracleが提供しているOCFS2(Oracle Cluster File System Version 2)というクラスターファイルシステムサービスを利用します。
詳細を知りたい場合はここを参照してみてください。
- 【公式ブログ】https://blogs.oracle.com/cloud-infrastructure/post/using-the-multiple-instance-attach-block-volume-feature-to-create-a-shared-file-system-on-oracle-cloud-infrastructure
- 【日本語に翻訳されています】https://orablogs-jp.blogspot.com/2020/01/using-the-multi-attach-block-volume-feature-to-create-a-shared-file-system-on-oracle-cloud-infrastructure.html
OCFS2により、各インスタンス間は7777番ポートで通信するので環境を整えます。
ローカルIPとホスト名
まず、各インスタンスのローカルIPとホスト名を確認します。
各インスタンスの「インスタンスの詳細」を開き、プライマリVNICのプライベートIPアドレスとホスト名をメモしておきます。
このインスタンスは10.0.0.23とmainでした。
イングレス・ルール
VCNのイングレス・ルールにより、ポート番号は制限されているため、
"ローカルからの7777番ポートへのアクセス"を解除します。
該当VCNの セキュリティ・リスト > Default Security List for * > イングレス・ルール と開き、イングレス・ルールの追加。
ソースCIDRに「10.0.0.0/16」を、宛先ポート範囲に「7777」を入力して追加する。
iptables
またOCIの場合、Ubuntu側のファイアウォールでもポートが制限されているので解除します。
各コンテナで実行してください。
# iptablesで7777を許可
sudo iptables -I INPUT -p tcp --dport 7777 -j ACCEPT
# 永続化
sudo /etc/init.d/netfilter-persistent save
sudo /etc/init.d/netfilter-persistent reload
これでコンテナ間で7777番にアクセスできるようになりました。
Step4. OCFS2のインストールと実行
各コンテナで次の作業を行っていきます。
まずOCFS2をインストールします。
$ sudo apt-get update
$ sudo apt-get install ocfs2-tools
続いて、OCFS2の設定ファイルを作成します。
$ sudo o2cb add-cluster ociocfs2
# 対象のインスタンスの数だけ次を実行(実行順は全てのインスタンスで統一しておきます)
# sudo o2cb add-node ociocfs2 [ホスト名] --ip [ローカルIPアドレス]
$ sudo o2cb add-node ociocfs2 main --ip 10.0.0.15
$ sudo o2cb add-node ociocfs2 sub --ip 10.0.0.16
マウント先のディレクトリを作成します。
# マウント先はご自由に
sudo mkdir /mnt/ocfs2
/etc/default/o2cb
を編集して、OCFS2を有効にします。(falseをtrueに置換)
︙
O2CB_ENABLED=true
︙
最後に起動します。
$ sudo systemctl restart o2cb
Step5. パーティションとフォーマット
ここでは任意の1つのインスタンスだけで実行します。
まずはパーティションの作成。
$ sudo fdisk /dev/sdb # sdbは環境により異なるかもしれません
Welcome to fdisk (util-linux X.XX).
Command (m for help): n
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-209715199, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199):
︙
Command (m for help): w
︙
ocfs2でフォーマット。
$ sudo mkfs.ocfs2 /dev/sdb1 # ここも環境により少し異なるかもしれません
Step6. マウント
各インスタンスで次のようにマウントすれば晴れて完了です。
$ sudo mount -t ocfs2 /dev/sdb1 /mnt/ocfs2
# 念のため確認
$ df