免费的存储服务器软件有FreeNAS 和 Openfiler。 其中Freenas的网站上只有i386及amd64的版本,也就是说Freenas不能支持64位版本的Intel CPU,而Openfiler则提供更全面的版本支持,在其网站上可以看到支持多网卡、多CPU,以及硬件Raid的支持,还有10Gb网卡的支持。
Freenas 官网地址:http://freenas.org/doku.php
Openfiler 官网:http://www.openfiler.com/
Openfiler是在rPath Linux基础上开发的,它能够作为一个独立的Linux操作系统发行。Openfiler是一款非常好的存储管理操作系统,开源免费,通过web界面对存储磁盘的管理,支持现在流行的网络存储技术IP-SAN和NAS,支持iSCSI(Internet Small Computer System Interface, 学名ISCSI HBA)、NFS、SMB/CIFS及FTP等协议。
一. 安装openfiler
先下载一个Openfiler 软件,然后安装到我们的虚拟机上。 Openfiler是基于Linux的存储平台,安装过程和安装一般的Linux系统一样。
下载地址:http://www.openfiler.com/community/download/
安装的第一个界面:
 
这里有一个磁盘的配置。 我选择了手动配置。 我给openfiler 是40g 的磁盘空间。 系统占2G,交换区1G。 剩下的空间没有分配。
安装完成之后的界面如下:
在这里有提示我们通过web进行访问。 并且提示了访问的地址:
Https://192.168.1.1:446/默认账户是openfiler密码为password. 我们登陆之后可以修改用户的密码。 .
二. 存储端(target)配置
Openfiler 的配置,可以参考Oracle 的这遍文档:
http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_iscsi.html#9
http://www.oracle.com/technetwork/cn/articles/hunter-rac11gr2-iscsi-083834-zhs.html#11
2.1 启动iscsi target 服务
在Service 里面启动iscsi target。 启动之后,下次重启会自动启该服务。
2.2 配置iscsi initiator 访问IP
只有配置了IP 才有权限访问openfiler 存储。在system 选项的最下面有配置选项,把IP 写上即可。 注意这里的子网掩码,写的是255.255.255.255
 
2.3  创建卷设备
现在我们来配置共享设备。 先对我们没有格式的分区格式化成扩展分区,一定要扩展分区:
[root@san ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 5221.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
e
Partition number (1-4): 3
First cylinder (383-5221, default 383):
Using default value 383
Last cylinder or +size or +sizeM or +sizeK (383-5221, default 5221):
Using default value 5221
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@san ~]# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot      Start         End      Blocks   Id System
/dev/sda1   *           1         255     2048256   83 Linux
/dev/sda2             256         382     1020127+ 82 Linux swap / Solaris
/dev/sda3             383        5221    38869267+   5 Extended
格式化之后,我们在openfiler的网页中就能看到这个磁盘信息,如果不格式化,或者格式化错误,是无法编辑的。
 
页面网下拉,我们能看到创建分区:
 
把所有空间全部创建成一个分区,这个就是一个卷。 之后窗口会显示:
 
创建完成后, 选择volume Groups。
 
然后输入vg名称和对应的设备,确定即可。
至此,我们已经创建完成了一个叫san的卷组。 但是我们在环境中使用的是卷。 所以我们还需要在这个卷组里创建它的卷。
点击旁边的add volume选项:
 
在这个页面往下拉,我们可以看到创建卷的选项:
 
这里我把所有的空间都创建到一个逻辑卷里。
 
逻辑卷创建完成以后,我们需要创建一个iscsi target, 然后把逻辑卷和这个target 映射起来,这样就可以通过这个target 与服务器进行连接。  点机iSCSI Target,创建Target IQN:
 
选择LUN Mapping, 将ISCSI 和 逻辑卷对应起来
 
配置能够访问逻辑卷的Network ACL 权限,这个ip 是在system 的选项里设置的。 这个之前已经配置过。 这里可以设置多个IP, 可以控制哪个IP 允许访问哪个逻辑卷。从而可以多个用户同时使用存储而互不影响。
 
