红帽存储管理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