存储大爆料 之 不能说的秘密,新手必读!!

1      前言

一直以来,对存储的一知半解,甚是不爽,这次借着写一个现网案例的机会,决定先把存储的知识顺一下。

存储又称磁阵,粗点讲,其实就是一堆大硬盘,通过某种接口和协议连接起来,通过磁阵管理器统一管理,实物图可见:磁阵图

磁阵管理器可以设置存储的raid类型,可以划分LUN,可以把LUN映射到服务器上,前提是在光纤交换机里划分ZONE来将主机的HBA卡跟磁阵的HBA绑定,光纤线路图可见:磁阵与服务器之间的光纤线路图

LUN映射到服务器上,就可以在服务器上通过LVM管理存储,映射流程图可见:磁阵映射到服务器的流程图

这里重点讲LVM的概念和操作,看完这篇文档,你会了解LVM是什么,里面有哪些概念,如何把LUN划分到LV挂载到服务器上,双机切换是怎么对存储进行处理的(这部分我在网上找了好久都没找到)。至于存储如何跟服务器连上,如何做RAID策略,如何划分LUN,不是此次目的,如有兴趣请自己去学习。

2      概念理解

这些概念我直接引用资料里的内容,就不原创了。

2.1      LVM

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。与 传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

 

2.2      LUN

lun的全称是logical unit number,也就是逻辑单元号。我们知道scsi总线(啥是SCSI总线?自己去百度)上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用target ID(也有称为scsi id的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。
       而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了lun的概念,也就是说lun id的作用就是扩充了target id。每个target下都可以有多个lun device,我们通常简称lun device为lun,这样就可以说每个设备的描述就有原来的target x变成target x lun y了,那么显而易见的,我们描述设备的能力增强了.就好比,以前你给别人邮寄东西,写地址的时候,可以写:
   xx市人民大街54 xxx()
   但是自从高楼大厦越来越多,你不得不这么写:
   xx市人民大街54xx大厦518 xxx ()
   所以我们可以总结一下,lun就是我们为了使用和描述更多设备及对象而引进的一个方法而已,一点也没什么特别的地方。

lun id不等于某个设备,只是个号码而已,不代表任何实体属性,在我们的实际环境里,我们碰到的lun可能是磁盘空间,可能是磁带机,或者是media changer等等。
    lun的神秘之处(相对于一些新手来说)在于,它很多时候不是什么可见的实体,而是一些虚拟的对象。比如一个阵列柜,主机那边看作是一个target device,那为了某些特殊需要,我们要将磁盘阵列柜的磁盘空间划分成若干个小的单元给主机来用,于是就产生了一些什么逻辑驱动器的说法,也就是比target device级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为lun0,lun1,lun2....什么的。而操作系统的机制使然,操作系统识别的最小存储对象级别就是lun device,这是一个逻辑对象,所以很多时候被称之为logical device。

 

LUN介绍摘自:http://blog.csdn.net/zeo112140/article/details/7568757

 

2.3      PV

物理卷physical volume ,典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的Software RAID 卷。

2.4      VG

卷组volume group ,卷组是LVM中最高抽象层,是由一个或多个物理卷所组成的存储器池。

2.5      LV

逻辑卷logical volume ,逻辑卷相当于非LVM系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。

3      用LVM划分PV/VG/LV

3.1      修改磁盘的分区格式为lvm格式8e

 查看硬盘空间,并创建分区(按以下命令逐行执行)

fdisk -l

fdisk /dev/sdb (如果每个lun一个分区,就可以不新建分区,只是修改分区格式)

p 查看当前分区情况

n 新建分区

p 主分区

2 建第2个主分区(根据实际情况)

+20G 设置分区大小

t 设置分区格式

8e 设置为linux lvm格式

w 保存设置

q 退出分区

3.2      建立PV

 

为把一个磁盘或分区作为PV,首先应使用 pvcreate 对其初始化,如对IDE硬盘/dev/hdb

"使用整个磁盘,

# pvcreate /dev/hdb

这将在磁盘上建立VG的描述符。

"使用磁盘分区,如/dev/hdb1

使用fdisk t 命令把/dev/hda1的分区类型设为0x8e,然后运行:

# pvcreate /dev/hdb1

这将在分区/dev/hda1上建立VG的描述符。

PV初始化命令pvcreate的一般用法为:

pvcreate PV1 [ PV2 ... ] 它的参数可以是整个磁盘、分区,也可以是一loop设备。

 

 

3.3      建立VG

在使用pvcreate 建立了PV后,可以用vgcreate 建立卷组,如有PV1、PV2分别是/dev/hda1与/dev/hdb1,使用

# vgcreate testvg /dev/hda1 /dev/hdb1

将建立一个名为testvg的卷组,它由两个PV:/dev/hda1与/dev/hdb1组成。vgcreate的一般用法为:

# vgcreate [options] VG_name PV1 [PV2 ...]

其中的可选项包括设置VG最大支持的LV数、PE大小(缺省为4MB)等。

注意:当使用devfs系统时,应使用设备的全名而不能是Symbol Link,如对上例应为:

# vgcreate testvg /dev/ide/host0/bus0/target0/lun0/part1\

/dev/ide/host0/bus0/target1/lun0/part1

3.4      激活VG

在被激活之前,VG与LV是无法访问的,这时可用命令:

# vgchange -a y testvg

激活所要使用的卷组。当不再使用VG时,可用

# vgchange -a n testvg

使之不再可用。

vgchange可用来设置VG的一些参数,如是否可用( -a [y|n]选项)、支持最大逻辑卷数等。

3.5      移除VG

在移除一卷组前应确认卷组中不再有逻辑卷,首先休眠卷组:

# vgchange -a n testvg

然后可用vgremove移除该卷组:

# vgremove testvg

3.6      为VG增加新PV

当卷组空间不足时,可以加入新的物理卷来扩大容量,这时可用命令vgextend,如

# vgextend testvg /dev/hdc1 其中/dev/hdc1是新的PV,当然在这之前,它应使用pvcreate初始化。

3.7      从VG移除PV

在移除PV之前,应确认该PV没用被LV使用,这可用命令pvdisplay查看,如:

# pvdisplay /dev/hda1

--- Physical volume ---

PV Name /dev/hda1

VG Name testvg

PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB]

