IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

http://www.cs.uml.edu/~bill/cs592/iSCSI_talk.pdf
http://blogs.mindspew-age.com/2012/04/05/adventures-in-high-availability-ha-iscsi-with-drbd-iscsi-and-pacemaker/

iSCSI és una abreviatura d'Internet Small Computer System Interface, un protocol de la família IP que ha esdevingut un estàndard d'emmagatzematge en xarxa. Les comandes SCSI s'envien a través de xarxes TCP/IP de forma que es facilita la transferència de dades en Intranets o LANs o a través de xarxes WAN tipus Internet o WAN corporatives.

El protocol permet als clients (aka initiators) enviar comandes SCSI (CDBs) a dispositius d'emmagatzemament SCSI (aka servers o targets) situats en computadores remotes. iSCSI és un protocol Storage Area Network o SAN, que permet a les organitzacions consolidar l'emmagatzemament en un data center storage array proveint als clients (p.ex servidores de bases de dades, servidors web, entorns de virtualització, etc) de la il·lusió de tenir un disc dur en local que realment es troba a una màquina remota.

IMPORTANT: observeur que es treballa per unitats de blocs i no per fitxers. Això és un punt important de diferència amb altres sistemes d'emmagatzemament remot com NFS o Samba. En altres paraules, estem parlant de SAN i no de NAS (vegeu SAN vs NAS)

A diferència d'altres protocols SAN tradicionals ( com p.ex. Fibre Channel), no es necessita de hardware específic ni de cablejat especial (Fibra òptica), iSCSI es pot utilitzar a llargues distàncies utilitzant les infraestructures de xarxa existents.

iSCSI (Internet Small Computer System Interface) és un protocol de xarxa que permet enviar comandes SCSI a través de la xarxa. Típicament s'implementa en solucions SAN (Storage Area Network) per tal de permetre als servidors d'un CPD accedir a gran magatzems de dades remots.

El protocol iSCSI és un protocol client servidor on:

clients --> iSCSI inititators
server --> iSCSI targets

Introducció

Terminologia

  • SCSI Initiators: Are the SCSI devices that start the I/O process and SCSI Targets are the SCSI devices that respond to a request to perform an I/O process.
  • CDB ­Command Descriptor Block
  • LUN ­Logical Units. (max 8 LUNs per device)
  • LBA ­Logical Block Address
  • IQN: iSCSI Qualified Name (IQN)
  • Connection ­ A connection is a TCP connection. Communication and target occurs over one or more TCP connections. The TCP connections carry control messages, SCSI commands, parameters, and data within iSCSI Protocol Data Units (iSCSI PDUs).
  • Session ­ The group of TCP connections that link an initiator with a session (loosely equivalent to a SCSI I­T nexus). TCP connections can be added and removed from a session. Across all connections within a session, an initiator sees one and the same target.
  • Command ­ iSCSI Commands, SCSI Commands.
  • CID, SSID, CmdSN.

IQN

The iSCSI Qualified Name is documented in RFC 3720, with further examples of names in RFC 3721. Briefly, the fields are:

       literal iqn
       date (yyyy-mm) that the naming authority took ownership of the domain
       reversed domain name of the authority (org.alpinelinux, com.example, to.yp.cr)
       Optional ":" prefixing a storage target name specified by the naming authority.
   From the RFC:
                 Naming     String defined by
    Type  Date    Auth      "example.com" naming authority
   +--++-----+ +---------+ +-----------------------------+
   |  ||     | |         | |                             |     

   iqn.1992-01.com.example:storage:diskarrays-sn-a8675309
   iqn.1992-01.com.example
   iqn.1992-01.com.example:storage.tape1.sys1.xyz
   iqn.1992-01.com.example:storage.disk2.sys1.xyz[3]

Hardware

Recursos:

Arquitectura Client/Servidor

SCSI utilitza una arquitectura client-servidor i per tant ISCSI també. El client s'anomena initiator per que és el que inicia les peticions i sol ser un servidor o una màquina client. El servidor és el "storage device" i s'anomena target perquè rep les peticions SCSI per Internet (iSCSI).

Els initiators poden ser de dos tipus:

  • Hardware initiator: és un iSCSI HBA, el que vol dir que bàsicament és un targeta de xarxa amb un chip SCSI ASIC on-board per tal d'alliberar de tota la càrrega de treball a la CPU principal. Adaptec per exemple ven iSCSI HBA's les quals tenen un driver per a Linux disponible.
  • Software initiator: És simplement un driver, qualsevol PC amb una targeta de xarxa instal·lant un software pot esdevenir un SCSI initiator.

