首页 > 笔记

portmapper在NFS服务启动的时候给每一个NFS服务分配了一个动态的端口,如何才能让NFS client在使用RHEL/Fedora/CentOS linux iptales防火墙时可以正常使用NFS服务呢?

需要打开下面的端口

a] TCP/UDP 111 – RPC 4.0 portmapper

b] TCP/UDP 2049 – NFSD (nfs server)

c] Portmap 静态端口—在/etc/sysconfig/nfs文件中定义的一系列TCP/UDP端口

nfs默认启动的话,很多服务如rpc.mounted,端口都不是固定的,这样不方便在防火墙上进行管理,所以我们需要把每个启动的服务的端口固定下来,需要做的就是编辑/etc/sysconfig/nfs文件。

# vi /etc/sysconfig/nfs

更改下面的配置,将端口分配为一个没被占用的

# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=lockd-port-number
# UDP port rpc.lockd should listen on.
LOCKD_UDPPORT=lockd-port-number
# Port rpc.mountd should listen on.
MOUNTD_PORT=mountd-port-number
# Port rquotad should listen on.
RQUOTAD_PORT=rquotad-port-number
# Port rpc.statd should listen on.
STATD_PORT=statd-port-number
# Outgoing port statd should used. The default is port is random
STATD_OUTGOING_PORT=statd-outgoing-port-numbe

下面是我用于测试的机器上修改的内容

RQUOTAD_PORT=6005
LOCKD_TCPPORT=6004
LOCKD_UDPPORT=6004
MOUNTD_PORT=6002
STATD_PORT=6003
STATD_OUTGOING_PORT=6006

保存退出后就可以重启nfs服务,portmap服务

# service portmap restart
# service nfs restart

下面就是iptables方面的配置了,蚊子这里因为是学习,所以设置的比较严格,下面先说下我的环境

1,两台Server:192.168.211.128(nfs-server),192.168.211.129(nfs-client)
2,nfs-server上只允许nfs,ssh的访问,其余都拒绝

下面是我的iptables的配置

iptables -A INPUT -p tcp -s 192.168.211.0/24 –dport 22 -m state –state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6002 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6003 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6004 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6005 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6006 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6002 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6003 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6004 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6005 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 6006 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 111 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 111 -j ACCEPT
iptables -A INPUT -p tcp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 2049 -j ACCEPT
iptables -A INPUT -p udp -m state –state NEW,ESTABLISHED,RELATED -s 192.168.211.0/24 –dport 2049 -j ACCEPT
iptables -P INPUT DROP

第一条就是允许连接ssh
第二条作用是在启动nfs的时候,nfs-server会通过本地回环接口与portmap进行会话,所以需要允许
最后一条是设置input链的默认策略为drop
中间的就是允许nfs-server相应的端口了

如果在配置iptables的时候有问题可以使用service iptables restart重置,如果没有问题就可以使用service iptables save保存相应的配置,保存的配置文件放在/etc/sysconfig/iptables里。

阅读全文

heartbeat1.x的技术已经比较熟悉了,只能两台主机,只能监控硬件状况,有限的功能确实很局限,对于2.x的技术来讲有了很好的扩展,最高支持16台主机,可以对于资源程序进行监控等等,具体细节可以去heartbeat官网查看,我这里不就在赘述了,只把功能上的实现做个总结。

试验环境:vmware6.0 centos4.4 heartbeat2.1.3 mysql-5.1.28

linux01    ip:192.168.202.128
linux02    ip:192.168.202.129
VIP           ip:192.168.202.110

试验目的:1,linux01上的mysql服务down了,会在linux01上恢复 
                    2,linux01意外断电,vip和mysql服务迁移到linux02上

linux01和linux02上的配置除了ha.cf中ucast的配置要指向另一个节点的网卡ip,其他都是一样的,这里只给出linux01上的配置,另外一台请自行调整。

先是ha.cf的配置

debugfile /var/log/ha-debug
logfacility     local0
keepalive 2
deadtime 15
warntime 10
initdead 20
udpport 694
ucast eth0 192.168.202.129
auto_failback on
node    linux01
node    linux02
ping 192.168.202.2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

crm yes

然后是haresources文件,但在2.x的模式下已经不在使用这个配置了,之所以这里我拿出来使用是,因为heartbeat提供了一个转换工具,可以根据这个文件生成cib.xml文件,所以我这里还是先编辑这个文件,稍后提供转换办法

