CEPH LIO iSCSI Gateway

參考文檔:html

  1. Ceph Block Device:http://docs.ceph.com/docs/master/rbd/
  2. CEPH ISCSI GATEWAY:http://docs.ceph.com/docs/master/rbd/iscsi-overview/
  3. USING AN ISCSI GATEWAY:https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/block_device_guide/using_an_iscsi_gateway
  4. 參考1:https://ceph.com/planet/ceph%E7%9A%84iscsi-gateway/
  5. 參考2:http://blog.51cto.com/devingeng/2125656
  6. 參考3:https://blog.csdn.net/hedongho/article/details/80573989
  7. 參考4:https://www.jianshu.com/p/a6d03fe5290e
  8. 參考5,LIO iSCSI Target:https://blog.csdn.net/shajc0504/article/details/40928923
  9. CEPH ISCSI三種網關:http://xiaqunfeng.cc/2018/02/28/ceph-iscsi%E7%BD%91%E5%85%B3/
  10. tgt方式掛載ceph rbd:https://my.oschina.net/renguijiayi/blog/340666
  11. tgtadm使用(tgt方式):https://blog.csdn.net/chenyulancn/article/details/52993806

一.TGT && LIO

1. Ceph Block框架

2. Ceph iSCSI基本框架

iSCSI gateway的實現主要有TGT && LIO兩種方式。node

3. TGT

TGTLinux target framework,爲建立、維護SCSI target 驅動(包括iSCSI、FC、SRP等)提供支持。python

  1. 工做在用戶空間;
  2. 在Linux 2.6.38 版本後(含),內核集成了 Linux-IO Target。

在ceph集成原生iscsi以前,一般使用基於用戶空間的"scsi-target-utils"套件實現tgt。linux

基於centos7.x系列,安裝"scsi-target-utils"套件後,iscsi並不支持ceph rbd後端存儲(經過"tgtadm --lld iscsi --mode system --op show"查看),主要緣由是redhat針對套件屏蔽了支持ceph rbd後端存儲的代碼。vim

解決方案:經過"rbd map xxx"將ceph rbd掛載到本地後,再經過iscsi tgt的"direct-store"模式發佈ceph塊存儲。windows

方案缺點:"rbd map xxx"掛載ceph rbd是經過"ceph rbd kernel module"的形式,tgt在用戶空間實現,致使發佈的ceph rbd在內核態與用戶態之間頻繁切換,影響性能。後端

4. LIO

LIOLinux-IO Target,用軟件實現各類SCIS Target。centos

  1. 工做在內核空間;
  2. 支持較多傳輸協議,如Fibre Channel(Qlogic,linux3.5)、FCoE(linux3.0)、iSCSI(linux 3.1)、iSER (Mellanox InfiniBand,linux3.10), SRP (Mellanox InfiniBand,linux3.3), USB等;
  3. 對 iSCSI RFC 規範的支持很是好,包括完整的錯誤恢復都有支持;
  4. 從內核 3.17 開始引入用戶態後端支持,即 TCMU(Target Core Module in Userspace)
  5. 在Linux 2.6.38 版本後(含),內核集成了 Linux-IO Target。

本文主要介紹基於LIO的ceph原生iscsi 實現方式,LIO利用用戶空間直通(即TCMU)與ceph的librbd庫進行交互(tcmu-runner處理LIO TCM後端存儲的用戶空間端的守護進程,在內核之上多了一個用戶態的驅動層,這樣只須要根據tcmu的標準來對接接口便可,而不用去直接與內核進行交互),並將rbd image暴露給iSCSI客戶端。api

二.環境準備