至此, 存储的服务端已经配置完成。 在这一步,我们创建了一个逻辑卷然后与ISCSI target 进行了对应。 客户端的服务器就通过这个ISCSI target 进行连接。
Openfiler target的配置文件是: /etc/ietd.conf。
[root@san etc]# cat /etc/ietd.conf
#####   WARNING!!! - This configuration file generated by Openfiler. DO NOT MANUALLY EDIT. ##### 
Target iqn.2006-01.com.san
HeaderDigest None
DataDigest None
MaxConnections 1
InitialR2T Yes
ImmediateData No
MaxRecvDataSegmentLength 131072
MaxXmitDataSegmentLength 131072
MaxBurstLength 262144
FirstBurstLength 262144
DefaultTime2Wait 2
DefaultTime2Retain 20
MaxOutstandingR2T 8
DataPDUInOrder Yes
DataSequenceInOrder Yes
ErrorRecoveryLevel 0
Lun 0 Path=/dev/san/racshare,Type=blockio,ScsiSN=4YMdbG-SGED-jqHA,ScsiId=4YMdbG-SGED-jqHA,IOMode=wt
[root@san etc]#
重启iscsi-target 服务:
#service iscsi-target restart
三. 服务器端(initiator) 配置
iSCSI 客户端可以是提供 iSCSI 支持(驱动程序)的任何系统(Linux、Unix、MS Windows、Apple Mac 等)。
3.1安装 iSCSI(启动器)服务
这个安装包在系统的安装包里。 找到iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm包。 安装上。
[root@centos ~]# rpm -Uvh iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm
warning: iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
Preparing...                ########################################### [100%]
1:iscsi-initiator-utils ########################################### [100%]
[root@centos ~]# rpm -qa | grep iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.871-0.10.el5
3.2  配置 iSCSI(启动器)服务
刚才已经安装了initiator 包。 现在我们来启动initiator 服务(iscsid),并使其在系统引导时自动启动。在配置 iscsi 服务自动启动,使其在系统启动时自动登录 iSCSI 目标。
[root@centos ~]# service iscsid start
[ OK ]off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
[root@centos ~]# chkconfig iscsid on
[root@centos ~]# chkconfig iscsi on
用iscsiadm命令检查网络存储服务器上的所有可用目标:
[root@centos ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.1
192.168.1.1:3260,1 iqn.2006-01.com.san
手动登录 iSCSI 目标
[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.san -p 192.168.1.1 -l
Logging in to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]
Login to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]: successful
配置自动登录
在计算机引导(或 iSCSI 启动器服务启动/重新启动)时,客户端将自动登录上面列出的每个目标。和上面描述的手动登录过程一样,不过在这里加了2个参数。
[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.san -p 192.168.1.1 --op update -n node.startup -v automatic
3.3 创建永久性本地 SCSI 设备名称
查看/dev/disk/by-path 文件,来确定文件被映射到了哪个文件上:
[root@centos by-path]# ls /dev/disk/by-path -al
total 0
drwxr-xr-x 2 root root 180 Oct 28 12:48 .
drwxr-xr-x 6 root root 120 Oct 28 05:54 ..
lrwxrwxrwx 1 root root   9 Oct 28 12:48 ip-192.168.1.1:3260-iscsi-iqn.2006-01.com-lun-0 -> ../../sdc
lrwxrwxrwx 1 root root   9 Oct 28 05:54 pci-0000:00:07.1-ide-0:0 -> ../../hdc
lrwxrwxrwx 1 root root   9 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root   9 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:1:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:1:0-part1 -> ../../sdb1
通过上面,我们可以看到这个文件被挂到了sdc下。 但是每次重新引导服务器时,该映射都可能有所不同。它是自动登录到以随机方式配置的每个目标,并将这些目标映射到下一个可用的本地 SCSI 设备名称。 所以对于有个多target的时候,target1现在是/dev/sdc,下一次可能就是/dev/sdd . 因此,如果无法预测重新引导后的 iSCSI 目标映射,依赖于使用本地 SCSI 设备名称是不现实的。
在这里,我们就需要使用udev的动态管理工具。udev 提供了一个动态设备目录,使用一组可配置的规则通过符号链接指向实际设备。当 udev 收到设备事件(例如,客户端登录到 iSCSI 目标)时,就会根据 sysfs 中提供的可用设备属性匹配其配置好的规则以便识别设备。匹配规则可以提供其他设备信息或指定设备节点名和多个符号链接名,并指示 udev 运行其他程序(例如,一个 SHELL 脚本)作为设备事件处理过程的一部分。
3.3.1. 创建新的规则文件
创建文件 /etc/udev/rules.d/55-openiscsi.rules,它只包含一行用于接收事件的名称-值对。还将定义一个调出 SHELL 脚本 (/etc/udev/scripts/iscsidev.sh),用于处理事件。
[root@centos ~]# more /etc/udev/rules.d/55-openiscsi.rules
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c"
3.3.2. 创建在接收该事件时将调用的 UNIX SHELL 脚本
(1)先在服务器上创建一个目录,用于存储 udev 脚本:
[root@centos ~]# mkdir -p /etc/udev/scripts
(2)在服务器上创建 UNIX shell 脚本 /etc/udev/scripts/iscsidev.sh:
[root@centos ~]# more /etc/udev/scripts/iscsidev.sh
#!/bin/sh
# FILE: /etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[ -e /sys/class/iscsi_host ] || exit 1
file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
target_name=$(cat ${file})
# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
exit 1
fi
echo "${target_name##*.}"
说明:我们先看一下这个脚本的作用:
[root@centos]# more /sys/class/iscsi_host/host2/device/session1/iscsi_session:session1/targetname
iqn.2006-01.com.san
从这个命令,我们可以看出,这个脚本就是获取target 的名称的。 而规则将根据这个脚本返回的target 名称的最后一个字符串,来在相应的目录的下建立对应的文件。 简单点就是根据target来做一个映射。 因为target 名称是唯一的,所以这个映射名称也是唯一的。 这就避免了映射到不同的系统目录,而到时共享数据不可用。
(3)将刚才创建的shell脚本修改为可执行文件:
# chmod 755 /etc/udev/scripts/iscsidev.sh
(4)在服务器上重新启动 iSCSI 服务:
[root@centos ~]# service iscsi stop
Logging out of session [sid: 1, target: iqn.2006-01.com, portal: 192.168.1.1,3260]
Logout of [sid: 1, target: iqn.2006-01.com, portal: 192.168.1.1,3260]: successful
Stopping iSCSI daemon:
[root@centos ~]# service iscsi start
iscsid dead but pid file exists
[ OK ]off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]
Login to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]: successful
[ OK ]
(5)验证
[root@centos]# ls -l /dev/iscsi/*
lrwxrwxrwx 1 root root 6 Oct 28 14:16 /dev/iscsi/san -> ../sdc
因为这里我们用udev 配置,它就保证了iscsi目标映射到唯一的设备。 我们在使用的时候使用这个唯一的映射/dev/iscsi/san 即可。
对客户端这个映射做一个解释。 因为开始对这块也有点模糊。
存储的配置只干一件事,就是给我提供一个target。 这个target 是在存储上做的映射。 服务器通过initiator 去连存储。 然后把这个target 映射到自己的下一个可用设备上,如 /dev/sdc。 如果只有一个target. 那么没有任何问题。 每次initiator连上后都会把这个target 映射到/dev/sdc上。 但是如果有多个target, 那么这里就出了问题。 因为initiator的连接是随机的。 可能A先连接,那A就会映射到/dev/sdc上。 如果B先连接,B就会映射到/dev/sdc上。 这就是问题的所在。
Udev 的动态管理很好的解决了这个问题。 我们通过脚本加规则的设置,用脚本来获取每个target的名称,然后在规则里用每个target 最后一个字符串,在我们指定的目录创建一个设备。 这样,因为规则是唯一的。 所以每个设备都是唯一的。 我们就可以使用这个唯一的设备,而不会出现问题。 比如实验中的/dev/iscsi/san. 这个就是一个绝地位置。