linux01 192.168.202.110 mysqld

在最后就是authkeys文件,关于authkeys文件里的3中模式随意用哪种都行的,并把权限设置成600

auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!

接下来使用转换软件生成cib.xml文件

/usr/lib/heartbeat/haresources2cib.py haresources

这就就会在/var/lib/heartbeat/crm下生成cib.xml文件了,这样两台机器都准备好后,就可以进行测试了

先在两台机器上启动heartbeat软件,执行/etc/init.d/heartbeat start

可以看到linux01上启动了vip和mysql,02上只是启动了

首先在linux01执行/etc/init.d/mysqld stop命令停止mysql服务,然后查看日志,用tail -f的方式,大概2分钟左右的时候,heartbeat就把mysql服务启动起来了,关于mysql服务的监控在cib.xml中可以配置的,默认的interval="120s"。可自行调整

然后来测试linux01 down机,ip和mysql服务自动切换问题

因为我使用的vmware虚拟机,所以关机非常的方便,直接关电就行了,一是观察linux02上的日志,二是观察进程ip服务,发现很快的vip和mysql服务就可以起来了

对于上面的应用效果,我还发现了两个问题,有可能是我对于2.x的理解不够,接下来我会继续深入研究,我的问题是

1,如果我用kill mysql进程的方法,linux01上mysql怎么也不会再被启动起来,这时可以通过手动删除pid文件的方式让heartbeat来自动启动donw掉的mysql,但同时又出现一个问题,就是如果真因为mysql意外终止,但heartbeat调用的mysqld的lsb脚本是不会判断出来的,所以,mysql服务始终不会启动。
2,heartbeat默认配置是监控自己的机器的资源,当资源故障是先尝试在本机恢复的。所以如果linux01上的mysql服务真的因为什么情况没法继续提供服务,heartbeat是用什么机制将服务和vip都迁移到linux02这台正常的机器上。

阅读全文

最近应用端要配置出防盗链来,早就知道可以通过referer来判断是否是盗链,从而设置防盗链,然后我们开发的人员跟我说了lighttpd的另外有个模块可以来配置出防盗链来,这个模块就是mod_secdownload,这个模块的使用思路是,lighttpd端先配置此模块,设置一个固定的用于加密的字串,比如abc,然后设置一个url前缀,比如/flv/,再设置一个过期时间,比如10s,然后在通过一段php代码,对加密字串,系统时间等进行md5算法加密生成一个字串,这个字串在和url前缀组合生成最终的文件url,这个url会在10s后自动失效,从而达到防盗链的效果。原理就是这些,下面看下实际的例子。

因为需要php的支持,所以fastcgi的配置在这里就一并写出了,至于lighttpd和php的编译安装这里就不在赘述,需要的朋友请去google查询。有一点需要注意的就是php编译的时候需要启用fastcgi模式。

编辑配置文件,找到server.modules处,开启如下两个模块

server.modules = ( ….,"mod_fastcgi", "mod_secdownload",……)

先配置secdownload模块,如下

## secdownload config
secdownload.secret          = "abc"            #设置需要的加密字串
secdownload.document-root   = "/data/wwwroot"  #需要防盗链文件的所在目录   
secdownload.uri-prefix      = "/flv/"          #生成后url的前缀
secdownload.timeout         = 20               #设置过期时间,单位秒    

再来看下fastcgi模式的配置,我个人认为真的是太方便了。

#### fastcgi module
## read fastcgi.txt for more info
## for PHP don’t forget to set cgi.fix_pathinfo = 1 in the php.ini
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "host" => "127.0.0.1",                            #设置fastcgi服务监听的ip
                                   "port" => 9000,                                   #设置fastcgi服务监听的端口
                                   "bin-path" => "/usr/local/php/bin/php-cgi"        #php-cgi所在的路径
                                 )
                               )
                            )

到此,lighttpd上的配置就完毕了,然后看下php程序的写法

<?php

  $secret = "abc";
  $uri_prefix = "/flv/";

  # filename
  # please note file name starts with "/"
  $f = "/123.mp4";

  # current timestamp
  $t = time();

  $t_hex = sprintf("%08x", $t);
  $m = md5($secret.$f.$t_hex);

  # generate link
  $videoUrl = $uri_prefix.$m."/".$t_hex.$f;
