データを保管するディスクはSATA HDDをmdでRAID6を構築した/dev/md/md2tbを使い、キャッシュにはnvmeのSSDの/dev/nvme0n1p1を使います。
キャッシュにはdm-cacheを使用します。LVMに組み込まれているはずなので、追加パッケージは特に要らないと思います。
まずはVGを作ります。この時はディスクアレイとSSDを両方指定します。
# vgcreate sharedvg /dev/md/md2tb /dev/nvme0n1p1
次にデータ保管用のLVを作ります。ここではデータ保管用のディスクアレイのみを指定します。
# lvcreate -n sharedlv -l 100%FREE sharedvg /dev/md/md2tb
キャッシュのメタデータ用のLVを作ります。メタデータはキャッシュサイズの1/1000以下を指定するそうです。SSDは240GBなので、200MBとします。
# lvcreate -L 200M -n sharedlv_meta sharedvg /dev/nvme0n1p1
キャッシュ用のLVを作ります。200Gを指定します。
# lvcreate -L 200G -n sharedlv_cache sharedvg /dev/nvme0n1p1
キャッシュプールを作成します。モードはライトバックにします。ライトバックはキャッシュに書き込み後に完了とするモードです。UPSもあるし、冗長化電源なので多分大丈夫でしょう。
# lvconvert --type cache-pool --cachemode writeback --poolmetadata sharedvg/sharedlv_meta sharedvg/sharedlv_cache
キャッシュプールを指定してコンバートします。
# lvconvert --type cache --cachepool sharedvg/sharedlv_cache sharedvg/sharedlv
sharedlvにPoolとOriginがついて、それぞれキャッシュプールとオリジナルに分かれていますね。
# lvs -a sharedvg LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert [lvol0_pmspare] sharedvg ewi------- 200.00m sharedlv sharedvg Cwi-a-C--- <1.82t [sharedlv_cache_cpool] [sharedlv_corig] 0.01 3.23 0.00 [sharedlv_cache_cpool] sharedvg Cwi---C--- 200.00g 0.01 3.23 0.00 [sharedlv_cache_cpool_cdata] sharedvg Cwi-ao---- 200.00g [sharedlv_cache_cpool_cmeta] sharedvg ewi-ao---- 200.00m [sharedlv_corig] sharedvg owi-aoC--- <1.82t
あとは作ったsharedlvを指定して、iSCSIで共有をすれば、SSDでキャッシュできる共有ディスクの出来上がりです。
# dnf install targetcli # systemctl enable target.service # systemctl start target.service # targetcli /backstores/block create name=sharedlv dev=/dev/sharedvg/sharedlv # targetcli /iscsi create iqn.2019-06.net.gurres.homelab:nas02 # targetcli /iscsi/iqn.2019-06.net.gurres.homelab:nas02/tpg1/luns create /backstores/block/sharedlv # targetcli /iscsi/iqn.2019-06.net.gurres.homelab:nas02/tpg1 set attribute generate_node_acls=1 # targetcli /iscsi/iqn.2019-06.net.gurres.homelab:nas02/tpg1 set attribute demo_mode_write_protect=0 # targetcli saveconfig