PV# 1

PV Status available

Allocatable yes (but full)

Cur LV 1

PE Size (KByte) 4096

Total PE 499

Free PE 0

Allocated PE 499

PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7

如这个PV仍在被使用,则应把数据传移到其它PV上。在确认它未被使用后,可用命令vgreduce把它从VG中删除,如:

# vgreduce testvg /dev/hda1

3.8      创建LV

在创建逻辑卷前,应决定LV使用哪些PV,这可用命令vgdisplay与pvdisplay查看当前卷组与PV的使用情况。在已有的卷组上创建逻辑卷使用命令lvcreate,如:

 # lvcreate -L1500 -ntestlv testvg

将在卷组testvg上建立一个1500MB的线性LV,其命名为testlv,对应的块设备为/dev/testvg/testlv。

# lvcreate -i2 -I4 -l100 -nanothertestlv testvg

将在卷组testvg上建立名为anothertestlv的LV,其大小为100LE,采用交错方式存放,交错值为2,块大小为4KB。

如果需要LV使用整个VG,可首先用vgdisplay 查找 Total PE 值,然后在运行lvcreate时指定,如:

# vgdisplay testvg | grep "Total PE"

Total PE 10230

# lvcreate -l 10230 testvg -n mylv

将使用卷组testvg的全部空间创建逻辑卷mylv。

在创建逻辑卷后,就可在其上创建文件系统并使用它。

命令lvcreate的常用方法:

lvcreate [options] -n 逻辑卷名 卷组名 [PV1 ... ]

其中的常用可选项有: "-i Stripes :采用交错(striped)方式创建LV,其中Stripes指卷组中PV的数量。

"-I Stripe_size :采用交错方式时采用的块大小(单位为KB),Stripe_size必须为2的指数:2N ,N=2,3...9。

"-l LEs :指定LV的逻辑块数。

"-L size :指定LV的大小,其后可以用K、M、G表示KB、MB、GB。

"-s :创建一已存在LV的snapshot卷。

"-n name :为LV指定名称。

3.9      删除LV

为删除一个逻辑卷,必须首先从系统卸载其上的文件系统,然后可用lvremove删除,如:

# umount /dev/testvg/testlv

# lvremove /dev/testvg/testlv