?>
这里$videoUrl就应该是最后生成出来的url

现在就可以启动lighttpd去测试了,启动lighttpd后执行ps afx可以看到如下内容,表示启动正常,如果不正常,请参看errorlog来排查错误

 7178 ?        S      0:00 ../sbin/lighttpd -f ../conf/lighttpd.conf
 7179 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7180 ?        S      0:00  |   _ /usr/local/php/bin/php-cgi
 7181 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7182 ?        S      0:00  |   _ /usr/local/php/bin/php-cgi
 7183 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7184 ?        S      0:00  |   _ /usr/local/php/bin/php-cgi
 7185 ?        Ss     0:00  _ /usr/local/php/bin/php-cgi
 7186 ?        S      0:00      _ /usr/local/php/bin/php-cgi

参考资料:

http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSecDownload
http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModFastCGI

阅读全文

moosefs的听说是在昨天群里讨论的时候,网上大概搜了搜,相关的文章还是有一些的。但读官方文档总是个不错的办法。

MooseFS正式的推出是在2008-05-30,到2009-01-28为止,最新的版本是1.5.12。

MFS是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。

MFS的区别特征:

  • 高可用性(数据在不同的服务器上会有多分的拷贝)
  • 只需要通过添加新的服务器或者硬盘就可以做到动态的扩展
  • 可以再一个规定的时期保存执行了删除操作的文件
  • 可以创建文件的快照,保证文件在被使用的时候,整个文件的副本都是一致的

MFS系统的架构

MFS组成包括了三部分:

  • 管理服务器(master),单独的一台服务器,用来管理整个文件系统,存储每个文件的元数据(文件大小,文件属性,文件所在位置的这些信息),包含了所有非规则文件的全部信息,如文件夹,套接字设备,管道设备
  • 数据服务(chunkservers),任何数量的可用的服务器。一个文件会在这些服务器上存储多份。
  • 客户端,任何一种可以支持FUSE的服务器,服务器上会运行mfsmount进程,直接和管理服务器通信,用来接收和修改文件的信息,同时和块服务器交换真实的文件数据

元数据存储在Master的内存中,同时会保存一份在硬盘上(作为临时更新的二进制文件和立即更新的增量日志方式)

数据文件被分成64Mb大小的块,每个块被分散的存储在块服务器的硬盘上,同时块服务器上还会存储其他块服务器上块文件的副本。

客户端只需要mount上MFS就可像操作其他文件系统的文件一样操作MFS中的文件了。操作系统的内核把对文件的操作传递给FUSE模块,这个模块用来和mfsmount进程进行通信。mfsmount进程后续通过网络和管理服务器和数据块服务器进行通信。整个过程对用户来讲是透明的。

在对所有元数据文件。(文件创建,文件删除,读文件夹,读取和更改属性,改变文件大小等等涉及到在MFSMETA上的特殊文件)进行操作的过程中,mfsmount和管理服务器建立通信,然后开始读取和写入数据。数据发送到所有数据服务器中有相关文件块的一台上。在完成写操作之后,管理服务器收到文件长度和最后修改时间的更新信息。

而且,数据服务器之间进行复制通信,保证每个块在不同的块服务器上都有拷贝。

因为文件块存在多个拷贝,所以,任何一台数据服务器不可用都是不会影响到文件的正常访问的。

 

整体来看moosfs,他的设计理念还是很符合gfs的,从架构图来看,整个系统实现起来还是很容易的。不过有一点值得注意的还是,对于master主机来说,这个是一个单点,会存在隐患,在正式环境应用的时候,如何解决这里,是个关键。

官方网站:http://www.moosefs.com/index.html

以上内容简单翻译自:http://www.moosefs.com/pages/mfs.html,不对地方还请指出,本人英文水平有限。

阅读全文

上篇文章只是简单介绍了一下LVM,知道lvm的基本构成是 整块裸硬盘或某个分区->物理卷(PV)->卷组(VG)->逻辑卷(LV),在上层就是把逻辑卷mount到目录下应用了

接下来就进行实操学习,并介绍下每层上的相应命令。
学习环境:vmware5.0 centos4.4 100M硬盘3块

1.物理卷的创建

如果要使用整块硬盘在作为物理卷的话,这块硬盘必须没有分区表信息,需要清除硬盘分区表的信息可以使用下面的命令

