I have had a chance a while ago to play a little with a technology called iSCSI. Before working on that project, I had never heard of such a thing. But…what is it and what is it used for?
What is iSCSI?
Simply put, iSCSI is a protocol (literally “internet SCSI”) for sending SCSI commands over IP. Confused? Don’t be. SCSI commands are generally used for accessing internal SCSI hard drives. In larget data centers, it has become necessary to move the hard drive storage away from the servers and into their own box. The problem is that to preserve speed and the connection, Fiber Optic cables needed to be used to connect the drives to the server. Fiber is not only difficult to work with (light doesn’t bend and move along wires quite as nicely as electricity), it is also very expensive.
To resolve this problem, someone came up with the idea of taking these SCSI commands, wrapping them in IP and running them over a standard ethernet cable. By using Ethernet instead of Fiber, it is possible to make use of the plethora of off the shelf network switching and managing components. Also, with the advent of Gigabit and 10Gigabit network adapters, drive access speed is certainly usable for at least small scale operations.
The beauty of an iSCSI share is that, instead of a traditional share where filesystem and access permissions are controlled by the server holding the drive, an entire share can be created that will appear to the client (probably another server) to be its own internal drive. Once mounted, the client can format and use the iSCSI drive just the same as any of its internal drives. The iSCSI server can either share each drive as its own iSCSI drive, or create mutliple iSCSI shares for each physical drive. It can then handle the backup and any other redundancy issues, leaving the client free to only handle “server” applications.
*How does it work?**
A typical iSCSI setup has two parts. The server component, which is known as the target, and the client, which is known as the initiator. When setting up a target, the host computer must designate a certain size for the new “drive” to be shared. It then releases control over the data in that “drive” while maintaining total control over the physical device (either single drive or RAID array) that is home to the iSCSI drive.
On the client side, you must start an iSCSI initiator service to connect to the target. You can then mount the drive (either by mounting it on a linux system or by using the Disk Management utilities on Windows), format it, and treat it as your very own disk. The operating system will not differentiate between your iSCSI drive and one internally installed.
How do I set it up?
There are several ways that you can set up an iSCSI drive. The easiest way would be to go with one of the many off the shelf NAS (Network Attached Storage) devices. Alternatively, you could use something like a storage server from IBM or DELL which woudl make use of the Windows Storage Server platform. Finally, you could go the route that I did and use Linux. In particular, I used OpenFiler which uses the iSCSI Enterprise Target Project for making iSCSI targets. It is relatively easy to install and provides a handy web configuration utility.
The client side is easy to set up with Windows Server 2008 or Windows Vista. Simply use the Microsoft iSCSI Software Initiator Service. For ealier versions of windows, the initiator can be downloaded here. You can do the same thing from Linux using open-iscsi.
A Final Word of Caution
The performance of the iSCSI drive is directly related to the speed of the connection between the target and the initiator. If at all possible, I recommend connecting the two by way of a dedicated Gigabit subnet. This can be easily accomplished with two Gigabit Ethernet adapters and a Gigabit (1000BaseT) crossover cable. There are instructions here on how to make a gigabit crossover cable.