2019年7月23日 星期二

[工作] iSCSI配置 並搭配OCFS2達到多台共享

前陣子實驗了一下iSCSI, 做個筆記
以下都是最陽春的配置

iSCSI主要分為target跟initiator
iSCSI target: 分享空間資源(server)
  Package: sudo apt install tgt

iSCSI initiator: 連到target並且使用資源(client)
  Package: sudo apt install open-iscsi

Target配置:
裝完package後, 修改config
# vim /etc/tgt/targets.conf

ex.
<target iqn.2019-07.ric.builder1:builderiscsi>  
    backing-store /dev/nvme0n1   
</target>

這裡我使用的iqn為: iqn.2019-07.ric.builder1:builderiscsi
並且加入一顆磁碟到target

然後重啟服務
# systemctl restart tgt

使用command查看狀態, 看看新增的target有沒有被加入
(同常為LUN1 ~ LUNX)
#tgt-admin --show

沒問題的話target設定完成

Ininiator配置:
一樣裝完package後, 修改config
修改initiator的iqn, 每個initiator必須唯一
# vim /etc/iscsi/initiatorname.iscsi

ex.
InitiatorName=iqn.2019-07.ric:iscsi

接下來做discovery, 偵測target
# iscsiadm -m discovery -t sendtargets -p 192.168.100.254
192.168.100.254:3260,1  iqn.2019-07.ric.builder1:builderiscsi

偵測完後開始進行連線
# iscsiadm -m node -T iqn.2019-07.ric.builder1:builderiscsi --login

登入後cat /proc/partition或是fdisk -l會看到多的device,
可以對它做fdisk跟mkfs, 切partition跟建立filesystem
注意第一台initiator做完之後其他台就不用做了

接下來就能使用這個檔案系統了
ex.
mount /dev/sdb1 /mnt/test

使用上有幾個問題:
1. initiatorA新增檔案後, initiatorB並不會馬上看到檔案,
    需要umount後再mount才看得到
2. initiatorA跟initiatorB同時寫入檔案,
    有很大的機會發生檔案毀損

因為SAN本身設計並不是用來共享檔案的,
iSCSI意思是SCSI protocol over IP,
對每個initiator來說就是多一個SCSI硬碟做讀寫,
並不會知道其他initiator做了什麼事

解決方案: 透過clustered filesystem
這裡透過OCFS2來處理,
OCFS2透過daemon監控每個node的狀態,
達到node間同步跟避免同時寫入時造成毀損

Package: ocfs2-tools ocfs2-tools-dev

裝完package後, 一樣編輯config
# vim /etc/ocfs2/cluster.conf
ex.
cluster:
        node_count = 2
        name = ocfs2

node:
        number = 0
        cluster = ocfs2
        ip_port = 7777
        ip_address = 192.168.100.2
        name = machine1

node:
        number = 1
        cluster = ocfs2
        ip_port = 7777
        ip_address = 192.168.100.3
        name = machine2

其中name必須與cat /etc/hostname一樣

編輯完後啟動o2cb
# service o2cb load
# service o2cb configure
# service o2cb online

接著建立掛載ocfs2檔案系統
mkfs.ocfs2 /dev/sdb1
mount -t ocfs2 /dev/sdb1 /mnt/test

在每一台initiator都做一樣的動作(mkfs只須做一次)
可以試著在initiatorA建立檔案測試
然後看initiatorB是否立即同步

這方式可以達到同步跟同時寫入
不過缺點是OCFS2不支援overlayfs upper...

參考資料:
http://www.voidcn.com/article/p-wmzavzze-xe.html
https://blog.51cto.com/nosmoking/1873507
http://linux.vbird.org/linux_server/0460iscsi.php#server