ISCSI

From Newroco Tech Docs
Jump to navigationJump to search

Setup of Target

Install iscsitarget and configure storage:

sudo apt-get -y install iscsitarget iscsitarget-dkms 

make a disk image:

sudo mkdir /var/iscsi_disks 
sudo dd if=/dev/zero of=/var/iscsi_disks/<disk_name>.img count=0 bs=1 seek=<size>

Example:

sudo dd if=/dev/zero of=/var/iscsi_disks/zabbix_logs.img count=0 bs=1 seek=100G 

Enable ICSI Targeting:

Access the file:

sudo vi /etc/default/iscsitarget

and change SCSITARGET_ENABLE=false to true.

Configure Target iqdn:

sudo vi /etc/iet/ietd.conf

add the following at the end of the file:

Target iqdn.<year>-<month>.<domain>:<any name>
  Lun 0 Path=<Path_to.img>,Type fileio
  initiator-address <ip.add.re.ss>
  incominguser <username> <password>

Example:

Target iqdn.2017-08.tandp-host1:ZabbixLogs
  Lun 0 Path=/var/icsi_disks/zabbix_logs.img,Type fileio
  initiator-address 192.168.80.201
  incominguser zabbix S70r4g3P455w0rd


Restart iscsitarget:

sudo systemctl restart iscsitarget 

Check status:

sudo ietadm --op show --tid=1 

You should see:

Wthreads=8
Type=0<
QueuedCommands=32
NOPInterval=0
NOPTimeout=0

Client setup and initial configuration

Information in configuring open-iscsi by clients (not to become a storage provider)

Install

apt-get install open-iscsi parted 

This should create your unique initiator name which if you need to configure access control on the iscsi server you can get by

tail -n1 /etc/iscsi/initiatorname.iscsi

Give zabbix user permissions to run command iscsiadm for monitoring. Open /etc/sudoers with:

export EDITOR=vim
visudo

And add this line:

zabbix ALL=NOPASSWD: /usr/bin/iscsiadm

Add these lines to /etc/zabbix/zabbix_agentd.conf

UserParameter=iscsi.discovery,l=$(sudo iscsiadm -m node | awk '{print $2}');echo -n '{"data":[';for i in ${l};do echo -n "{\"{#VOLNAME}\": \"$i\"},";done|sed -e 's:\},$:\}:';echo -n ']}';
UserParameter=iscsi.check.connected[*],sudo iscsiadm -m session | cut -d' ' -f4 | grep -Fxq $1 && echo 1 || echo 0
UserParameter=iscsi.check.mounted[*],grep -q `ls -l /dev/disk/by-path/ | grep $1"-lun-0 ->" | tail -c 4` /proc/mounts && echo 1 || echo 0

And restart zabbix-agent

systemctl restart zabbix-agent

Once you know there is a volume available for use with the server being configured use

iscsiadm -m discovery -t sendtargets -p portal.ip.add.ress

NB portal IP address may not be the same address as used for managing the SAN

to get the name of the volume available to the server. This will be in the form of

storage.ip.add.ress:port,1 uniqueinitiatornameofstorage-volumename

exemple

xxx.xxx.xxx.xxx:3260,1 iqn.2005-10.org.freenas.ctl:volumename

Depending on the storage server, the initiator name can be quite long, but you just need to be able to cut and paste parts into the next command to login:

iscsiadm -m node -T uniqueinitiatornameofstorage-volumename -p storage.ip.add.ress:port -l

exemple

iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:volumename -p xxx.xxx.xxx.xxx:3260 -l

The iscsi volume should now be available as a disk device to be managed by the OS. Check by

ls /dev/disk/by-path/

The output will tell you what disk device to address e.g.

# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root  9 Nov  1 16:38 ip-storage.ip.add.ress:3260-uniqueinitiatornameofstorage-volumename-lun-0 -> ../../sda

where sda is the key element. Using that information create a volume on the drive with parted:

parted /dev/sda

Then create a filesystem as needed

mkfs.ext4 /dev/sda1

(what disk filesystem you use depends on need, but assuming backup etc. is taken care of, EXT4 probably best all-round performance option)

NB if using ext4, the defaults leave 5% of space reserved for root operations. If the volume is for use for data storage, then you should reduce this with

tune2fs -m 1 /dev/sda1

To ensure your iscsi volume is available on reboot

vi /etc/iscsi/iscsid.conf

and set

node.startup = automatic

Then edit the settings for your iscsi node

vi /etc/iscsi/nodes/uniqueinitiatornameofstorage-volumename/ip-storage.ip.add.ress,3260,1/default

and set

node.conn[0].startup = automatic

Note if you only have one iscsi volume on a server, there will only be one nodes subdirectory so Tab autocomplete is your friend.

Now mount the volume (note if this is to extend space in use you may need to mount the volume at a temporary location, move existing data and then remount at the desired permanent location. This best done with the UUID, which got created when the volume did.

mkdir /path/to/mymountpoint
ls -l /dev/disk/by-uuid
mount /dev/disk/by-uuid/youruuid /path/to/mymountpoint

Assuming success (best to test you can write to the mounted volume) next make the mount auto remount on reboot by

vi /etc/fstab

and appending a line of the form

UUID=youruuid /path/to/mymountpoint      ext4    defaults,relatime,_netdev        0       0

for normal file stores, and

UUID=youruuid /path/to/mymountpoint      ext4    defaults,noatime,_netdev        0       0

for backups (where noatime means access times are not recorded, which should preserve the accesstime from when the file was last accessed on the active store). Where a key option is _netdev, which tells the operating system not to try and mount this volume until the network is up.

When /etc/fstab is modified a service reload is needed so the new changes are seen. Less needed when just adding a new line, more needed when removing/modifying an existing one so the OS doesn't try to remount an old configuration.

systemctl daemon-reload

Troubleshooting and Tips

Logging out of ISCSI sessions

If you need to logout of the iscsi storage to allow changes to the volume etc., unmount it and run

iscsiadm -m node -T uniqueinitiatornameofstorage-volumename -p storage.ip.add.ress:port -u

Logout all sessions

iscsiadm --mode node --logoutall=all

Login all known nodes

iscsiadm --mode node --loginall=all

Delete node

To delete a discovered node run

iscsiadm -m node -o delete -T <iqn>

General information

To see all known nodes

iscsiadm -m node

To see current active sessions

iscsiadm -m session -P 3