lvremove -- do you really want to remove "/dev/testvg/testlv"? [y/n]: y lvremove -- doing automatic backup of volume group "testvg"

lvremove -- logical volume "/dev/testvg/testlv" successfully removed

3.10   LVM操作全流程演示

 

在本节中,将在3SCSI硬盘:/dev/sda/dev/sdb/dev/sdc上按步建立LVM

3.10.1    修改分区格式为lvm分区

fdisk /dev/sda (如果每个lun一个分区,就可以不新建分区,只是修改分区格式)

t 设置分区格式

8e 设置为linux lvm格式

w 保存设置

q 退出分区

3.10.2    准备分区

首先要做的是初始化硬盘,建立PV,这将会删除硬盘上的原有数据。在此,用整个硬盘为PV

# pvcreate /dev/sda

# pvcreate /dev/sdb

# pvcreate /dev/sdc

pvcreate在每个硬盘的起始端建立卷组描述区( volume group descriptor area, VGDA)

3.10.3    创建卷组

利用上面三个PV建立卷组:

# vgcreate test_vg /dev/sda /dev/sdb /dev/sdc/

然后可用vgdisplay 查看/验证卷组的信息:

# vgdisplay

--- Volume Group ---

VG Name test_vg

VG Access read/write

VG Status available/resizable

VG # 1

MAX LV 256

Cur LV 0

Open LV 0

MAX LV Size 255.99 GB

Max PV 256

Cur PV 3

Act PV 3

VG Size 1.45 GB

PE Size 4 MB

Total PE 372

Alloc PE / Size 0 / 0

Free PE / Size 372/ 1.45 GB

VG UUID nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y

其中最重要的前三条要正确,且VG size是以上三个硬盘容量之和。

3.10.4    建立LV

在确定卷组test_vg正确后,就可在其上创建LVLV的大小可在VG大小范围内任意选择,如同在硬盘上分区。

建立线性方式LV

test_vg上建立一个大小为1GB的线性方式LV

# lvcreate –L 1G –n test_lv test_vg

lvcreate -- doing automatic backup of "test_vg"

lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created

建立交错方式LV

test_vg上建立一个大小为1GB的交错方式LV,交错参数为4KB

# lvcreate -i3 -I4 -L1G -ntest_lv test_vg

lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE

lvcreate -- doing automatic backup of "test_vg"

lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created

注意:如果使用 -i2参数,则LV将仅使用test_vg中的两块硬盘。

3.10.5    建立文件系统

LV test_lv创建后,就可在其上建立文件系统,

如,ext2/ext3系统:

# mke2fs /dev/test_vg/test_lv

如,reiserfs

mkreiserfs /dev/test_vg/test_lv

3.10.6    测试文件系统

安装LV

# mount /dev/test_vg/test_lv /mnt

# df

Filesystem 1k-blocks Used Available Use% Mounted on

/dev/hda1 1311552 628824 616104 51% /

/dev/test_vg/test_lv 1040132 20 987276 0% /mnt

则可以通过/mnt访问LV

 

4      纯手工制作流程图大放送

下面的图是在出差期间自己总结的,画的比较质朴,但是透露着画家的艺术气质。。

4.1      磁阵映射到服务器的流程图

每个笼子有15块磁盘,分出14块盘做raid10类的raid group,剩下一块磁盘做Hot Spare盘,当raid group中的某块磁盘坏掉的时候,Hot Spare盘就会自动顶替坏盘,Hot Spare盘是对所有raid group都可用的。

 