dd if=/dev/zero of=/dev/sdx bs=512 count=1

使用pvcreate命了来创建一个块设备做为物理卷。下面的命令把/dev/sdb /dev/sdc初始化用作物理卷

pvcreate /dev/sdb /dev/sdc

下面的命令是把一个分区初始化成一个pv

pvcreate /dev/sdb1
使用lvmdiskscan命令用了查看系统中哪些块设备可以用于作为物理卷
# lvmdiskscan
/dev/ramdisk [ 16.00 MB]
/dev/ram [ 16.00 MB]
/dev/sda1 [ 101.94 MB]
/dev/ram2 [ 16.00 MB]
/dev/sda2 [ 509.88 MB]
/dev/ram3 [ 16.00 MB]
/dev/root [ 5.40 GB]
/dev/ram4 [ 16.00 MB]
/dev/ram5 [ 16.00 MB]
/dev/ram6 [ 16.00 MB]
/dev/ram7 [ 16.00 MB]
/dev/ram8 [ 16.00 MB]
/dev/ram9 [ 16.00 MB]
/dev/ram10 [ 16.00 MB]
/dev/ram11 [ 16.00 MB]
/dev/ram12 [ 16.00 MB]
/dev/ram13 [ 16.00 MB]
/dev/ram14 [ 16.00 MB]
/dev/ram15 [ 16.00 MB]
/dev/sdb [ 102.40 MB] LVM physical volume
/dev/sdc [ 102.40 MB] LVM physical volume
3 disks
16 partitions
2 LVM physical volume whole disks
0 LVM physical volumes
有三个命令用来显示LVM物理卷的属性:pvs,pvdisplay,pvscan
pvs命了用格式化的方式显示了物理卷的信息,每行显示一个物理卷信息。pvs提供了非常详细格式控制参数,以后单独再来说这个命令。
pvdisplay命了非常详细的显示了每个物理卷的信息(如size,extents,volumegroup等等),下面就是一个pvdisplay显示的内容
# pvdisplay
— Physical volume —
PV Name /dev/sdc
VG Name vg1
PV Size 100.00 MB / not usable 0
Allocatable yes
PE Size (KByte) 4096
Total PE 25
Free PE 25
Allocated PE 0
PV UUID PB8TiB-f86q-NZZn-S22h-D35p-o8Zq-qBYeS1
pvscan用来扫描系统中都有哪些pv可用。如下所示
# pvscan
PV /dev/sdc VG vg1 lvm2 [100.00 MB / 100.00 MB free]
PV /dev/sdb VG vg1 lvm2 [100.00 MB / 100.00 MB free]
Total: 2 [200.00 MB] / in use: 2 [200.00 MB] / in no VG: 0 [0 ]
可以在lvm.conf文件中配置相应的过滤规则,让pvscan不扫描定义好规则的pv
当硬盘出现故障或者想删除一个物理卷的时候,可以使用pvchange命令把需要的pv设置成不可分配的状态,命令如下
pvchange -x n /dev/sdc
这样在通过pvdisplay看到这个pv的allocatable的状态就是NO了,如下所示
pvdisplay
— Physical volume —
PV Name /dev/sdc
VG Name vg1
PV Size 100.00 MB / not usable 0
Allocatable NO
PE Size (KByte) 4096
Total PE 25
Free PE 25
Allocated PE 0
PV UUID PB8TiB-f86q-NZZn-S22h-D35p-o8Zq-qBYeS1
使用-x y参数可以恢复pv的可分配状态。
使用pvremove命令来移除一个pv,使用如下
# pvremove /dev/sdc
Labels on physical volume “/dev/sdc” successfully wiped

2,卷组的管理

可以使用vgcreate命令来创建卷组,比如我们现在要创建一个卷组名为vg1,其中包含/dev/sdb /dev/sdc两个pv,如下