Protocol iSCSI

iSCSI Són les sigles de Internet SCSI, un protocol.

Implementacions

Openiscsi

Open-iSCSI és un projecte per implementar el RFC3720 amb les següents característiques:

  • Alt rendiment
  • Transport independent
  • Multi-platform implementation

Rendiments:

Single iSCSI session:

  • 450MB/s Read and 450 MB/s Write for 64KB block
  • 510 MB/s Read and 550 MB/s Write for 256KB block
  • 65,000 IOPS - 1K, 58,000 IOPS - 2K, 50,000 IOPS with 4KB Read

Two iSCSI sessions:

  • 550 MB/s Read and 810 MB/s Write for 256KB block
  • 75,000 IOPS for 1K block
Dades preses amb single connection, 10GbE network, 2.4Ghz dual Opteron, UNH o IET targets

Open-iSCSI té dos parts:

  • kernel part: The kernel portion of Open-iSCSI is a from-scratch code

licensed under GPL. The kernel part implements iSCSI data path (that is, iSCSI Read and iSCSI Write). Bàsicament són 3 mòduls del Kernel:

  • User space part: s'encarrega de la part de control i conté el següent:
  • Configuration manager
  • iSCSI Discovery
  • Login and Logout processing
  • Connection-level error processing,
  • Nop-In and Nop-Out handling
En el futur: Text processing, iSNS, SLP, Radius, etc.

La part d'usuari consisteix en un dimoni anomenat iscsid i una utilitzat de gestió anomenada iscsiadm.


Recursos:

Documentació

Arquitectura

TODO:

open-iscsi-0.jpg
open-iscsi-1.jpg
open-iscsi-2.jpg
open-iscsi-3.jpg
open-iscsi-conn-tr.jpg

Paquets

A Ubuntu els paquets són:


$ dpkg -l | grep scsi
ii  libiscsi1                        1.5.0-1                      iSCSI client shared library
ii  open-iscsi                       2.0.871.3-2squeeze1          High performance, transport independent iSCSI implementation

Instal·lació

$ sudo apt-get install open-iscsi
S'està llegint la llista de paquets... Fet
S'està construint l'arbre de dependències       
S'està llegint la informació de l'estat... Fet
S'instal·laran els següents paquets extres:
  open-iscsi-utils
S'instal·laran els paquets NOUS següents:
  open-iscsi open-iscsi-utils
0 actualitzats, 2 nous a instal·lar, 0 a suprimir i 516 no actualitzats.
Es necessita obtenir 604kB d'arxius.
Després d'aquesta operació s'empraran 1499kB d'espai en disc addicional.
Voleu continuar [S/n]? s
Bai:1 http://es.archive.ubuntu.com/ubuntu/ lucid/main open-iscsi-utils 2.0.871-0ubuntu4 [98,1kB]
Bai:2 http://es.archive.ubuntu.com/ubuntu/ lucid/main open-iscsi 2.0.871-0ubuntu4 [506kB]
604kB baixats en 0s (6597kB/s)
S'està seleccionant el paquet open-iscsi-utils prèviament no seleccionat.
(S'està llegint la base de dades ... hi ha 153978 fitxers i directoris instal·lats actualment.)
S'està desempaquetant open-iscsi-utils (de .../open-iscsi-utils_2.0.871-0ubuntu4_i386.deb) ...
S'està seleccionant el paquet open-iscsi prèviament no seleccionat.
S'està desempaquetant open-iscsi (de .../open-iscsi_2.0.871-0ubuntu4_i386.deb) ...
S'estan processant els activadors per a man-db ...
S'estan processant els activadors per a ureadahead ...
ureadahead will be reprofiled on next reboot
S'està configurant open-iscsi-utils (2.0.871-0ubuntu4) ...
S'està configurant open-iscsi (2.0.871-0ubuntu4) ...
update-rc.d: warning: open-iscsi stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 6)
 * Starting iSCSI initiator service iscsid                                                                                                                                [  OK ]  
* Setting up iSCSI targets                                      

Fitxers instal·lats