转载于:https://blog.51cto.com/champion2012/789487

openfiler 搭建虚拟存储 并 配置服务端 (转载)相关推荐

  1. 搭建简易的物联网服务端和客户端-Maibu控制(二十一)

    创建麦布应用程序,麦步按键控制.原理和网页控制差不多,就是麦步访问之前创建的两个buttonclick接口.感谢qs100371大神. 代码地址:https://github.com/ZZES-ZVD ...

  2. 用php搭建公众号服务器,如何快速给自己的微信公众号搭建自己的后台服务端

    想要快速给自己的微信公众号搭建自己的后台服务端,该怎么办呢,那么如何快速给自己的微信公众号搭建自己的后台服务端的呢?下面是学习啦小编收集整理的如何快速给自己的微信公众号搭建自己的后台服务端,希望对大家 ...

  3. 阿里云服务器上搭建微信小程序服务端环境。

    无论是搭建个人博客空间也好,微信小程序也罢,搭建环境必需的两点:云服务器.域名,下面一步步给搭建演示如果在一台阿里云服务器上搭建微信小程序服务端环境. 1.云服务器准备:可在阿里云购买ECS服务器   ...

  4. NOD32企业版2.5的安装和配置服务端教学视频

    NOD32企业版2.5的安装和配置服务端教学视频(提供下载)-独家原创 作者:细水 日期:2007-02-04 字体大小: 小 中 大 在作动画之前,我们需要了解下NOd32的功能和特性,即使你非常喜 ...

  5. CSGO社区服搭建服务器架设游戏服务端教程

    CSGO社区服搭建服务器架设游戏服务端教程 我是艾西,上一篇说了搭建CSGO服务器需要准备服务器以及安装好所需要的环境,那么今天说一下CSGO社区私人服务器怎么搭建游戏服务端 搭建CSGO服务器比较简 ...

  6. SpringCloud(第 029 篇)配置客户端 ConfigClient 接入配置服务端

    SpringCloud(第 029 篇)配置客户端 ConfigClient 接入配置服务端 - 一.大致介绍 1.有配置服务端,那么势必就会有与之对应的客户端,SpringCloud 文档中集成也非 ...

  7. linux设置docker自动启动,CentOS7安装Docker配置服务端和容器自启动

    接上一篇,在VirtualBox上安装配置好了CentOS7,继续在这个虚拟机上装好docker并总结一下使用到的常用功能. 安装Docker 安装直接参考官网来安装就OK,没有遇到什么问题,值得注意 ...

  8. java搭建安卓服务器_无框架完整搭建安卓app及其服务端(一)

    技术背景: 我的一个项目做的的是图片处理,用 python 实现图片处理的核心功能后,想部署到安卓app中,但是对于一个对安卓和服务器都一知半解的小白来说要现学的东西太多了. 而实际上,我们的项目要求 ...

  9. Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务

    Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务_IT_ziliang的博客-CSDN博客 WebSocket是一种在单个TCP连接上进行全双工 ...