1. 內核/軟件要求(iscsi gateway)

  1. A running Ceph Luminous or later storage cluster,本文采用:13.2.1 mimic (stable);
  2. RHEL/CentOS 7.5; Linux kernel v4.16 or newer; or the Ceph iSCSI client test kernel,本文采用:CentOS 7.5 with Linux kernel v4.18.8-1.el7.elrepo.x86_64;
  3. The following packages must be installed from your Linux distribution's software repository:

    targetcli-2.1.fb47 or newer package,本文采用:2.1.fb47; 網絡

    python-rtslib-2.1.fb64 or newer package,本文采用:2.1.fb64-3;

    tcmu-runner-1.3.0 or newer package,本文采用:1.3.0-0.4.2;

    ceph-iscsi-config-2.4 or newer package,本文采用:2.5-1;

    ceph-iscsi-cli-2.5 or newer package,本文采用:2.5-10。

    以上rpm包並不能直接下載,整理本文采用的rpm包以下,連接:https://pan.baidu.com/s/1i-0GLqxjMv3P3c3YYoyhiQ 密碼:ncxv

2. 安裝要求(iscsi gateway)

  1. ntp已部署,selinux已禁用;
  2. 除ceph集羣須要開放的端口外,另開放tcp 3260(iscsi通訊)與tcp 5000(rbd-target-api)端口,本文不啓用firewalld或iptables;
  3. ceph集羣已部署,可參考:http://www.javashuo.com/article/p-ybfhilbv-de.html
  4. 若是iscsi gateway與osd節點沒有融合部署,須要複製ceph的配置文件(即/etc/ceph/目錄下相關文件)到iscsi gateway所在節點,本文采用融合部署。

3. 主機

Hostname

IP

Service

Remark

ceph01

public:172.30.200.57

cluster:192.30.200.57

 

centos7.5 with kernel v4.18.7-1

ceph02

public:172.30.200.58

cluster:192.30.200.58

 

centos7.5 with kernel v4.18.7-1

ceph03

public:172.30.200.59

cluster:192.30.200.59

 

centos7.5 with kernel v4.18.7-1

ceph-client

172.30.200.50

 

iscsi-initiator-utils v6.2.0.874-7

device-mapper-multipath v0.4.9-119

4. 修改ceph集羣配置參數(option)

針對ceph-mon或osd節點,並無特殊的iscsi-gateway參數選項,但下降若干默認的檢測osd宕機時間,能夠有效下降initiator的鏈接超時。

# 可在ceph-mon節點修改ceph.conf文件後分發到全部節點,如:
[root@ceph01 ~]# su - cephde
[cephde@ceph01 ~]$ cd cephcluster/
[cephde@ceph01 cephcluster]$ cat ceph.conf
# 新增參數
[osd]
osd client watch timeout = 15
osd heartbeat grace = 20
osd heartbeat interval = 5
# 分發,須要重啓服務
[cephde@ceph01 cephcluster]$ ceph-deploy admin ceph01 ceph02 ceph03

# 經過ceph-deply節點,在線修改參數,以下:
[cephde@ceph01 cephcluster]$ sudo ceph tell osd.* config set osd_client_watch_timeout 15
[cephde@ceph01 cephcluster]$ sudo ceph tell osd.* config set osd_heartbeat_grace 20
[cephde@ceph01 cephcluster]$ sudo ceph tell osd.* config set osd_heartbeat_interval 5

三.iSCSI Gateway

1. 安裝iscsi gateway

# 爲了多路徑高可用,iscsi gateway在多osd節點部署,下面以ceph01節點爲例,其他節點相似,必要時根據節點作調整;
# 下載必需的軟件後,利用」yum localinstall *」統一安裝,可解決依賴問題
[root@ceph01 ~]# cd ~/ceph-iscsi/
[root@ceph01 ceph-iscsi]# yum localinstall * -y

2. 配置iscsi-gateway.cfg

# 在osd節點/etc/ceph/目錄下建立iscsi-gateway.cfg文件,全部iscsi-gateway節點配置內容相同,以ceph01節點爲例;
# iscsi-gateway.cfg文件中,只須要根據實際狀況修改trusted_ip_list,其是每一個iscsi網關上的ip地址列表,用於管理操做,如目標建立,LUN導出等
# trusted_ip_list可與用於iSCSI數據的ip相同,但條件容許時推薦使用分離的IP
[root@ceph01 ~]# touch /etc/ceph/iscsi-gateway.cfg
[root@ceph01 ~]# vim /etc/ceph/iscsi-gateway.cfg
[config]
# Name of the Ceph storage cluster. A suitable Ceph configuration file allowing
# access to the Ceph storage cluster from the gateway node is required, if not
# colocated on an OSD node.
cluster_name = ceph

