磁盘阵列SAN存储系统在以前是一种昂贵和复杂的系统,往往还牵涉到FC,只有大企业才有能力使用。但随着100M/1G以太网的发展和 iSCSI 技术的成熟,低成本、高速和高可靠性的SAN系统已经成为可能,就是小微企业也有能力来使用SAN存储系统。
本文将介绍如何在普通商用硬件设备和Ubuntu建立低成本、高速、高可靠的磁盘阵列SAN系统。
本文主要介绍软件设置,硬件配置不多做介绍。
基本系统配置:
CPU:Intel Xeon E5 或 E3 处理器
内存:8G 或 4G
硬盘:120GB x3 (为系统盘,不含数据盘)
网口:1000M 或 100M 以太网口
主板:任意服务器主板
对中小微企业来说,内部流量不会太大,上述配置的服务器系统完全能满足需求,价格一般在几千到一万左右。
本示例中使用 Ubuntu 18.04 LTS 作为操作系统,安装在由 3个磁盘组成的RAID1磁盘陈列上,其中2个为活跃磁盘,一个为后备磁盘。有三个磁盘组成的RAID1系统非常可靠,只有在三个磁盘都出错时才会有问题。
在此对系统的安装不再做介绍,具体安装方式请参见 基于SAMBA4的域控制器安装设置 一文中的 操作系统安装 部分。
root@lssan1:~# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jun 2 10:14:37 2018
Raid Level : raid1
Array Size : 122358784(116.19 GiB 116.89 GB)
Used Dev Size : 122358784(116.19 GiB 116.89 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Oct 18 13:33:46 2018
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Name : storageOS:0
UUID : 2bae87ad:0552c629:e2a73596:5479c044
Events : 22
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 - spare /dev/sdc1
root@lssan1:~#
一般情况下,SAN存储设备较为适合使用RAID6或RAID10磁盘阵列。RAID6和RAID10各有其优缺点,可根据需求选择其中之一来建立SAN存储系统。
RAID类型 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
RAID6 | 很高的冗余度,读取性能尤为突出。 | 由于奇偶校验,执行大量写操作会降低性能 。 | 大容量存储服务器和应用服务器。 |
RAID10 | 非常高的读写性能和容错能力。 | 可用容量较低/成本较高, 可扩展性受限。 | 执行大量写入操作的服务器/数据库。 |
系统上,/dev/sda、/dev/sdb和/dev/sdc 已经被用于操作系统,余下的5个硬盘将被用来建立用于存储设备的磁盘阵列。
在 /dev/sdd,/dev/sde,/dev/sdf,/dev/sdg和/dev/sdh 上创建 RAID6
root@lssan1:~# mdadm --create --verbose /dev/md60 --level=6 --raid-devices=4 /dev/sdd /dev/sde /dev/sdf /dev/sdg --spare-devices=1 /dev/sdh
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 10476544K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md60 started.
root@lssan1:~#
检查新建的RAID阵列:
root@lssan1:~# mdadm --detail /dev/md60
/dev/md60:
Version : 1.2
Creation Time : Thu Oct 18 20:58:00 2018
Raid Level : raid6
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Thu Oct 18 20:58:54 2018
State : clean
Active Devices : 4
Working Devices : 5
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : lssan1:60 (local to host lssan1)
UUID : 6e55fa84:a4212001:ad18a7d2:1b078048
Events : 17
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd
1 8 64 1 active sync /dev/sde
2 8 80 2 active sync /dev/sdf
3 8 96 3 active sync /dev/sdg
4 8 112 - spare /dev/sdh
root@lssan1:~#
我们可以看到/dev/md60已成功建立。为了在启动时,系统就能操作/dev/md60,我们必须将/dev/md60的相关信息写入initramfs中,启动时系统可以自动重建/dev/md60磁盘阵列。
一、首先获取/dev/md60的布局信息:
root@lssan1:~# mdadm --detail --scan
ARRAY /dev/md/0 metadata=1.2 spares=1 name=storageOS:0 UUID=2bae87ad:0552c629:e2a73596:5479c044
ARRAY /dev/md/1 metadata=1.2 spares=1 name=storageOS:1 UUID=3531eed2:4a05b3d6:e343fe19:eca8288c
ARRAY /dev/md60 metadata=1.2 spares=1 name=lssan1:60 UUID=6e55fa84:a4212001:ad18a7d2:1b078048
root@lssan1:~#
二、将ARRAY /dev/md60 metadata=1.2 spares=1 name=lssan1:60 UUID=6e55fa84:a4212001:ad18a7d2:1b078048
加入文件/etc/mdadm/mdadm.conf
。
三、更新initramfs
root@lssan1:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-4.15.0-36-generic
root@lssan1:~#
四、检查系统重启后/dev/md60是否自动重建
重启系统,然后用mdadm --detail --scan
检查磁盘阵列情况。
root@lssan1:~# mdadm --detail --scan
ARRAY /dev/md60 metadata=1.2 spares=1 name=lssan1:60 UUID=6e55fa84:a4212001:ad18a7d2:1b078048
ARRAY /dev/md/0 metadata=1.2 spares=1 name=storageOS:0 UUID=2bae87ad:0552c629:e2a73596:5479c044
ARRAY /dev/md/1 metadata=1.2 spares=1 name=storageOS:1 UUID=3531eed2:4a05b3d6:e343fe19:eca8288c
root@lssan1:~#
/dev/md60磁盘阵列已重建。
如果要建立RAID10阵列,只需要在创建命令中,将 --level=6
改成 --level=10
即可,其他都一样。
基于以太网的SAN使用iSCSI协议,我们首先需要在本机上安装TGT(TarGeT framework),支持本机提供iSCSI目标服务。
root@lssan1:~# apt install tgt -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
tgt-rbd
The following NEW packages will be installed:
tgt
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 214 kB of archives.
After this operation, 641 kB of additional disk space will be used.
Get:1 http://mirrors.aliyun.com/ubuntu bionic/main amd64 tgt amd64 1:1.0.72-1ubuntu1 [214 kB]
Fetched 214 kB in 1s (171 kB/s)
......
......
......
Setting up tgt (1:1.0.72-1ubuntu1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/tgt.service → /lib/systemd/system/tgt.service.
Processing triggers for systemd (237-3ubuntu10.3) ...
Processing triggers for ureadahead (0.100.0-20) ...
root@lssan1:~#
root@lssan1:~# vi /etc/tgt/conf.d/target-dev-md10.conf
<target iqn.Oct-18-2018.md60.lssan1.lswin.cn:lun1>
# iSCSI 目标设备
backing-store /dev/md60
# 用户IP地址
initiator-address 192.168.220.60
# 用户授权信息
incominguser lssan1-user-name lssan1-user-passwd
# SAN授权信息
outgoinguser lssan1-owner-name lssan1-owner-passwd
</target>
重启tgt,检查SAN目标情况。
root@lssan1:~# tgtadm --mode target --op show
Target 1: iqn.Oct-18-2018.md60.lssan1.lswin.cn:lun1
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
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 21456 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path: /dev/md60
Backing store flags:
Account information:
lssan1-user-name
lssan1-owner-name (outgoing)
ACL information:
192.168.220.60
root@lssan1:~#
一般情况下,我们建议将磁盘阵列以原始模式提供目标服务,由用户机决定如何使用。
在配置SAN时,我们的ACL只允许 192.168.220.60 使用,该IP地址是测试机的IP地址。
首先在测试机上用 iscsiadm 寻找 TGT,在找到目标服务后,自动形成默认SAN挂载配置文件。
root@lstest:~# iscsiadm -m discovery -t st -p lssan1.lswin.cn
192.168.220.30:3260,1 iqn.Oct-18-2018.md60.lssan1.lswin.cn:lun1
root@lstest:~#
目标服务已经找到,下面按我们的需求修改自动形成的默认SAN挂载配置文件。
/etc/iscsi/nodes/iqn.Oct-18-2018.md60.lssan1.lswin.cn\:lun1/192.168.220.30\,3260\,1/default
按下列步骤对上述文件进行修改:
一、将 node.startup = manual 修改为 node.startup = automatic
二、将node.session.auth.authmethod = None改为 node.session.auth.authmethod = CHAP
三、将下列4行内容加在 node.session.auth.authmethod = CHAP 行后
node.session.auth.username = lssan1-user-name
node.session.auth.password = lssan1-user-passwd
node.session.auth.username_in = lssan1-owner-name
node.session.auth.password_in = lssan1-owner-passwd
挂载前磁盘情况
root@lstest:~# iscsiadm -m session
iscsiadm: No active sessions.
root@lstest:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
└─sda1 8:1 0 40G 0 part
├─minisys--vg-root 253:0 0 39G 0 lvm /
└─minisys--vg-swap_1 253:1 0 976M 0 lvm [SWAP]
sr0 11:0 1 704M 0 rom
root@lstest:~#
挂载SAN(重启iSCSI服务):
root@lstest:~# service open-iscsi restart
root@lstest:/var/log# iscsiadm -m session
tcp: [1] 192.168.220.30:3260,1 iqn.Oct-18-2018.md60.lssan1.lswin.cn:lun1 (non-flash)
root@lstest:/var/log# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
└─sda1 8:1 0 40G 0 part
├─minisys--vg-root 253:0 0 39G 0 lvm /
└─minisys--vg-swap_1 253:1 0 976M 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 704M 0 rom
root@lstest:/var/log#
我们可以看到SAN存储设备已经被成功挂载到测试机上,并以磁盘(/dev/sdb)形式出现。
注意:尽量不要再SAN上建LVM!如在SAN上建LVM有可能产生不可预测的问题。