红帽存储管理1

一、可信任存储池的管理

    存储池是一个存储服务器的集合,当一台服务器开启glusterd服务时,可信任存储池只有它自己本身,那么我们要将其他的服务器加入可信任存储池该怎么加呢?命令# gluster peer probe [server],前提是其他的服务器也必须开启glusterd服务,[Server]可以是ip地址也可以是服务器名,前提是服务器名必须能够被解析。

[root@rhs0 ~]# gluster peer probe rhs1
peer probe: success.
[root@rhs0 ~]# gluster peer probe rhs2
peer probe: success.

    查看存储池状态

[root@rhs0 ~]# gluster peel status
Number of Peers: 2
Hostname: rhs1
Uuid: 149365ef-448e-421f-8971-e81183240c49
State: Peer in Cluster (Connected)
Hostname: rhs2
Uuid: 7a131594-9b15-4e4d-8a50-86ec4126e89c
State: Peer in Cluster (Connected)

    或者可以用一下命令查看存储池中都有哪些服务器

[root@rhs0 ~]# gluster pool list
UUID                                   Hostname        State
149365ef-448e-421f-8971-e81183240c49    rhs1            Connected
7a131594-9b15-4e4d-8a50-86ec4126e89c    rhs2            Connected
db270220-90e7-4368-805e-7c7d39db37c8    localhost       Connected

 

    当然存储池可以加入服务器,也可以剔除服务器,命令如下

    # gluster peer detach [server]

    server是服务器名,前提也是要能够被解析。

[root@rhs0 ~]# gluster peer detach rhs2
peer detach: success
[root@rhs0 ~]# gluster pool list
UUID                                   Hostname        State
149365ef-448e-421f-8971-e81183240c49    rhs1            Connected
db270220-90e7-4368-805e-7c7d39db37c8    localhost       Connected

 