# Place a copy of the ceph cluster's admin keyring in the gateway's /etc/ceph
# drectory and reference the filename here
gateway_keyring = ceph.client.admin.keyring


# API settings.
# The API supports a number of options that allow you to tailor it to your
# local environment. If you want to run the API under https, you will need to
# create cert/key files that are compatible for each iSCSI gateway node, that is
# not locked to a specific node. SSL cert and key files *must* be called
# 'iscsi-gateway.crt' and 'iscsi-gateway.key' and placed in the '/etc/ceph/' directory
# on *each* gateway node. With the SSL files in place, you can use 'api_secure = true'
# to switch to https mode.

# To support the API, the bear minimum settings are:
api_secure = false

# Additional API configuration options are as follows, defaults shown.
# api_user = admin
# api_password = admin
# api_port = 5001
trusted_ip_list = 172.30.200.57,172.30.200.58,172.30.200.59 

3. 建立rbd pool

# rbd-target-api依賴於rbd-target-gw,rbd-target-gw服務依賴於」rbd」池的提早創建,且pool的名字必須是」rbd」
[root@ceph01 ~]# ceph osd pool create rbd 256

# 建立pool後須要啓動pool的屬性,如塊存儲池」rbd」,屬性關鍵字在最後
[root@ceph01 ~]# ceph osd pool application enable rbd rbd

# 查看pool,或」ceph osd lspools」,」 ceph osd pool ls「,」rados df」等
[root@ceph01 ~]# ceph osd pool get rbd all

4. 啓動iscsi-gateway api服務

# 服務須要在全部iscsi-gateway節點啓動,以ceph01節點爲例;
# 在啓動」rbd-target-api」服務的同時,會啓動」rbd-target-gw」服務;
# 注意提早建立」rbd」 pool,rbd-target-api依賴於rbd-target-gw,rbd-target-gw服務依賴於」rbd」池
[root@ceph01 ~]# systemctl daemon-reload
[root@ceph01 ~]# systemctl enable rbd-target-api
[root@ceph01 ~]# systemctl start rbd-target-api
[root@ceph01 ~]# systemctl status rbd-target-api ; systemctl status rbd-target-gw

5. 建立iscsi-target與rbd image

iscsi-gateway命令行工具gwcli用於建立/配置iscsi-target與rbd image;其他較低級別命令行工具,如targetcli或rbd等,可用於查詢配置,但不能用於修改gwcli所作的配置。

建立iscsi-target與rbd image在1個節點操做便可,如下操做在ceph01節點完成。

1)gwcli

# 進入gwcli命令行工具後,經過」ls」可查看目錄,經過」cd」可切換目錄
[root@ceph01 ~]# gwcli
Warning: Could not load preferences file /root/.gwcli/prefs.bin.
/> ls

2)建立iscsi-target

# 在iscsi-target目錄下建立iscsi-target;
# iscsi-target命名規則:iqn.yyyy-mm.<reversed domain name>:identifier,即iqn.年-月.反轉域名:target-name,這裏沒有域名,採用ip地址替代;
# 在新建立的iscsi-target下,同步生成gateway,host-groups,hosts目錄
/> cd /iscsi-target 
/iscsi-target> create iqn.2018-09.172.30.200.5x:iscsi-gw
/iscsi-target> ls

3)建立iscsi-gateway