# vgcreate vg1 /dev/sdb /dev/sdc
Volume group “vg1” successfully created
当一个卷组创建好之后,它的默认最小扩展空间是4MB,这个扩展空间就是逻辑卷可以增加或减少的最小量。大量的扩展空间并不会对逻辑卷的i/o性能带来影响。
当然,在使用vgcreate创建卷组的时候可以通过-s参数调整一个你认为合适的数值。同样可以使用-p和-l参数来限制物理卷和逻辑卷的数量。
如果已经创建好了一个卷组,现在添加了新的物理卷,可以通过vgextend命令来把这个新的物理卷加入到已经创建好的vg中,如下
#vgextend vg1 /dev/sdd
Volume group “vg1” successfully extended
在物理卷的时候有显示物理卷信息的命令,同样也有现实卷组信息的命令,vgs和vgdisplay。
vgscan这个命令用来显示系统中存在的卷组,其实这个命令主要的作用是用来查找卷组和更行LVM的缓存文件。
vgs和pvs命令一样,通过不同的参数,可以输出定制化的内容
vgdisplay命令通过固定格式显示卷组的详细信息(包括size,extents,物理卷数量等等)。下面是我测试环境的输出
# vgdisplay
— Volume group —
VG Name vg1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 204.00 MB
PE Size 512.00 KB
Total PE 408
Alloc PE / Size 0 / 0
Free PE / Size 408 / 204.00 MB
VG UUID utUPzW-P9up-vbSy-vzt4-Frb6-24Dd-5yhZ2X

vgscan命令在系统中扫描所有被支持的磁盘设备找到LVM的物理卷和卷组。这个过程会创建LVM缓存在/etc/lvm/.cache文件,这个文件主要用来维护当前的LVM设备的清单。

LVM会在以下情况自动运行vgscan命令,系统启动的时候,LVM进行操作的时候(比如执行了vgcreate命令或者当LVM检测到出现了一个不一致的情况时)。当系统的硬件配置被更改的时候,就必须人为手动的执行vgscan命令了,不然就会导致系统不认新的设备,以至于启动的时候不能被加载。

如果要把一个不用的物理卷从一个卷组中移除掉,可以使用vgreduce命令。vgreduce命令会在移除一个或多个物理卷时收缩卷组的容量。在把一个物理卷从一个卷组中移除之前,可以通过pvdisplay这个命令查看这个物理卷有没有被逻辑卷使用,如果物理卷仍被使用就需要使用pvmove命令把数据迁移到其他的物理卷上,然后在使用vgreduce命令将物理卷移除。下面的命令将物理卷/dev/hda1从卷组my_volume_group中移除

# vgreduce my_volume_group
使用vgremove命令可以删除一个不包含逻辑卷的卷组
# vgremove vg1
Volume group “vg1” successfully removed
使用vgsplit命令可以从卷组中分离出一部分物理卷创建一个新的卷组。
有了分离命令,自然就会有合并的命令。那就是vgmerge命令,可以使用这个命令把一个未活动的源卷和一个活动的活着未活动的目标卷合并,合并是有前提条件的,1、两个卷的PE size相同,2、两个卷组中物理和逻辑卷摘要要和目标卷组的限制匹配。
下面看实际的例子
分离卷组-把/dev/sdc从逻辑卷vg1中分离出并创建vgnew组
# vgsplit vg1 vgnew /dev/sdc
Volume group “vgnew” successfully split from “vg1”

把vgnew组合并到vg1组中
# vgmerge vg1 vgnew
Volume group “vgnew” successfully merged into “vg1”

卷组的metadata数据的备份和打包总是会在卷组或逻辑卷配置文件变更的时候自动的创建,当然除非你在lvm.conf文件中禁用了这项功能。默认情况下metadata数据的备份会被存储在/etc/lvm/backup文件中,而metadata打包文件会存储在/etc/lvm/archives文件中。可以认为的执行vgcfgbackup命令来备份metadata到/etc/lvm/backup文件中。
使用vgrename命令可以对于一个存在的卷组改名,比如下面的明白把vg02卷组改名成my_volume_group
#vgrename vg02 my_volume_group
能够移动整个LVM卷组到另外一个系统中,在做这个操作的时候建议使用vgexport和vgimport命令。vgexport命令使一个未激活的卷组对系统不可访问,从而允许你分离卷组中的物理卷。vgimport命令可以使系统再次访问这个卷组。把一个卷组从一个系统迁移到另一个系统可以执行以下几个步骤:
a.确认卷组中的活动卷上的文件没有被用户访问,然后unmount这个逻辑卷。
b.使用vgchange命令加-a n参数讲卷组标记为未激活,这样就阻止了在这个卷组中的任何活动。
c.使用vgexport导出卷组,这样系统就不会对这个卷组访问了,从而可以把这个卷组移走。当导出了卷组之后,再用pvscan命令查询时,物理卷都显示成为在一个导出卷组中,如下
# pvscan
PV /dev/sdb is in exported VG my_volume_group [100.00 MB / 100.00 MB free]
PV /dev/sdc is in exported VG my_volume_group [100.00 MB / 100.00 MB free]
Total: 2 [200.00 MB] / in use: 2 [200.00 MB] / in no VG: 0 [0 ]
这时就可以关机拔硬盘然后插到别的系统上了。
d.把硬盘加到新的系统中后就可以执行vgimport命令来导入卷组了,这样就能使卷组可以被系统访问到了
e.然后使用vgchange命令加上-a y参数激活卷组
f.然后mount到文件系统上就可以使用了。

