---
date: 2012-03-20
title: Add SAN functions to Highly Available NFS/NAS
category: linux
---

This based on my last post where I documented building a Highly
Available NFS/NAS server.

There is not a huge amount that needs to be done in order to add iSCSI
functionality as well.

Add a file called */etc/drbd/iscsi.res* containing:

    resource iscsi {
        on nfs1 {
            device /dev/drbd1;
            disk   /dev/vdc;
            meta-disk internal;
            address   10.0.0.1:7789;
        }
        on nfs2 {
            device /dev/drbd1;
            disk   /dev/vdc;
            meta-disk internal;
            address   10.0.0.2:7789;
        }
    }

This differs from the previous resource in 2 ways. Obviously it using a
different physical disk. Also the port number of the address is
incremented; each resource has to have its own port to communicate on.

# Configure Heartbeat

Add a new resource to */etc/ha.d/haresources*:

    iscsi1.snellwilcox.local IPaddr::10.0.0.101/24/eth0 drbddisk::iscsi tgtd

Same primary host, new IP address, new drbd resource and of course the
service to be controlled (tgtd in this case).

I also made a couple of changes to */etc/ha.d/ha.cf*:

    keepalive 500ms
    deadtime 5
    warntime 10
    initdead 120

This changes the regularity of the heartbeat packets from every 2
seconds to 2 every second. We also say that a node is dead after only 5
seconds rather than after 30.

# Configure an iSCSI Target

Tgtd has a config file that you can use in */etc/tgt/targets.conf*. It
is an XML file, so add entry like:

    <target iqn.2011-07.world.server:target0>
            # provided devicce as a iSCSI target
            backing-store /dev/vg_matthew/lv_iscsi1
            # iSCSI Initiator's IP address you allow to connect
            initiator-address 192.168.1.20
            # authentication info ( set anyone you like for "username", "password" )
    </target>

The target name is by convention
*iqn.year-month.reverse-domainname:hostname.targetname*. Each backing
store will be a seperate LUN. A discussion of this is out of the scope
of this article.

By default, this config file is disabled. Enable it by un-commenting the
line `#TGTD_CONFIG=/etc/tgt/targets.conf` in */etc/sysconfig/tgtd*. You
can now enable the target with service tgtd reload.

Now when you run `tgtadm –mode target –op show` you should get something
like:

    Target 1: iqn.2012-03.com.example:iscsi.target1
        System information:
            Driver: iscsi
            State: ready
        I_T nexus information:
        LUN information:
            LUN: 0
                Type: controller
                SCSI ID: IET     00010000
                SCSI SN: beaf10
                Size: 0 MB, Block size: 1
                Online: Yes
                Removable media: No
                Readonly: No
                Backing store type: null
                Backing store path: None
                Backing store flags:
            LUN: 1
                Type: disk
                SCSI ID: IET     00010001
                SCSI SN: beaf11
                Size: 8590 MB, Block size: 512
                Online: Yes
                Removable media: No
                Readonly: No
                Backing store type: rdwr
                Backing store path: /dev/drbd/by-res/iscsi
                Backing store flags:
        Account information:
        ACL information:
            ALL

# Connect An Initiator

Install the iscsi utils:

    yum install iscsi-initiator-utils
    chkconfig iscsi on
    chkconfig iscsid on

Discover the targets on the host and login to the target.

    iscsiadm -m discovery -t sendtargets -p 10.0.0.101
    iscsiadm -m node --login

If you run `cat /proc/partitions` you will see an new partition has
appeared. You can do whatever you want with it.