最新文章

  1. 【Memcache】下载与安装
  2. mapminmax函数 matlab,matlab mapminmax函数详解
  3. 网易博客迁移(2011-05-27)
  4. WINKEY功能键你会用吗??
  5. jQuery学习笔记2
  6. vue修改计算属性的值_Vue语法高级之计算属性和侦听器
  7. 的使用两个数据集拼接_使用Scikit Learn的分类器探索Iris数据集
  8. 剑指offer (04):二维数组中的查找 (C++ Python 实现)
  9. java的字符_Java中的字符
  10. 请不要重复犯我在学习Python和Linux系统上的错误
  11. kubernetes管理之使用yq工具截取属性
  12. 论文书写各类常见格式汇总Word版
  13. HTB-Antique
  14. odoo13 学习 Actions 动作的定义
  15. 掌薪阁分享:一个人人可做,汇聚了全网不同层次的网赚项目!
  16. 一文看懂智慧城市,解码25万亿大市场的机遇与格局
  17. 硬盘安装mysql_安装mysql数据库
  18. java list去除最后一个元素_如何快速删除list中的最后一个元素?
  19. 数据结构整理笔记(提纲) (数据结构 C语言版 第二版 严蔚敏)
  20. Unity 抛物线 弹道(一)

热门文章

  1. php 不等待返回的实现方法(异步调用)
  2. 安装suricata
  3. Android规范文档
  4. PyQt5 笔记(04):主窗口卡死问题
  5. centos7.0 docker安装部署
  6. 第五十一条:当心字符串的连接性能
  7. 根据文件头数据判断文件类型
  8. 在matlab中清除command history中的内容
  9. HDOJ-2012 素数判定
  10. iOS组件化开发实践