无线城市现场用的raid 类型是 raid10,即raid0+raid1的组合,既能快速读写数据,又能保证数据的安全性,其他的RAID类型请自行前往百度学习了解,不在此赘述。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一些你需要知道的Spark知识点: 1. Spark是一个基于内存的分布式计算框架,可以处理大规模数据集。 2. Spark的核心概念是RDD(弹性分布式数据集),它是一个可分区、可并行计算的数据集合。 3. Spark支持多种编程语言,包括Scala、Java、Python和R。 4. Spark可以与多种数据存储系统集成,包括Hadoop HDFS、Cassandra、HBase和Amazon S3等。 5. Spark提供了多种高级API,包括Spark SQL、Spark Streaming和MLlib等,可以用于数据处理、流处理和机器学习等任务。 6. Spark可以在本地模式下运行,也可以在集群模式下运行,支持多种集群管理器,包括Apache Mesos、Hadoop YARN和Standalone等。 7. Spark的性能优于Hadoop MapReduce,因为它可以将数据存储在内存中,从而避免了磁盘I/O的开销。 8. Spark还提供了一些优化技术,包括内存管理、数据分区和任务调度等,可以进一步提高性能。 希望这些知识点对你有所帮助! ### 回答2: 作为一名数据科学家或大数据工程师,掌握分布式计算框架Spark是必不可少的技能之一。Spark具有高效的内存计算能力、易于使用的API、丰富的生态系统等优点,因此它被广泛应用于数据处理、机器学习、图像处理等领域。在掌握Spark的过程中,有一些关键知识点需要牢记。 1. RDD与DataFrame的区别 Spark中最常用的数据结构有两种:RDD和DataFrame。RDD是不可变的分布式数据集,可以被分割并存储在不同的节点上进行处理。DataFrame是一种类似于关系型数据库表的结构,它提供了更高层次的API,可用于数据的查询、筛选和聚合。 2. Lazy Evaluation Spark中的操作具有“惰性求值”的特性,即只有在需要结果时才会实际执行操作。这种特性可以提高Spark的性能,因为它避免了不必要的计算和数据移动。但是,需要注意的是,当我们使用了多个转换操作时,可能会导致Spark在内存中存储所有转换的中间结果,从而导致内存不足的问题。 3. Shuffle的开销 Shuffle是指Spark中需要重新分区数据的过程。Shuffle操作通常会导致网络传输和磁盘IO的开销,并且会使Spark的性能下降。因此,我们应尽量避免过多的Shuffle操作,并且优化Shuffle的过程。 4. Spark调优 对于大规模数据处理任务,Spark的性能和稳定性都十分关键。因此,我们需要对Spark进行调优,以提高它的性能和减少故障。具体来,我们可以通过增加内存分配、调整分区数量、合理设置并发度等方式来优化Spark的性能。 总之,掌握这些Spark的关键知识点有助于我们更好地开发和管理Spark应用程序,并在大数据领域中取得更好的成果。 ### 回答3: 作为目前最流行的大数据处理框架之一,Spark已经成为了大家谈论的热点话题。如果你想要学习关于Spark的知识,以下是你必须知道的Spark知识点。 1. RDD:RDD是Spark中最基本的抽象概念,全称是Resilient Distributed Datasets。RDD是一个容错的、可并行计算的数据集合。在Spark中,所有数据都是以RDD的形式出现的。RDD具有不变性,也就是,RDD一旦被创建,就不可更改。如果需要对RDD进行操作,就需要创建一个新的RDD。 2. 迭代器(Iterator): Spark中的迭代器是一种延迟执行的方式。它允许 Spark 延迟计算,只有到调用 action 操作时才会真正开始计算数据。 3. 数据分区(Data Partitioning):数据分区可以更好的支持并行计算,让计算机更加高效的工作。Spark将数据分解成小块,每块专门分派给一个处理器来处理。分区的数量应该与处理器的数量相同,以充分利用每个处理器。 4. Shuffle:Shuffle是将数据重新分配和重新组合的过程,在Spark中用于在不同的节点之间传递数据。在数据分组、排序、变换等操作时,会频繁的使用shuffle操作。 5. 宽依赖和窄依赖(Wide and Narrow Dependencies):依赖是Spark RDD中的概念,表示与当前RDD对应的其它RDD。一个RDD可能依赖于多个RDD,此时依赖关系称为宽依赖(Wide Dependencies)。如果一个RDD依赖于一个RDD,那么这个依赖关系被称为窄依赖(Narrow Dependencies)。 6. Spark SQL:Spark SQL是一个新的模块,提供了使用结构化数据的一个新的方式。它将Spark的强大的处理引擎与表格数据结构相结合,使得Spark可以更容易地与现有的商业智能工具和数据仓库互操作。 7. Spark Streaming:Spark Streaming是Spark提供的流处理引擎,可以处理实时数据流。Spark Streaming对于数据挖掘,实时监控等有很好的应用场景。 以上就是您需要了解的一些Spark基础知识,当然,Spark这门技术还有很多精妙的理念和玩法,需要您自行探究。如果您想要学习Spark,可以参考Spark文档,同时多动手练习,不断总结经验,培养能独立解决问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值