拓展:

    如果要利用存储池创建volume,那么存储池中的所有服务器都必须有RDMA设备(RDMA或者RDMA over TCP)。那到底什么是RDMA设备?

    RDMA(Remote Direct Memory Access)全名是"远程直接数据存取",让计算机可以直接存取其它计算机的内存,而不需要经过处理器耗时的传输。

    RDMA是一种使一台计算机可以直接将数据通过网络传送到另一台计算机内存中的特性,将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响,这项技术通过消除外部存储器复制和文本交换操作,因而能腾出总线空间和CPU周期用于改进应用系统性能,从而减少对带宽和处理器开销的需要,显著降低了时延。

    RDMA是一种网卡技术,采用该技术可以使一台计算机直接将信息放入另一台计算机的内存中。通过最小化处理过程的开销和带宽的需求降低时延。RDMA通过在网卡上将可靠传输协议固化于硬件,以及支持零复制网络技术和内核内存旁路技术这两种途径来达到这一目标。(拓展资料来源于百度文库   http://wenku.baidu.com/link?url=vSklCvlJfBUTTDaYq7707SghZt7WB1z_VozGaD0HdvNYTHeB16JX58kYmmtGxzEFZBLvBH7EBuZvZCmzMShOJgxu7I2VvEvMmZM4BPf-TAC)

 

二、brick的创建与管理

    Brick是红帽存储的基本单元,是服务器提供存储服务的物理空间,是真正的数据存储的地方,一台服务器上可以创建许多brick,但是前提是要控制宕机产生的数据丢失的风险。

    创建brick的方法和创建逻辑卷的方法基本相同。

    之前我们搭建红帽存储学习环境的时候创建了一个逻辑分区/dev/vda5(见第一篇博客:环境搭建)

Device Boot      Start         End      Blocks  Id  System
/dev/vda1  *           3         506      253952  83  Linux
Partition 1 does not end on cylinderboundary.
/dev/vda2             506        6602    3072000   83  Linux
Partition 2 does not end on cylinderboundary.
/dev/vda3            6602        7618      512000  82  Linux swap / Solaris
Partition 3 does not end on cylinderboundary.
/dev/vda4            7618       20805    6646744    5  Extended
/dev/vda5            7618       20805    6646712+  8e  Linux LVM

     创建pv(phsical volume物理卷)

[root@rhs0 ~]#pvcreate /dev/vda5    (这里还有个选项的,以后再详细讲)

    创建vg(volume group卷组)     

[root@rhs0 ~]#vgcreate vg_bricks /dev/vda5  (这里也有个选项的,也以后再讲)

    接下来我们查看vg

[root@rhs0 ~]# vgs
 VG        #PV #LV #SN Attr   VSize VFree
 vg_bricks   1   0   0wz--n- 6.34g 6.34g

    下面我们就可以在vg中创建brick了

    创建瘦池(thinly pool)

[root@rhs0 ~]# lvcreate -L 1G -T vg_bricks/thinlypool (–T:瘦池thinlypool为瘦池的名字)
 Logical volume "lvol0" created
 Logical volume "thinlypool" created

    在瘦池中创建名为brick0的brick

[root@rhs0 ~]# lvcreate -V 1G -T vg_bricks/thinlypool -n brick0   (-n:名字)
 Logical volume "brick0" created

    查看lvs

[root@rhs0 ~]# lvs
 LV         VG        Attr       LSize Pool       Origin Data%  Move Log Cpy%Sync Convert
 brick0     vg_bricks Vwi-a-tz-- 1.00gthinlypool          0.00                         
 thinlypool  vg_bricks twi-a-tz--1.00g                   0.00

 

拓展:

    thinly-provisioned LVs是在rhel6.3中作为技术预览引入,在rhel6.5和rhel7中全部支持的lvm技术

工作原理:

    在创建Thin“瘦”卷时,预分配一个虚拟的逻辑卷容量大小,而只是在实际写入数据时才分配物理空间给这个卷。这样我们可以轻易的创建出总逻辑容量超出物理磁盘空间的多个“精简卷”,而无须为将来可能达到的数据量提前“买单”。在应用产生的数据确实需要增加驱动器时,我们也可以灵活地在线调整卷的大小。

    Thin provisioned的功能。Thin Provisioned的最大特点在于可以对存储资源进行按需动态分配,即对存储进行了虚拟化管理。例如,某位用户向服务器管理员请求分配10TB的资源。虽然可能确实需要10TB的物理存储容量,但根据当前使用情况,分配2TB就已足够。因此,系统管理员准备2TB的物理存储,并给服务器分配10TB的虚拟卷。服务器即可基于仅占虚拟卷容量1/5的现有物理磁盘池开始运行。这样的“始于小”方案能够实现更高效地利用存储容量。

    在标准的逻辑卷中磁盘空间在创建时就会占用卷组的空间,但是在瘦(thin)卷中只有在写入时才会占用存储池"thinpoolLV"中的空间。一个thin逻辑卷创建前必须创建thinpoolLV,一个thinpoolLV由两部分组成:一个大的dataLV(数据卷)用来储存数据块,和一个metadateLV(元数据卷)。metadata中记录了thin卷中每个块数据的所属关系。(说简单点就是metadata中储存索引,data中储存真实数据,当你访问数据时,先通过索引再访问数据,因为你每次首先访问的不是真实数据,所有就像C语言中链表一样,理论上储存的数据可以无限大,并且动态可调)(拓展资料来源于百度文库http://wenku.baidu.com/link?url=iEAKTAIj4Iw8EE5nu16fUaYk7oNilxV203CDyWPKHaQpV7Tnf03H2nXKYbSAHszP7Og0F8xeVwxQofm1dDYc7tkbO80Aaz9kO7aiIblRTu_)

 

    关于瘦池我在这里演示一个例子

    创建一个1G的瘦池,在瘦池里面可以创建一个远大于1G的brick

[root@rhs0 ~]# lvcreate -L 1G -T vg_bricks/spool
  Logical volume "lvol0"created
  Logical volume "spool"created
[root@rhs0 ~]# lvcreate -V 2G -T vg_bricks/spool -n brick0
  Logical volume "brick0"created
[root@rhs0 ~]# lvs
  LV     VG       Attr       LSize Pool  Origin Data% Move Log Cpy%Sync Convert
  brick0 vg_bricks Vwi-a-tz-- 2.00g spool          0.00                         
  spool  vg_bricks twi-a-tz-- 1.00g                0.00

 

 

    brick创建后要进行格式化,并挂载在本地

[root@rhs0 ~]# mkfs.xfs -i size=512 /dev/vg_bricks/brick0
meta-data=/dev/vg_bricks/brick0  isize=512   agcount=8, agsize=32768 blks
        =                      sectsz=512   attr=2, projid32bit=0
data    =                      bsize=4096   blocks=262144,imaxpct=25
        =                       sunit=0      swidth=0 blks
naming  =version 2             bsize=4096   ascii-ci=0
log     =internal log          bsize=4096   blocks=2560,version=2
        =                      sectsz=512   sunit=0 blks,lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

    这里有一个选项-i,表示inode size必须为512字节

    创建挂载点

[root@rhs0 ~]# mkdir /bricks/brick0 -p

    必须设置开机自动挂载

[root@rhs0 ~]# echo"/dev/vg_bricks/brick0 /bricks/brick0 xfs defaults 0 0" >>/etc/fstab
[root@rhs0 ~]# mount –a
[root@rhs0 ~]# df -Th
Filesystem           Type   Size Used Avail Use% Mounted on
/dev/vda2            ext4   2.9G 1.6G  1.2G  58% /
tmpfs                tmpfs  499M    0  499M   0% /dev/shm
/dev/vda1            ext4   241M  30M  199M  13% /boot
/dev/mapper/vg_bricks-brick0
                     xfs   1014M  33M  982M   4% /bricks/brick0

    我们的brick就已经做好了

    红帽存储管理服务器3之前的版本volume是直接使用挂载位置/bricks/brick0,而最新的版本是必须要在挂载目录/bricks/brick0下创建一个或者多个子目录,volume可使用其中任何一个子目录,所以在这里还要在/bricks/brick0下面创建一个子目录,这里取名为brick

[root@rhs0 ~]# mkdir /bricks/brick0/brick

 

为了以后操作方便快捷,在这里我把创建brick写成了一个脚本,方便以后操作

[root@rhs0 ~]# cat createbricks.sh
#!/bin/bash
lvcreate -L 1G -Tvg_bricks/thinlypool_"$1";
lvcreate -V 1G -Tvg_bricks/thinlypool_"$1" -n brick"$1";
mkfs.xfs -i size=512/dev/vg_bricks/brick"$1" -f;
mkdir /bricks/brick"$1" -p;
echo "/dev/vg_bricks/brick"$1"/bricks/brick"$1" xfs defaults 0 0" >> /etc/fstab;
mount -a;
mkdir /bricks/brick"$1"/brick;
[root@rhs0 ~]# chmod a+x createbricks.sh

然后发布下去

[root@rhs0 ~]# ./distributefiles.sh /root/createbricks.sh /root/createbricks.sh

Rhs0里面的brick编号就是1,2,3…

Rhs1里面的brick编号就是11,12,13…

Rhs2里面的brick编号就是21,22,23…


脚本用法就是#./createbricks.sh [数字]例如 

[root@rhs0~]# ./createbricks.sh 1
 Logical volume "lvol0" created
 Logical volume "thinlypool_1" created
 Logical volume "brick1" created
meta-data=/dev/vg_bricks/brick1  isize=512   agcount=8, agsize=32768 blks
        =                      sectsz=512   attr=2, projid32bit=0
data    =                      bsize=4096   blocks=262144,imaxpct=25
        =                      sunit=0      swidth=0 blks
naming  =version 2              bsize=4096   ascii-ci=0
log     =internal log          bsize=4096   blocks=2560,version=2
        =                      sectsz=512   sunit=0 blks,lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@rhs0 ~]# df -Th
Filesystem           Type   Size Used Avail Use% Mounted on
/dev/vda2            ext4   2.9G 1.6G  1.2G  58% /
tmpfs                tmpfs  499M    0  499M   0% /dev/shm
/dev/vda1            ext4   241M  30M  199M  13% /boot
/dev/mapper/vg_bricks-brick1
                     xfs   1014M  33M  982M   4% /bricks/brick1

 

    那么移除brick的方法和移除逻辑卷的方法一样

    第一步,先卸载

[root@rhs0 bricks]# umount /bricks/brick1

    第二步,删除/etc/fstab中的条目

    第三步,删除创建的挂载点

[root@rhs0 bricks]# rm -rf /bricks/brick1

    第四步,删除逻辑卷

[root@rhs0 bricks]# lvremove vg_bricks