środa, 28 grudnia 2016

Proxmox i współdzielona macierz dyskowa z interfejsem FibreChannel.

Proxmox i współdzielona macierz dyskowa z interfejsem FibreChannel.


Uruchomienie niedrogiej współdzielonej przestrzeni dyskowej dla 3 węzłów środowiska Proxmox.



Terminologia:

  • Target - komputer w którym jest macierz dyskowa, która będzie udostępniana za pomocą za pomocą technologi FibreChannel,
  • Initiator - host, który będzie "używał" tego co będzie udostępniane przez "Target".
  • FC - FibreChannel, w tym dokumencie będzie o użyciu sprzętu o przepustowości 4Gbps (4GFC)


Sprzęt:

  • target - komputer z 8 GB RAM, kontrolerem RAID marki Intel, 8 dysków SATA 1TB. Karta FC 4Gbit,
  • środowisko Proxmox - 3 różnej komputery z Proxmox w wersji 4 - każdy musi mieć kartę FC, komputery zostały skonfigurowane w cluster już wcześniej.
  • wszystkie użyte karty to karty QLogic QLE2460.
  • switch - IBM TotalStorage 2005-16B
  • kable światłowodowe FC.

UWAGA!

  • Wszystko co jest napisane, że ma zostać zrobione na którym z serwerów, musi być uruchamiane z prawami roota. Należy o to zadbać, ja nie będę dopisywał "sudo" czy "su" 
  • switch musi być skonfigurowany, albo przynajmniej musi mieć taką możliwość, czyli przy zakupie trzeba się upewnić, że da się to zrobić (np. czy nie jest zablokowany hasłem, jeśli tak - to czy jest znane, czy da się je zresetować), 
  • karta QLogic QLE2460 do normalnej pracy potrzebuje złącza PCIex x4.



Target - uruchomienie

