linux存储

存储
 
Linux存储模式:
 应用程序数据
 虚拟文件系统 (/dev/sda)
 文件系统驱动 (ext3,ext4,vfat)
 内核驱动(硬件驱动)
 硬件


存储介质:
 ide (并口, ata, pata)
 sata
 scsi
 sas (串口scsi硬盘)
 固态硬盘 (随机读写性能非常好)
 flash card (随机读写性能非常好)


存储的分类
 DAS(直连存储)
 
 集中式存储
  NAS
   nfs,cifs,第三方协议
   操作最小单位是文件
   适合cpu密集型的应用: web应用(php,jsp)
  SAN (Storage Area Network)
   操作最小单位是块 
    
   适合IO密集型: 大型数据库
  gnbd,IpSAN(iscsi) 

 分布式存储
  mfs
  tfs 
  适合:存放随机读写的数据,例如:很多大小不一的图片,需要使用海量的存储空间,无限量地扩容。

 


一、Raid磁盘阵列
 
 Raid0 :
  条带化
  至少需要2块原始设备。
  提升数据存取效率。
  没有提供数据冗余。
  不能坏掉任意一个硬盘
 Raid1 :
  至少需要2块原始设备。
  镜像raid,每个设备存放的数据都是一样的。
  写的效率的没有提高,读取的效率提高。
  提供了数据冗余。
  只要剩下一个健康的设备,数据都可以读写。

 Raid5 :
  至少需要3个原设设备。
  提供数据冗余
  提高数据的读写效率。
  只能坏掉任意一个设备。

 Raid10 :
  至少需要4个原始设备。
  既提高存取效率也提供的数据冗余。

 

系统会选择raid1
数据库一般选择:raid10,raid5


软件构建raid:
 mdadm

 

实现逻辑卷管理
 
 物理卷pv(散户的钱):
  可以存放数据的原始设备,是直接提供容量的设备,这些设备可以是分区,硬盘,可以raid设备等等。这些设备都是经过处理,含有lvm的元数据。

 卷组vg(银行):
  就是由多个pv组成的存储池。

 逻辑卷lv(贷款):
  在卷组分出来的,最用用于操作,存放数据的设备对象。


 特点:
  轻松扩容,条带化,镜像,快照

 

盘片  磁盘  分区

pv    lv
 ----> VG 
pv    lv

 


 应用程序数据
 虚拟文件系统 (/dev/sda) <--- lv
 文件系统驱动 (ext3,ext4,vfat)
 内核驱动(硬件驱动)
 硬件

 


例子1:
 建立3个pv,组成一个VG,然后创建一个lv


1、创建pv

pvcreate
pvs
pvdisplay

2、建立vg
# vgcreate mysqlvg /dev/sda{7,8}
  Volume group "mysqlvg" successfully created


# vgs
  VG      #PV #LV #SN Attr   VSize VFree
  mysqlvg   2   0   0 wz--n- 3.83G 3.83G

# vgextend mysqlvg /dev/sda9
  Volume group "mysqlvg" successfully extended

3、创建lv
# lvcreate -L 500M -n mysqldata mysqlvg
  Logical volume "mysqldata" created

 

例子2:对逻辑卷进行裁减容量,减少200M空间

 

 在裁减容量之前,先存放100M的数据。

前提:有足够多的剩余空闲空间才能裁减

1、取消挂载

2、文件系统检查
# fsck -f /dev/mysqlvg/mysqldata

3、调整文件系统的容量
# resize2fs /dev/mysqlvg/mysqldata  300M

4、调整逻辑卷的容量
# lvreduce -L 300M /dev/mysqlvg/mysqldata

# fsck -f /dev/mysqlvg/mysqldata 《--建议


例子3:实现条带化
# lvcreate -n webdata -L 300M -i 2  mysqlvg
 -i 2 实现条带化,涉及两个原始设备(pv)。


验证数据是同时写到两个原始设备
# iostat -x -d sda7 sda8 sda9 2


例子4:实现镜像逻辑卷。

 至少需要3个以上的物理卷。两个用于镜像,一个用于日志。


# lvcreate -n webroot -L 300M -m 1 mysqlvg
 用一个物理卷实现镜像数据的保存。
 
 1个用于存放数据,另一个镜像数据,第三个用于写日志。