# 在新建立的iscsi-target下同步生成gateway目錄下建立iscsi-gateway;
# iscsi-gateway的ip採用用於iscsi數據的ip,也可與trusted_ip_list設置的ip相同,建議採用前者;
# iscsi-gateway 的名字同主機hostname;
# 爲了多路徑ha,iscsi-gateway至少配置2個;
# 若是沒有使用指定版本的OS或者內核,或者採用ceph-iscsi-test內核時,可在建立iscsi-gateway命令後帶上」skipchecks=true」,跳過內核檢測
/iscsi-target> cd iqn.2018-09.172.30.200.5x:iscsi-gw/gateways 
/iscsi-target...i-gw/gateways> create ceph01 172.30.200.57
/iscsi-target...i-gw/gateways> create ceph02 172.30.200.58
/iscsi-target...i-gw/gateways> create ceph03 172.30.200.59
/iscsi-target...i-gw/gateways> ls

4)建立rbd image

# 在命令行根目錄的disks目錄下建立image;
# 建立image時,須要指定pool,image-name與size
/iscsi-target...i-gw/gateways> cd /disks
/disks> create pool=rbd image=disk01 size=10G
/disks> ls

6. 設置initiator

# 在新建立的iscsi-target下同步生成hosts目錄下設置initiator;
# initiator-name同iscsi-target命名相似,或在已有initiator客戶端的狀況下,採用客戶端默認的initiator-name,centos系統可查看」/etc/iscsi/initiatorname.iscsi」文件獲取;
# 建立initiator-name後,自動進入initiator-name目錄
/disks> cd /iscsi-target/iqn.2018-09.172.30.200.5x:iscsi-gw/hosts 
/iscsi-target...scsi-gw/hosts> create iqn.2018-09.172.30.200.50:iscsi-initiator
/iscsi-target...csi-initiator> ls

# 設置CHAP認證(必須),不然iscsi-target會拒絕initiator的登錄請求;
# 在新建的initiator-name目錄下設置認證
/iscsi-target...csi-initiator> auth chap=iscsiname/iscsipassword
/iscsi-target...csi-initiator> ls

7. 添加image到initiator

# 在新建的initiator-name目錄下向initiator添加image;
# 添加成功後,對應initiator下有可被掛載的lun設備;
# 此時多臺iscsi-gateway主機iscsi-gateway ip的tcp 3260端口被監聽
/iscsi-target...csi-initiator> disk add rbd.disk01
/iscsi-target...csi-initiator> ls

# 查看全局目錄層級,cluster目錄針對ceph集羣;
# disk與iscsi-target目錄針對iscsi-target與rbd image的建立與配置;
# 同時可經過targetcli命令行工具或者ceph的rbd命令查詢已完成的配置
/iscsi-target...csi-initiator> cd /
/> ls

四.iSCSI initiator

查看官網,iscsi initiator目前支持linux,windows與vmware esx,這裏只針對linux作驗證。

1. 安裝initiator與multipath工具

# iscsi-initiator-utils是通用initiator套件;
# device-mapper-multipath是多路徑工具
[root@ceph-client ~]# yum install iscsi-initiator-utils device-mapper-multipath -y 

2. 設置multipath服務

# 啓用multipath服務,生成」/etc/multipath.conf」文件
[root@ceph-client ~]# mpathconf --enable --with_multipathd y

# 在」/etc/multipath.conf」文件新增配置,針對LIO後端存儲設置多路徑ha
[root@ceph-client ~]# vim /etc/multipath.conf
devices {
        device {
                vendor                "LIO-ORG"
                hardware_handler       "1 alua"
                path_grouping_policy    "failover"
                path_selector           "queue-length 0"
                failback                60
                path_checker           tur
                prio                   alua
                prio_args               exclusive_pref_bit
                fast_io_fail_tmo         25
                no_path_retry           queue
        }
}

# 從新加載multinpath服務
[root@ceph-client ~]# systemctl reload multipathd 

3. iscsi discovery

1)設置chap認證

# 開啓initiator的chap認證,並設置username/password,與iscsi-target設置保持一致;
# CHAP Settings部分,涉及57/61/62行
[root@ceph-client ~]# vim /etc/iscsi/iscsid.conf
node.session.auth.authmethod = CHAP
node.session.auth.username = iscsiname
node.session.auth.password = iscsipassword 

