With iSCSI making major inroads into the enterprise
environment, more CIOs and storage administrators are considering this
lower-cost technology to help facilitate a move to a centralized storage
environment, or to supplement their existing storage systems. While there is
great debate over how and where iSCSI should be used, the future is clear:
iSCSI is here to stay. Further, with pricing that is often a fraction of Fibre
Channel and generally very good performance, iSCSI's future is bright.
In previous articles,
I've discussed some of iSCSI's
higher-level functionality (many can be found in Fibre Channel as well),
such as snapshots, replication and clustering. In this article, I'll go over
the basic building blocks of an iSCSI system, discuss some common iSCSI
terminology, and explain iSCSI best practices.
iSCSI building blocks & terminology
The simplest iSCSI system has at least the following four
- iSCSI initiator or iSCSI HBA
- iSCSI target
- One or more servers
- Ethernet network
An "iSCSI initiator" is a hardware device or a piece
of software residing on a computer that handles communications with an iSCSI
array. There are two common ways to connect a server or other computer (even
desktops and other workstations can directly connect to an iSCSI array) to an
iSCSI array. The first is to use a software-based iSCSI initiator, such as
Microsoft's free iSCSI initiator or the iSCSI initiator included with many
Linux distributions and other operating systems (including AIX, NetWare, Solaris,
and HP-UX). Second, you can skip the software and go right to hardware. Known
as an iSCSI HBA (Host Bus Adapter), a hardware-based iSCSI initiator offers
some advantages over software-based counterparts. First, a hardware-based
device does not consume CPU resources to handle iSCSI commands, as does a
software-based initiator. Second, hardware devices can be used to boot the
system from an iSCSI SAN, which is not possible with software-based initiators.
Third, since you have a device absolutely dedicated to a single task, a
hardware-based iSCSI initiator may provide better overall storage performance.
My recommendations: First, start with gigabit Ethernet
adapters and only use an iSCSI HBA if you need to boot from SAN, or if your
server's CPU is getting killed due to iSCSI overhead. Gigabit Ethernet is very,
very cheap these days and in almost all cases, the iSCSI initiator on a gigabit
Ethernet link is more than sufficient. Second, use MPIO (Multi Path I/O) on two
separate NICs whenever possible. In short: dedicate two gigabit Ethernet NICs
in each of your servers to iSCSI connectivity and make sure you read up on your
operating system's iSCSI MPIO implementation. At my workplace, we are moving to
Dell blade servers and have four gigabit Ethernet NICs in each blade. Two NICs
are used for front-end connectivity, with two used for connections to our EqualLogic PS200E
array. We are using MPIO wherever possible.
The difference between "array" and "target"
Until this point, I've been calling the storage device an "iSCSI
array". In iSCSI-speak, an iSCSI array, or the iSCSI-enabled device to
which you will be storing data, is called an "iSCSI target". I make
the differentiation between iSCSI array and iSCSI-enabled device for a reason:
For most operating systems, there is software available that allows you to
convert that system into an iSCSI target and use that system's disks for your
storage needs. In these instances, while you still have an iSCSI
implementation, you're not really using an array, per se. So, to avoid
confusion, use the term "target" instead.
The two terms initiator
and target form two endpoints for
your iSCSI SAN. In many cases, if you're using enterprise-grade iSCSI targets
(like the EqualLogic PS series array I've written about previously), you'll
have a single target even if you have multiple arrays, since each individual
array is joined to a single cluster that each initiator then addresses as the
overall target. If you do have more than one array, I always recommend that you
join the two into a single cluster, as you'll enjoy greater performance
(depending on the manufacturer) and much easier management since all
administrative tasks can then be performed from a single console.
Of course, that leaves the big expanse between the initiator
and the target. As you probably know, iSCSI uses TCP/IP for its communication,
so a typical Ethernet network is all that's needed to join the two sides of the
iSCSI equation into a working system. Always use gigabit Ethernet switches on
your iSCSI network. Anything less would severely degrade performance to
unacceptable levels. Further, whenever possible, mesh the network between your
initiators and your target. That is, use two good quality gigabit Ethernet
switches and multihome two connections (one from each switch) to two separate NICs
in each server. To your iSCSI targets, multihome each switch to two separate
ports on each individual array. Finally, connect each switch to the other.
Using this configuration, you can lose a NIC, one of the two switches, and a
cable, and remain operational. On the switches, enable Jumbo Frames and flow
control to achieve the best and most reliable performance.
iSCSI will continue to evolve over the coming years, with
support for more and better drives and support for the next generation of
Ethernet running at 10Gbps.