# lvs
  LV        VG      Attr   LSize   Origin Snap%  Move Log          Copy%  Convert
  mysqldata mysqlvg -wi-a- 300.00M                                              
  webdata   mysqlvg -wi-a- 304.00M                                              
  webroot   mysqlvg mwi-a- 300.00M                    webroot_mlog 100.00       
     ^^


验证操作:
 1、保存一些数据
 2、破坏其中一个物理卷。
  # dd if=/dev/zero of=/dev/sda8
  或者
  # mkfs.ext3 /dev/sda8

 # pvs  检测出有物理卷被损坏。

 3、验证数据是否可以继续访问。

# vgreduce  --removemissing --force mysqlvg
....
 WARNING: Bad device removed from mirror volume, mysqlvg/webroot
  WARNING: Mirror volume, mysqlvg/webroot converted to linear due to device failure.
  Wrote out consistent volume group mysqlvg


输入以下指令,如果没有报错,一般就是转换成功,把原本镜像逻辑卷转换成普通的逻辑卷。
# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sda7  mysqlvg lvm2 a-   1.91G 1.62G
  /dev/sda9  mysqlvg lvm2 a-   1.91G 1.62G

# vgs
  VG      #PV #LV #SN Attr   VSize VFree
  mysqlvg   2   2   0 wz--n- 3.83G 3.24G


 

思考:如果损坏逻辑卷修复好了,如何把逻辑卷恢复到镜像逻辑卷?

# lvconvert

 

例子5:逻辑卷的快照
 作用:一般用于逻辑卷的数据备份。往往用在mysql数据库的快速备份。


 注意:不支持对镜像逻辑卷作快照

# lvcreate -n mysqldata-sp -L 100M -s /dev/mysqlvg/mysqldata
  Logical volume "mysqldata-sp" created
 -s /dev/mysqlvg/mysqldata 针对 mysqldata原始卷创建快照卷,快照卷叫做mysqldata-sp,在它的生命周期里,只原始卷发生不超过100M的数据变更。

 创建所需时间,取决于原始卷的元数据的大小。因为创建快照卷仅仅是做元数据的拷贝。

验证:
 分别挂载原始卷和快照卷
 然后验证两个卷看到的数据都是一样
 对原始卷的数据进行修改,验证快照卷的数据是没有发生改变。

 


例子6:使用快照卷实现对mysql的在线热备。


前提:mysql的数据库是保存在逻辑卷。

1、如果数据库存在myisam存储引擎的表,建议登录到mysql,然后进行短期的所表操作。
一般在高并发环境下去操作。

mysql> flush tables with read lock;
mysql> flush logs; // mysql会新建一个二进制日志文件,把以后日志都记录到新的日志文件。


mysqld-bin.000006 <--- 该文件以及编号比它小的文件包含所表之前的所有数据变更。
mysqld-bin.000007 <-- 新的

2、建立快照卷。
思考:快照卷到底需要多少空间?
 需要考虑备份所花的时间,在这段时间内,估算一般会有多少数据发生变更。


3、解锁
mysql > unlock tables;


4、挂载快照卷,然后备份数据。
 rsync,cp ,scp ,tar 等等。

5、取消挂载,删除快照卷。

lvremove

注意:
 1、自己设计验证步骤。
 2、备份的时候,别忘记了备份二进制日志文件。


写一个脚本,要求每天进行一次快照在线全备。
mysql_spbackup-v2.sh  支持增量备份
 ./mysql_spbackup-v2.sh  --incback  <---增量备份的参数

全备:
锁表
刷新日志,会产生最新的一个日志文件000007
记录当前二进制日志文件日志状态(全备之前,数据所处的状态对应的二进制日志文件000007)
创建快照卷
...
开始备份,备份所有文件


增量备份:
锁表
记录当前二进制日志文件日志状态(全备之前,数据所处的状态对应的二进制日志文件000012)
刷新日志 000013
创建快照卷
...
只备份 000007 - 000012  的二进制日志文件

 

如果只有一台数据库服务器,要求尽可能减少备份时候的影响,推荐使用快照备份,前提是数据必须放在逻辑卷上。

 

 

如果是大规模的数据和是很多数据库服务器,而且是做了主从,推荐使用:
xtrabackup,meb,用于对从服务器的备份,这样不影响其他数据库的正常使用。

 

 

===============================
iscsi
gnbd

 

你可能感兴趣的:(linux存储)