Sprzęt - serwerowa płyta główna marki Asus, kontroler Raid, 8 dysków SATA 1TB, 2 dyski SSD 64GB (konsumenckie). Na dyskach SSD została uruchomiona macierz softwarowa raid1 ("md") i na niej został zainstalowany Ubuntu Server (Ubuntu 16.04.1 LTS), na którym został uruchomiony target iSCSI, który również może pracować z technologią FC (http://linux-iscsi.org). Nie udało mi się tego uruchomić na Centos 7, mimo wymiany kernela (na firmowym na pewno się nie da - Bugzilla - RedHat).

Kolejne kroki:

  • uruchomienie macierzy Raid10 na dyskach 1TB - robione za pomocą firmware kontrolera (Intel RAID Controller RS25DB080)
  • instalacja systemu operacyjnego Ubuntu Server, podczas instalacji konfiguracja systemu dyskowego - został zainstalowany na macierzy Raid1, na dyskach konsumenckich 32GB. System należy zainstalować w wersji minimalnej, instalując dodatkowo serwer SSH
  • update do najnowszej wersji - ważne - w dystrybucji jest błąd, polegający na źle opisanych zależnościach pakietu "targetcli", więc najpierw:
apt-get update
apt-get upgrade


  • konfiguracja karty QLogic QLE2460 do pracy w trybie "target":
echo 'options qla2xxx qlini_mode="disabled"' >/etc/modprobe.d/qla2xxx.conf


  • odnowienie initrd:
update-initramfs -u all


  • Reboot
  • instalacja targetcli

apt-get install targetcli


  • Poprawki:

Trzeba powalczyć z problemami w skryptach pythona używanym przez targetcli, trzeba wprowadzić poprawki opisane na stronie https://bugs.launchpad.net/ubuntu/+source/targetcli/+bug/1574394,czyli pliki /usr/share/pyshared/rtslib/ config.py i /usr/share/pyshared/rtslib/utils.py
Na wszelki wypadek reboot. 

Sprawdzamy czy moduł qla2xxx jest we właściwym trybie:
cat /sys/module/qla2xxx/parameters/qlini_mode
Powinno wypisać "disabled".

Komputer jest już skonfigurowany do pracy jako target w środowisku FC. Oczywiście należy doinstalować inne potrzebne rzeczy - czy np. program do pracy z kontrolerem Raid (tutaj megacli z http://hwraid.le-vert.net/debian/pool-sid/megacli_8.07.14-1_amd64.deb), program do współpracy z UPSem. itp.


  • Konfiguracja switcha.
W największym skrócie - porty na switchu FC operuje się głównie określeniem "strefa" ("zone").
Karty FC podłączone do portów w jednej strefie będą się widzieć. Należy więc albo skonfigurować jedną strefę do której dołączymy 4 porty na switchu, albo 3 strefy gdzie będzie widziała się karta z targeta z jedną z kart w nodach Proxmoxa. Switch wymieniony powyżej przyszedł z konfiguracją opisaną w tym drugim przypadku (prawdopodobnie domyślną dla urządzenia). Działa, tylko trzeba podłączyć target do portu "0".


  • Konfiguracja Target-u
W na inicjatorach(klientach) należy sprawdzić numery WWN kart qlogic, np. poleceniem:

cat /sys/class/fc_host/host*/port_name | sed -e s/0x// -e 's/../&:/g' -e s/:$//

Powinno wyjść coś takiego:
21:00:00:24:ff:04:7d:b3

Trzeba to spisać, będzie potrzebne w następnym kroku.

Na targecie:

Dokumentacja jest dostępna na stronie: http://linux-iscsi.org/wiki/Fibre_Channel :

Uruchamiamy "targetcli" i wydajemy komendę "qla2xxx/ info"
Powinno mniej więcej wyjść coś takiego (WWN to unikalny identyfikator - coś jak adres MAC na karcie ethernet):

Fabric module name: qla2xxx
ConfigFS path: /sys/kernel/config/target/qla2xxx
Allowed WWNs list (free type): 21:00:00:1b:32:87:93:f8
Fabric module specfile: /var/target/fabric/qla2xxx.spec
Fabric module features: acls
Corresponding kernel module: tcm_qla2xxx

Tworzymy więc nasz target poleceniem:

/qla2xxx create 21:00:00:1b:32:87:93:f8
Następnie trzeba utworzyć "backstore" - czy to co będzie udostępniane - tutaj chcę udostępnić całą macierz z dysków HDD, którą system widzi jako /dev/sda, czyli:

cd /backstores
iblock/ create name=RaidStorage dev=/dev/sda

następnie trzeba to udostępnić:

cd /qla2xxx/21:00:00:1b:32:87:93:f8/luns/
create /backstores/iblock/RaidStorage

Powiedzieć jakim inicjatorom będzie udostępniony ten zasób:

cd /qla2xxx/21:00:00:1b:32:87:93:f8
acls/ create 21:00:00:1b:32:1c:1c:af
acls/ create 21:00:00:1b:32:1c:a5:a9
acls/ create 21:00:00:24:ff:04:7d:b3

Zapisać konfigurację poleceniem
saveconfig

Na wszelki wypadek reboot target'u, potem uruchamiamy targetcli i sprawdzamy co jest poleceniem "ls". Powinno być coś takiego:




            /> ls
o- / ........................................................... [...]
  o- backstores ................................................ [...]
  | o- fileio ..................................... [0 Storage Object]
  | o- iblock ..................................... [1 Storage Object]
  | | o- RaidStorage .............................. [/dev/sda, in use]
  | o- pscsi ...................................... [0 Storage Object]
  | o- rd_mcp ..................................... [0 Storage Object]
  o- ib_srpt ............................................. [0 Targets]
  o- iscsi ............................................... [0 Targets]
  o- loopback ............................................ [0 Targets]
  o- qla2xxx .............................................. [1 Target]
  | o- 21:00:00:1b:32:87:93:f8 ............................. [enabled]
  |   o- acls ............................................... [3 ACLs]
  |   | o- 21:00:00:1b:32:1c:1c:af .................... [1 Mapped LUN]
  |   | | o- mapped_lun0 ................................. [lun0 (rw)]
  |   | o- 21:00:00:1b:32:1c:a5:a9 .................... [1 Mapped LUN]
  |   | | o- mapped_lun0 ................................. [lun0 (rw)]
  |   | o- 21:00:00:24:ff:04:7d:b3 .................... [1 Mapped LUN]
  |   | | o- mapped_lun0 ................................. [lun0 (rw)]
  |   o- luns ................................................ [1 LUN]
  |     o- lun0 ...................... [iblock/RaidStorage (/dev/sda)]
  o- tcm_fc .............................................. [0 Targets]
  o- usb_gadget .......................................... [0 Targets]
  o- vhost ............................................... [0 Targets]
/>

 
Jeśli wyszło coś podobnego target jest gotowy do pracy.

Konfiguracja węzłów Proxmox
Ze sprzętem nie trzeba robić nic szczególnego. Jeśli komputer zobaczył kartę FC, to teraz po restarcie powinien widzieć udostępniony dysk.
Jeśli tak jest, to na jednym z nodów klastra należy na tym dysku zdefiniować partycję LVM.
np.



       
 fdisk -l /dev/disk/by-path/pci-0000:03:00.0-fc-0x2100001b328793f8-lun-0

Disk /dev/disk/by-path/pci-0000:03:00.0-fc-0x2100001b328793f8-lun-0: 3.6 TiB, 3995997306880 bytes, 7804682240 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 262144 bytes
Disklabel type: gpt
Disk identifier: DEB27937-D650-4226-A235-813687A61CE2

Device                                                               Start        End    Sectors  Size Type
/dev/disk/by-path/pci-0000:03:00.0-fc-0x2100001b328793f8-lun-0-part1  2048 7804682206 7804680159  3.6T Linux LVM

       
 


Następnie trzeba utworzyć grupę LVM:
pvcreate /dev/disk/by-path/pci-0000:03:00.0-fc-0x2100001b328793f8-lun-0-part1
vgcreate fc /dev/disk/by-path/pci-0000:03:00.0-fc-0x2100001b328793f8-lun-0-part1
 
Utworzoną grupę LVM o nazwie "fc" wystarczy dodać do Proxmoxa za pomocą interfejsu webowego - zgodnie z dokumentacją Proxmoxa