2)設置initiatoe-name

# 設置initiator-name,保持與iscsi-target設置的initiator-name一致
[root@ceph-client ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2018-09.172.30.200.50:iscsi-initiator 

3)發現iscsi-target

# 發現iscsi存儲:iscsiadm -m discovery -t st -p ISCSI_IP,ISCSI_IP默認採用3260端口;
# 查看iscsi發現記錄:iscsiadm -m node
# 刪除iscsi發現記錄:iscsiadm -m node -o delete -T LUN_NAME -p ISCSI_IP
[root@ceph-client ~]# iscsiadm -m discovery -t st -p 172.30.200.57

4)登錄iscsi-target

# 登陸iscsi存儲:iscsiadm -m node -T LUN_NAME -p ISCSI_IP -l
# 登出iscsi存儲:iscsiadm -m node -T LUN_NAME -p ISCSI_IP -u
# 顯示會話狀況:iscsiadm -m session
[root@ceph-client ~]# iscsiadm -m node -T iqn.2018-09.172.30.200.5x:iscsi-gw -l

# 1個後端存儲,經過3條路徑鏈接
[root@ceph-client ~]# multipath -ll

# 經過多路徑鏈接後端存儲,生成多個盤符;
# 經過multipath服務匯聚,生成盤符/dev/mapper/mpathx,mount時間直接使用;
# 或:lsscsi
[root@ceph-client ~]# fdisk -l

4. mount驗證

# 建立分區,分區類型與大小默認便可;
# 保存退出後會有1個報錯,可忽略
[root@ceph-client ~]# fdisk /dev/mapper/mpatha 
Command (m for help): n
Select (default p): 
Partition number (1-4, default 1): 
First sector (8192-20971519, default 8192): 
Last sector, +sectors or +size{K,M,G} (8192-20971519, default 20971519): 

Command (m for help): w

# 格式化分區
[root@ceph-client ~]# mkfs.xfs /dev/mapper/mpatha1

# 掛載分區
[root@ceph-client ~]# mount /dev/mapper/mpatha1 /mnt

# 查看掛載狀況
[root@ceph-client ~]# df -Th

5. 設置開機啓動掛載

# filesystem parameters列設置掛載時間;
# noatime:禁止更新文件與目錄的inode訪問時間,以得到更快的訪問速度;
# _netdev:標識文件系統位於網絡上,防止網絡啓動前掛載
[root@ceph-client ~]# vim /etc/fstab
# rbd
/dev/mapper/mpatha1 /mnt                    xfs    noatime,_netdev        0 0

五.iSCSI Gateway Monitoring

ceph提供了1個監控導出的rbd image的性能的工具gwtop。

gwtop相似top,可顯示經過iSCSI導出到客戶端的rbd image的聚合性能指標,度量值取自Performance Metrics Domain Agent (PMDA)。Linux-IO target (LIO) PMDA信息列出每一個導出的rbd image與客戶端的鏈接,以及關聯的I/O值。

1. 安裝gwtop

# 在已部署iscsi-gateway的節點安裝,以ceph01節點爲例;
# pcp是性能採集工具,pcp-pmda-lio是agent
[root@ceph01 ~]# yum install ceph-iscsi-tools pcp pcp-pmda-lio -y

# 啓動服務
[root@ceph01 ~]# systemctl enable pmcd
[root@ceph01 ~]# systemctl start pmcd
[root@ceph01 ~]# systemctl status pmcd

# 註冊pcp-pmda-lio agent
[root@ceph01 ~]# cd /var/lib/pcp/pmdas/lio
[root@ceph01 lio]# ./Install

2. gwtop輸出樣例

# 在client列中,」(CON)」表示initiator已鏈接到iscsi-gateway,」-multi-」表示多client鏈接到單rbd image;
# 能夠經過在client寫入數據,如」dd」命令查看gwtop的輸出
[root@ceph01 lio]# gwtop

相關文章
相關標籤/搜索