$ dpkg -L open-iscsi
/.
/etc
/etc/init.d
/etc/init.d/open-iscsi
/etc/init.d/umountiscsi.sh
/etc/network
/etc/network/if-up.d
/etc/default
/etc/default/open-iscsi
/etc/iscsi
/etc/iscsi/iscsid.conf
/etc/iscsi/initiatorname.iscsi
/usr
/usr/share
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/iscsiadm.8.gz
/usr/share/man/man8/iscsid.8.gz
/usr/share/man/man8/iscsi_discovery.8.gz
/usr/share/man/man8/iscsistart.8.gz
/usr/share/man/man8/iscsi-iname.8.gz
/usr/share/initramfs-tools
/usr/share/initramfs-tools/hooks
/usr/share/initramfs-tools/hooks/iscsi
/usr/share/initramfs-tools/scripts
/usr/share/initramfs-tools/scripts/local-top
/usr/share/initramfs-tools/scripts/local-top/iscsi
/usr/share/doc
/usr/share/doc/open-iscsi
/usr/share/doc/open-iscsi/copyright
/usr/share/doc/open-iscsi/README.Debian
/usr/share/doc/open-iscsi/README.gz
/usr/share/doc/open-iscsi/changelog.Debian.gz
/usr/share/doc/open-iscsi/changelog.gz
/usr/sbin
/usr/sbin/iscsi-iname
/usr/sbin/iscsid
/usr/sbin/iscsi_discovery
/usr/sbin/iscsistart
/usr/bin
/usr/bin/iscsiadm
/var
/var/lib
/var/lib/open-iscsi

Executables

iscsiadm

$ sudo iscsiadm -m discovery -t st -p 192.168.50.70
192.168.50.70:3260,1 iqn.2006-01.com.openfiler:tsn.4c5ae126643b

iscsid

The daemon implements control path of iSCSI protocol, plus some management facilities. For example, the daemon could be configured to automatically re-start discovery at startup, based on the contents of persistent iSCSI database (see next section).

For help, run:

./iscsid --help

Usage: iscsid [OPTION]

 -c, --config=[path]     Execute in the config file (/etc/iscsi/iscsid.conf).
 -f, --foreground        run iscsid in the foreground
 -d, --debug debuglevel  print debugging information
 -u, --uid=uid           run as uid, default is current user
 -g, --gid=gid           run as gid, default is current user group
 -h, --help              display this help and exit
 -v, --version           display version and exit

Configuració

Control del serveis. /etc/init.d/open-iscsi

S'utilitza el típic script System V:

$ sudo /etc/init.d/open-iscsi
Usage: /etc/init.d/open-iscsi {start|stop|restart|force-reload|status}

Per arrancar el servei:

 $ sudo /etc/init.d/open-iscsi start

Consultar l'estat del servei

$ sudo /etc/init.d/open-iscsi status
Current active iSCSI sessions:
tcp: [1] 192.168.50.70:3260,1 iqn.2006-01.com.openfiler:tsn.4c5ae126643b

A un servidor Openfiler:

$ sudo /etc/init.d/open-iscsi status
iscsid (pid 3220 3219) is running...

/etc/iscsi/iscsid.conf

Ubuntu Server

Ubuntu Server can be configured as both an iSCSI iniator and a target. This guide provides commands and configuration options to setup an iSCSI initiator. It is assumed that you already have an iSCSI target on your local network and have the appropriate rights to connect to it. The instructions for setting up a target very greatly between hardware providers, so consult your vendor documentation to configure your specific iSCSI target.

Proxmox

Vegeu Proxmox i ISCSI

Active/Passive iSCSI Configuration

TODO: traduir. http://blogs.mindspew-age.com/2012/04/05/adventures-in-high-availability-ha-iscsi-with-drbd-iscsi-and-pacemaker/

Now we are ready to configure the Active/Passive iSCSI cluster. The following cluster resources are needed for an active/passive iSCSI Target:

   * A DRBD resource to replicate data.  This is controlled by the cluster manager by switching between the Primary and Secondary roles.
   * An LVM Volume Group, which will be available on whichever node currently holds the DRBD resource in Primary Role
   * A virtual, floating IP (aka virtual IP) for the cluster. This will allow initiators to connect to the target no matter which physical node it is running on
   * iSCSI Target
   * At least one iSCSI LUs that corresponds to a Logical Volume in the LVM Volume Group

