iSCSI
1: Introduction
iSCSI (Internet Small Computer System Interface) is an Internet Protocol (IP)-based storage networking standard for linking and managing data storage devices. It is used to build network-based storage solutions referred to as Storage Area Networks. A Storage Area Network (SAN) is an architecture enabling remote computer storage devices (block devices such as discs, disc partitions, raid arrays, logical volumes and loopback mounted files) to be attached to servers in such a way that the devices appear as locally attached to the operating system. This is in contrast to Network Attached Storage (NAS), which uses file-based protocols such as NFS or SMB/CIFS. With NAS, storage does not appear as locally attached but is clearly remote, and computers request a portion of an abstract file rather than a disk block.
Until recently, the predominant SAN technology was the Fibre Channel Storage Area Network (FC SAN). Fibre Channel (FC) was developed to move SCSI commands over a storage network, and has the advantages of greater performance, increased disk utilization, improved availability, better scalability, and support for server clustering. However, FC SANs also suffer from three major disadvantages:
- Price: while falling, entry costs for FC remain prohibitive for smaller enterprises with limited IT budgets.
- Hardware incompatibilies: hardware vendors have implemented the Fibre Channel specifications in an incompatible manner, resulting in frequent interconnection problems across different vendor hardware.
- Separate network technology: FC is a different technology to the ubiquitous Ethernet, requiring acquisition of yet another set of skill sets by IT staff.
In recent years, the widespread adoption of Gigabit Ethernet and a demand for lower costs has seen iSCSI SANs emerge as the leading competitor to FC SANs. iSCSI is similar to Fibre Channel in that it carrys block-level data over a storage network. Block-level communication means that data is transferred between the host and the client in chunks called blocks. Database servers in particular depend on this type of communication to work properly, as opposed to the file level communication used by most NAS systems. Like an FC SAN, an iSCSI SAN is typically implemented as a separate physical network devoted entirely to storage. The major benefit of iSCSI however is that its components are much the same as in a typical IP network (LAN).
As things stand today, iSCSI is a promising technology despite some inherent performance shortcomings in comparison to FC. While one of iSCSI"s most compelling features is its use of standard commodity IP networking as its transport mechanism, the TCP/IP protocol is complex and CPU intensive. Most iSCSI data processing (both TCP and iSCSI) is handled in software and is therefore much slower than Fibre Channel which is handled completely in hardware. One solution to this processing overhead is to replace software iSCSI initiators with iSCSI Host Bus Adaptor (HBA) or TCP Offload Engine (TOE) cards that offload TCP/IP and iSCSI processing from a server's CPU. iSCSI performance can also be improved considerably by the use of 10-Gigabit Ethernet on a dedicated physical storage network.
2: Terminology
- iSCSI Initiator: a client device that connects and initiates requests to some service offered by a server (in this case an iSCSI target). The iSCSI initiator software will need to exist on the client node which in this article is a database server on machine linux3. An iSCSI initiator can be implemented using either software or hardware. Software iSCSI initiators are available for most major operating system platforms.
- iSCSI Target: the "server" component of an iSCSI network. This is typically the storage device that contains the information you want and answers requests from the initiator(s). For the purpose of this article, the node openfiler1 will be the iSCSI target.
3: iSCSI on CentOS
iSCSI target and initiator services are provided on CentOS by the scsi-target-utils and iscsi-initiator-utils RPM packages respectively, both available in the base /os repo.