要创建卷组文件夹和逻辑卷特殊文件可以使用vgmknodes命令。这个命令用来在/dev文件夹中检查被逻辑卷需要的LVM2的特殊文件。这个命令还可以创建任何丢失的特殊文件,并移除不再使用的。

以上内容翻译自redhat LVM Administrator’s Guide文档中chapter4,如有不对之处还望指出,谢谢。

阅读全文

1、逻辑卷(Logical Volumes)

卷管理系统在物理存储上创建了一个虚拟层,用来创建逻辑卷存储。这样就比直接使用物理存储来说提供了更多的灵活的方法。

 逻辑卷提供了存储的虚拟化。使用逻辑卷不在严格要求物理磁盘容量的大小了。另外,硬件存储设备被配置在应用的后端,这样在更改磁盘大小的时候,就不用停止应用或卸载文件系统。这样可以减少运维的成本。

逻辑卷相比直接使用物理存储来讲有以下几个优势

  • 灵活的扩展性
    使用逻辑卷,文件系统可以再多个磁盘上进行扩展,同时你可以把多个磁盘容量或多个分区划入到一个逻辑卷中
  • 可调整大小的存储池
    可以使用简单的命令对逻辑卷的大小进行增减,而不需要从新格式化或从新分区
  • 在线状态下的数据再分配
    快速部署一个新的、适应性更强子存储系统时,可以再系统活动状态移动数据。在磁盘被使用的时候,数据同样可以被分配到磁盘上。
  • 方便设备命名
    逻辑存储卷在用户自定义的组中被管理,这个自定义的组可以随意按照自己喜好命名
  • 磁盘条带化
    可以再两块或更多的硬盘上创建条带化的逻辑卷,用了增加吞吐量
  • 卷镜像
    逻辑卷提供了一个方便的方法来配置数据的镜像
  • 卷快照
    使用逻辑卷,你可以创建设备的快照来实现备份,或者在影响实际数据的情况下测试你需要的变更带来的效果

2、LVM架构一览

从RHEL4开始LVM1就被LVM2替代了,LVM2在1的基础上改进了很多,如

  • 灵活的扩展性
  • 更高效的数据源存储
  • 更好的回复格式
  • 新的ASCII数据源格式
  • 数据源的源自改变
  • 冗余的数据源复制

LVM2除了快照和cluster以外,都完全兼容LVM1。通过vgconvert命令可以方便的把LVM1格式的卷组转换到LVM2格式。

在最下层的物理存储,每个LVM逻辑单元都是一个块设备,可以是一个分区,也可以是整个磁盘。这个设备被作为LVM的物理卷(PV)初始化。

创建一个逻辑卷,要把物理卷先合并到一个卷组(VG)中。这个创建了一个磁盘空间池,在这上LVM逻辑卷就可以被分配了。创建LVM逻辑卷的过程有点类似将磁盘分区的过程。逻辑卷被文件系统和应用程序使用。

上图是LVM逻辑卷组成图

3、在cluster中使用LVM

cluster逻辑卷管理(CLVM)就是把cluster扩展的设置到了LVM上,这种扩展允许cluster中的机器使用LVM来管理共享存储。

当一个逻辑卷正在被配置的时候,CLVM会允许用户在共享存储上配置逻辑卷,但会锁住这个逻辑卷去访问物理存储。CLVM使用由高可用并相对均衡的机构来提供锁服务。

以上资料翻译自redhat的LVM Administrator’s Guide 5.2,本人英语水平有限,不对之处还望指出。谢谢

阅读全文