In our setup, the Pacemaker configuration has 192.168.44.30 as the virtual IP address to use the target with iSCSI Qualified Name (IQN) iqn.1994-05.com.redhat:cfd95480cf87.clustervol. (An important note here is to make sure both nodes have the same initiatorname. The initiatorname for this configuration is iqn.1994-05.com.redhat:cfd95480cf87. This information is in the /etc/iscsi/initiatorname.iscsi file.)

The target contains the Logical Unit with LUN1, mapping to the Logical Volume named lun1.

To begin with the configuration of the resource, open the crm shell as root, and issue the following commands on the Primary node (i.e. viking-07):


crm(live)# configure crm(live)configure# primitive p_drbd_clustervol \ ocf:linbit:drbd \ params drbd_resource="clustervol" \ op monitor interval="29" role="Master" \ op monitor interval="31" role="Slave" crm(live)configure# ms ms_drbd_clustervol p_drbd_clustervol \ meta master-max="1" master-node-max="1" clone-max="2" \ clone-node-max="1" notify="true"

Create a master/slave resource mapping to the DRBD resource clustervol:


crm(live)configure# primitive p_ip_clustervolip \ ocf:heartbeat:IPaddr2 \ params ip="192.168.44.30" cidr_netmask="24" \ op monitor interval="10s" crm(live)configure# primitive p_lvm_clustervol \ ocf:heartbeat:LVM \ params volgrpname="clustervol" \ op monitor interval="10s" timeout="30" depth="0" crm(live)configure# primitive p_target_clustervol \ ocf:heartbeat:iSCSITarget \ params iqn="iqn.1994-05.com.redhat:cfd95480cf87.clustervol" \ tid="1" \ op monitor interval="10s" timeout="20s"

Now we add the Logical Unit:


crm(live)configure# primitive p_lu_clustervol_lun1 ocf:heartbeat:iSCSILogicalUnit \ params target_iqn="iqn.1994-05.com.redhat:cfd95480cf87.clustervol" lun="1" path="/dev/clustervol/lun1" implementation="tgt" \ op monitor interval="10"

For information concerning addressing any security considerations for iSCSI, please refer to the section entitled Security Considerations in the document Highly Available iSCSI Storage with DRBD and Pacemaker, provided by Linbit.

To bring it all together, we need to create a resource group from the resource associated with our iSCSI target:


crm(live)configure# group rg_clustervol \ p_lvm_clustervol \ p_target_clustervol p_lu_clustervol_lun1 p_ip_clustervolip

The Pacemaker default for the resource group is ordered and co-located. This means resources contained in the resource group will always run on the same physical machine, will be started in the same order as specified, and stopped in reverse order.

To wrap things up, make sure that the resource group is started on the node where DRBD is in the Primary role:


crm(live)configure# order o_drbd_before_clustervol \ inf: ms_drbd_clustervol:promote rg_clustervol:start crm(live)configure# colocation c_clustervol_on_drbd \ inf: rg_clustervol ms_drbd_clustervol:Master

We have now finished our configuration. All that is left to do is for it to be activated. To do so, run the issue the following command in the crm shell:

For more information about adding a DRBD-backed service to the cluster configuration, please reference Adding a DRBD-backed service to the cluster configuration in the DRBD 8.3 User’s Guide.

To see the setup of your configured resource group, run the following command using the crm CLI:


[root@viking-07 ~]# crm resource show Resource Group: rg_clustervol p_lvm_clustervol (ocf::heartbeat:LVM) Started p_target_clustervol (ocf::heartbeat:iSCSITarget) Started p_lu_clustervol_lun1 (ocf::heartbeat:iSCSILogicalUnit) Started p_ip_clustervolip (ocf::heartbeat:IPaddr2) Started Master/Slave Set: ms_drbd_clustervol Masters: [ viking-07.eucalyptus-systems.com ] Slaves: [ viking-08.eucalyptus-systems.com ]

Troubleshooting. Resol·lució de problemes

Problema amb ISCSI, Proxmox, HA

Virt04:

$ sudo /usr/sbin/tgtd -d 99 
$ sudo tgt-admin -e 2 

Reiniciar iscsi al virt01 i virt02:

$ sudo /etc/init.d/open-iscsi restart 

Reiniciar els serveis de cluster a virt01 i virt02:

$ sudo /etc/init.d/rgmanager stop 
$ sudo /etc/init.d/cman reload 
$ sudo /etc/init.d/rgmanager start

Vegeu també

Enllaços externs