学习情境3 系统维护管理
学习情境3.1 Linux核心管理与定制
3.1.1 学习要点
1.知识点:理解内核功能的配置选项,能根据任务需求生成专用内核
2.技能点:掌握内核与模块的编译安装步骤,能使用新内核启动机器
3.1.2 任务描述
升级自己系统的内核,要求支持本机的千兆网卡设备,支持4G以上内存,支持NTFS文件系统,支持本地的硬件设备,比如CDROM。
3.1.3 相关知识
1 内核的概念
内核是操作系统最基本的部分,如图3.1.1所示。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁、统一的接口,使程序设计更为简单。
严格地说,内核并不是计算机系统中必要的组成部分。程序可以直接地被调入计算机中执行,这样的设计说明了设计者不希望提供任何硬件抽象和操作系统的支持,它常见于早期计算机系统的设计中。最终,一些辅助性程序,例如程序加载器和调试器,被设计到机器核心当中,或者固化在只读存储器里。这些变化发生时,操作系统内核的概念就渐渐明晰起来了。
内核是一个操作系统的核心,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
Linux内核以独占的方式执行最底层任务,保证系统正常运行,协调多个并发进程,管理进程使用的内存,使它们相互之间不产生冲突,满足进程访问磁盘的请求等等。
图3.1.1 内核结构
2.为什么要升级内核
现有内核中会不断发现漏洞,需要打补丁后重新编译内核,以便系统能够更加安全的运行。
新的内核版本通常会带来用户所需要的新功能。
新的内核版本会支持较新的硬件设备正常工作。
正确地为主机配置个性化的内核会使系统运行得更加快速、稳定。
3.内核版本号
由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux内核有两种:稳定的和处于开发中的。稳定内核具有工业级强度,可以广泛的部署和应用。
Linux通过内核的命名机制来区分内核是稳定的还是处于开发中的。这种机制使用三个“.”分隔的数字来表示不同内核。第一数字叫主版本号,第二个叫次版本号,第三个叫修订版本号。三个数字组成的版本号如果是偶数,那么内核就是稳定的,如果是奇数,则表示内核是处于开发中。如版本号2.6.0表示是一个稳定的。头两个数字在一起描述了内核的系列。
4.安装Linux内核源代码
Linux内核源代码以打包的形式提供,rpm和bz2两种格式的源码包的安装方法不同。
安装Red Hat Linux中的RPM内核源码包
#rpm-ivh kernel-source-2.6.27-8.i386.rpm
安装网络下载的内核源码包
#tar zxvf Linux-2.6.27.tar.gz
(1)配置内核前的准备工作
#cd/usr/src/kernels/Linux-2.6.27
进入内核源码目录后,才能够正确执行所有的内核配置、编译命令。
#makemrproper
在每次配置并重新编译内核前需要先执行“makemrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。
(2)内核模块的概念
内核模块简称模块,是一段可执行的程序,但是它可以被动态加载到内核中,并成为内核的一部分。
加载到内核里的模块具有与内核一样的权力,可以访问任何内核中的数据结构。
(3)内核的配置界面
文本交互配置界面
#make config
文本窗口配置界面(如图3.1.2所示):
#makemenuconfig
图3.1.2 文本窗口配置界面
图形窗口配置界面(如图3.1.3所示):
#make xconfig
图3.1.3 图形窗口配置界面
配置完成后保存退出,会根据原有配置文件自动生成新的配置文件.config。
5.内核功能的配置方法
图3.1.3中的圆中点是编译成可以随时加入的模块(以下简称M),方块中一勾是编译进入内核(以下简称Y),空就是不要(简称N)。
Y 配置某功能编译进内核。
M 配置某功能作为模块编译。
N 配置不使用某功能(既不编译进内核,也不作为模块编译)。
(1)可装载模块支持(如图3.1.4所示)
在通常的Linux系统中都需要对该项进行支持,否则内核将不能使用内核模块。
图3.1.4 可装载模块配置界面
(2)内核配置项———处理器(如图3.1.5所示)
图3.1.5 处理器配置界面
(3)内核配置项———常规设置(如图3.1.6所示)
图3.1.6 内核配置界面
(4)内核配置项———网络设置(如图3.1.7所示)
图3.1.7 网络设置界面
在完成对内核的配置后,选择“Save and Exit”按钮保存并退出配置界面。
注:具体内核编译配置选项可参考金步国先生翻译的资料《内核编译配置选项》
网址http://lamp.Linux.gov.cn/Linux/kernel_options.html
6.内核与模块的编译、安装步骤
make: 编译。
makemodules:编译内核模块。
makemodules_install: 安装内核模块。
make install: 安装内核。
GRUB引导配置(如图3.1.8所示):
内核安装过程会对在GRUB启动引导器的配置文件“grub.conf”进行自动修改,添加对新内核的引导。
图3.1.8 GRUB引导配置
如图3.1.8所示是新内核安装完成后,在GRUB开机管理文件/boot/grub/grub.conf文件中新增加的一个内核引导菜单。
使用新内核启动:
#reboot
重新启动系统,并选择新内核进行引导。
3.1.4 任务实施
升级自己系统的内核,要求支持本机的千兆网卡设备,支持4G以上内存,支持NTFS文件系统,支持本地的硬件设备,比如CDROM。
任务步骤如下:
1.下载新kernel
(1)从http://www.kernel.org下载最新的kernel文件Linux-2.6.27.tar.gz到自己的Linux服务器
(2)解压kernel
#cd/usr/src/kernels
#tar xvzf Linux-2.6.27.tar.gz
2.编译配置内核功能选项
在控制台上登陆gnome的图形界面:
#cd/usr/src/kernels/Linux-2.6.27
#make xconfig
支持本机的千兆网卡设备
Device Drivers(设备驱动程序)→Network device support(网络设备)→Ethernet(1000 Mbit)(目前已成装机主流的1000M网卡)
选择自己本机系统的千兆网卡设备,比如sis191gigabit类型,用鼠标勾上圆点,加到内核模块中,如图3.1.9所示。
图3.1.9 千兆网卡设备配置界面
支持4G以上内存
Processor type and features(中央处理器(CPU)类型及特性)→High Memory Support,最高内存支持,总内存小于等于1G的选“off”,大于4G的选“64G”,如果内存大于4G,选择PAE(物理地址扩展)支持(如图3.1.10所示)。
图3.1.10 高内存支持配置界面
支持NTFS文件系统
File systems(文件系统)→DOS/FAT/NT Filesystems(DOS/Windows的文件系统)→NTFS file system support,用鼠标勾上圆点,加到内核模块中,如图3.1.11所示。
图3.1.11 NTFS文件系统支持配置界面
支持本地的硬件设备cdrom
(1)Device Drivers(设备驱动程序)→Block devices(块设备)→Packetwriting on CD/DVD media(CD/DVD刻录支持),用鼠标勾上圆点,加到内核模块中,如图3.1.12所示。
Enable write caching选项:为CD-R/W设备启用写入缓冲。
图3.1.12 CD/DVD支持配置界面
(2)Device Drivers(设备驱动程序)→ATA/ATAPI/MFM/RLL support(通常是IDE硬盘和ATAPI光驱,纯SCSI系统且不使用这些接口可以不选)→Include IDE/ATAPICDROM support(有IDE光驱的就选),用鼠标勾上圆点,加到内核模块中,如图3.1.13所示。
图3.1.13 IDE接口光驱支持配置界面
完成配置后保存退出
#make
编译时间根据自己的硬件环境一般20分钟左右。
3.模块的编译与安装
#makemodules
#makemodules_install
新的模块存放在/lib/modules/2.6.27目录,2.6.27是新内核的版本号。
4.内核的安装
#make install
这个是安装内核的过程。
5.grub开机菜单的管理
查看/boot/grub/grub.conf开机管理配置文件
#cat/boot/grub/grub.conf
default=0//默认启动第num+1行选项,也就说default=0,则默认启动菜单第1行的操作系统
timeout=5//设置在5秒之后引导默认的操作系统,如果设成-1,则GRUB会一直等待直到用户选择一个选项为止
splashimage=(hd0,1)/boot/grub/splash.xpm.gz//指定启动菜单的背景文件(xpm图像或其gzip)压缩文件
Hiddenmenu//隐藏启动菜单
title RedHat Enterprise Linux Server(2.6.27)//后面的字符就是在菜单项上所看见的选项
root(hd0,1)//设置GRUB的根设备(root)为Linux内核所在分区。hd0是指第一个硬盘(主硬盘),(hd0,1)是指第一个硬盘的第二个分区
kernel/boot/vmlinuz-2.6.27 ro root=LABEL=/rhgb quiet//指出Linux内核文件的路径在/boot/vmlinuz-2.6.27中,root=/dev/hda2是指把第一个硬盘的第二个分区作为根挂载点
initrd/boot/initrd-2.6.27.img//加载镜像文件,ramdisk是一种基于内存的虚拟文件系统,通常用于放置内核的中间数据。而initrd全称为“boot loader initialized RAM disk”,也就是由启动加载器所初始化的RamDisk设备,它的作用是完善内核的模块机制。只有把ext3的支持作为模块编译并且打开scsi支持时才需要initrd-2.6.27.img
title Red Hat Enterprise Linux Server(2.6.18-92.el5PAE)
root(hd0,1)
kernel/boot/vmlinuz-2.6.18-92.el5PAE ro root=LABEL=/rhgb quiet initrd/boot/initrd-2.6.18-92.el5PAE.img title windows
rootnoverify(hd0,0)//设置Grub的根设备(root)为Windows系统所在分区,但不加载文件系统。root(hd0,0)是指第一个硬盘上的第一个分区
chainloader+1//调用Windows分区的引导器引导Windows系统灰色的部分是kernel自动增加的部分。
3.1.5 考核要点
表3.1.1 《Linux核心管理与定制》考核标准
3.1.6 能力拓展
升级自己系统的内核,要求
(1)支持本机的千兆网卡设备
(2)支持4G以上内存
(3)支持NTFS文件系统
(4)支持本地的硬件设备,比如CDROM
学习情境3.2 RAID磁盘阵列与LVM逻辑卷的管理应用
3.2.1 学习要点
1.知识点:熟悉RAID磁盘阵列的工作方式,熟悉LVM逻辑卷的实现原理
2.能力点:掌握Linux下Software RAID的实现方法,掌握增加/修改/删除卷组逻辑卷的实现方法
3.2.2 任务描述
(1)创建三个大小为100M的分区,分区类型为Linux raid auto。创建RAID5磁盘阵列,RAID5格式化为ext3分区。标记出一坏的RAID设备并且移出(crash)。添加一RAID设备到现有的RAID5并移出现有的RAID5设备。
(2)创建三个大小为100M的分区,分区类型为Linux LVM。创建卷组,卷名为ora_vg,卷组由前两个分区创建的物理卷构成。创建逻辑卷,卷名为ora_lv,大小为50M。对逻辑卷进行在线扩容100M。再对逻辑卷进行在线扩容100M。最后分别移出逻辑卷、卷组、物理卷。
3.2.3 相关知识
1.RAID的技术规范
RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。冗余磁盘阵列技术诞生于1987年,由美国加州大学伯克利分校提出。
RAID磁盘阵列(Redundant Array of Independent Disks)
简单地解释,就是将N个硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单个大容量的硬盘使用,其特色是N个硬盘同时读取速度加快及提供容错性Fault Tolerant,所以RAID是当成平时主要访问数据的Storage不是Backup Solution。
过去RAID一直是高档服务器才有缘享用,一直作为高档SCSI硬盘配套技术应用。21世纪初来随着技术的发展和产品成本的不断下降,IDE硬盘性能有了很大提升,加之RAID芯片的普及,使得RAID也逐渐在个人电脑上得到应用。
2.磁盘阵列的优点
RAID的采用为存储系统(或者服务器的内置存储)带来巨大利益,其中提高传输速率和提供容错功能是最大的优点。
RAID通过同时使用多个磁盘,提高了传输速率。RAID通过在多个磁盘上同时存储和读取数据来大幅提高存储系统的数据吞吐量(Throughput)。在RAID中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个磁盘驱动器几倍、几十倍甚至上百倍的速率。这也是RAID最初想要解决的问题。因为当时CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。RAID最后成功了。
通过数据校验,RAID可以提供容错功能。这是使用RAID的第二个原因,因为普通磁盘驱动器无法提供容错功能,如果不包括写在磁盘上的CRC(循环冗余校验)码的话。RAID容错是建立在每个磁盘驱动器的硬件容错功能之上的,所以它提供更高的安全性。在很多RAID模式中都有较为完备的相互校验/恢复的措施,甚至是直接相互的镜像备份,从而大大提高了RAID系统的容错度,提高了系统的稳定冗余性。
图3.2.1 磁盘组结构
图3.2.1中数据采用(Striping)分块技术,就是对主机请求读/写的数据进行分块,使之分布于多台磁盘机上。数据A分成A0,A1,…,4N个数据块,分布在4个磁盘上。
3.RAID技术的实现
(1)RAID0无差错控制的带区组
要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。如果刚好所需要的数据在不同的驱动器上效率最好。它不需要计算校验码,实现容易。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其他盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。如果用户进行图像(包括动画)编辑和其他要求传输比较大的场合使用RAID0比较合适。同时,RAID可以提高数据传输速率,比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取。那么读取同样文件的时间被缩短为原来的1/2。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
RAID 0系统的工作原理,如图3.2.2所示。
图3.2.2 RAID0工作原理
图3.2.3 RAID1工作原理
(2)RAID1镜像结构
对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜像盘进行写操作。通过图3.2.3也可以看到必须有两个驱动器。如果在一组盘出现问题时,可以使用镜像,提高系统的容错能力。它比较容易设计和实现。每读一次盘只能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率相同。因为RAID1的校验十分完备,因此对系统的处理能力有很大的影响,通常的RAID功能由软件实现,而这样的实现方法在服务器负载比较重的时候会大大影响服务器效率。当系统需要极高的可靠性时,如进行数据统计,那么使用RAID1比较合适。而且RAID1技术支持“热替换”,即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
(3)RAID2带海明码校验
从概念上讲,RAID2同RAID3类似,两者都是将数据条块化分布于不同的硬盘上,条块单位为位或字节。然而RAID2使用一定的编码技术来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID2技术实施更复杂。因此,在商业环境中很少使用。
(4)RAID3带奇偶校验码的并行传送
这种校验码与RAID2不同,只能查错不能纠错。它访问数据时一次处理一个带区,这样可以提高读取和写入速度,它像RAID0一样以并行的方式来存放数,但速度没有RAID0快。校验码在写入数据时产生并保存在另一个磁盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高,因为校验位比较少,因此计算时间相对而言比较少。用软件实现RAID控制将是十分困难的,控制器的实现也不是很容易。它主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID2,RAID3使用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据。如果奇偶盘失效,则不影响数据使用。RAID3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。利用单独的校验盘来保护数据虽然没有镜像的安全性高,但是硬盘利用率得到了很大的提高,为n-1。
图3.2.4 RAID3工作原理
如图3.2.4所示,数据A分成4个块A0,A1,A2,A3,分布在4个磁盘机上,而校验码放在单独的效验盘上。
(5)RAID4带奇偶校验码的独立磁盘结构
RAID4和RAID3很像,不同的是,它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。在图上可以这么看,RAID3是一次一横条,而RAID4一次一竖条。它的特点和RAID3也挺像,不过在失败恢复时,它的难度可要比RAID3大得多了,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。
(6)RAID5分布式奇偶校验的独立磁盘结构
从它的示意图上可以看到,它的奇偶校验码存在于所有磁盘上,其中的0 parity代表第0带区的奇偶校验值,其他的意思也相同。RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性,允许单个磁盘出错。RAID5也是以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个硬盘上。这样,任何一个硬盘损坏,都可以根据其他硬盘上的校验位来重建损坏的数据。硬盘的利用率为n-1。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。RAID3与RAID5相比,重要的区别在于RAID3每进行一次数据传输,需涉及所有的阵列盘。而对于RAID5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。在RAID5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。RAID5优点是提供了冗余性(支持一块盘掉线后仍然正常运行),磁盘空间利用率较高(N-1/N)的读写速度较快(N-1倍)。但当掉盘之后,运行效率大幅下降。
图3.2.5 RAID5工作原理
如图3.2.5所示,数据0带区被分成4个块A0,B0,C0,D0,分布在4个磁盘机上,而校验码放在磁盘E上。
4.创建RAID5磁盘阵列
假设我们有1块硬盘/dev/sda(sda表示scsi接口类型,a表示第一个磁盘编号),创建3个分区,每个分区大小100M,然后我们对它进行分区操作,并把卷标属性设置成fd(Linux raid auto分区格式)类型。
(1)创建3个分区,类型为Linux raid auto磁盘阵列
[root@localhost/]#fdisk/dev/sda//对磁盘sda进行分区管理
The number of cylinders for this disk is set to 1435.
There is nothing wrong with that,but this is larger than 1024,and could in certain setups cause problemswith:
1)software that runs at boot time(e.g.,old versions of LILO)
2)booting and partitioning software from other OSs
(e.g.,DOSFDISK,OS/2 FDISK)
Command(m for help):p//显示当前分区表
Disk/dev/sda:10.7 GB,10737418240 bytes
255 heads,63 sectors/track,1305 cylinders
Units=cylinders of 16065∗512=8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 ∗ 1 1147 9213246 83 Linux
//sda1是Linux ext3类型分区格式
/dev/sda2 1148 1274 1020127+ 82 Linux swap/Solaris
//sda2是swap交换分区
Command(m for help):n(开始新分区)
Command action
e extended//扩展分区标示
p primary partition(1-4)//主分区标示
e(扩展分区)//创建扩展分区
Partition number(1-4):3//因为已经有两个分区了,所以新分区的序号选3
First cylinder(1275-1435,default 1275)://分区开始的磁柱数,默认是1275开始,不需要改变大小
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435)://设置分区大小,这里用默认的磁盘最后一个磁柱数1435,这样硬盘的剩余空间全做成扩展分区
Command(m for help):p//显示当前分区表
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
可以看见有一新的分区sda3,类型是扩展分区
Command(m for help):n//创建新的分区
Command action
l logical(5 or over)
p primary partition(1-4)
l//选逻辑分区
First cylinder(1275-1435,default 1275)://分区开始的磁柱数
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435):+100M//设置分区大小是100M
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 ∗ 1 1147 9213246 83 Linux
/dev/sda2 1148 1274 1020127+ 82 Linux swap/Solaris
/dev/sda3 1275 1435 1293232+ 5 Extended
/dev/sda5 1275 1287 104391 83 Linux
可以看见新增一分区sda5,分区类型是默认的ext3
Command(m for help):t//修改分区类型标记
Partition number(1-5):5//修改第5个分区
Hex code(type L to list codes):L//显示系统支持的分区类型
可以看到Linux raid auto分区类型的代码是fd
Hex code(type L to list codes):fd//修改sda5分区类型为8e
Changed system type of partition 5 to fd(Linux raid auto)
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 ∗ 1 1147 9213246 83 Linux
/dev/sda2 1148 1274 1020127+82 Linux swap/Solaris
/dev/sda3 1275 1435 1293232+5 Extended
/dev/sda5 1275 1287 104391 8e Linux LVM
可以看见sda5的分区类型已经改为Linux raid auto。
如上所示sda6 sda7的就不演示了。
(2)让硬盘的分区改动生效
Command(m for help):w//保存退出
The partition table has been altered!
Calling ioctl()to re-read partition table.
WARNING:Re-reading the partition table failed with error 16:设备或资源忙.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
#partprobe//重新读取分区表
这样系统就不需要重启,新的分区已经建立好了。
(3)创建RAID5磁盘阵列
#mdadm-C/dev/md0-l5-n3/dev/sda5/dev/sda6/dev/sda7//mdadm为RAID管理程序,-C指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式(lev⁃el),这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目。
mdadm:array/dev/md0 started.
这样建立了等级为RAID5的磁盘阵列分区/dev/md0,而md0由sda5,sda6,sda7组成
(4)显示RAID5状况
#mdadm—detail/dev/md0//显示md0这个RAID5设备状况
/dev/md0:
Version:00.90.03
Creation Time:Fri May 29 19:25:47 2009
Raid Level:raid5
Array Size:208640(203.78 MiB 213.65 MB)
Used Dev Size:104320(101.89 MiB 106.82 MB)
Raid Devices:3
Total Devices:3
Preferred Minor:0
Persistence:Superblock is persistent
Update Time:Fri May 29 19:25:48 2009
State:clean
Active Devices:3
Working Devices:3
Failed Devices:0
Spare Devices:0
Layout:left-symmetric
Chunk Size:64K
UUID:92428171:2a3ce940:adae1591:3dd518fe
Events:0.2
Number Major Minor RAIDDevice State
(5)md0设备格式化
#mkfs.ext3/dev/md0//格式化设备为md0的磁盘阵列,分区格式为ext3类型
mke2fs
mke2fs 1.39(29-May-2006)
Filesystem label=
OS type:Linux
Block size=1024(log=0)
Fragment size=1024(log=0)
52208 inodes,208640 blocks
10432 blocks(5.00%)reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
26 block groups
8192 blocks per group,8192 fragments per group
2008 inodes per group
Superblock backups stored on blocks:
8193,24577,40961,57345,73729,204801
Writing inode tables:done
Writing superblocks and filesystem accounting information:done
This filesystem will be automatically checked every 30 mounts or
180 days,whichever comes first. Use tune2fs-c or-i to override.
(6)挂载RAID5到/data目录下
#mkdir/data//建立/data目录
#mount/dev/md0/data//挂载md0这个RAID5设备到/data目录
5.管理RAID5磁盘阵列
(1)标记出一坏的RAID设备并且移出(crash)
#mdadm—manage/dev/md0—fail/dev/sda7//假如sda7分区坏了,让sda7分区失效
mdadm:set/dev/sda7 faulty in/dev/md0
#mdadm—detail/dev/md0
Number Major Minor RAIDDevice State
可以看出/sda7已经被标示出不可使用
#mdadm—manage/dev/md0—remove/dev/sda7//移出sda7分区设备
mdadm:hot removed/dev/sda7
#mdadm—detail/dev/md0//显示md0这个磁盘阵列设备状况
Number Major Minor RAIDDevice State
(2)添加一RAID设备到现有的RAID5
新做一个分区sda7,类型是Linux raid auto,以取代原来坏的分区
#mdadm—manage/dev/md0—add/dev/sda7//在md0这个RAID设备中,添加sda7分区
mdadm:re-added/dev/sda7
#mdadm—detail/dev/md0//显示md0这个raid5设备状况
Number Major Minor RAIDDevice State
2 8 7 2 active sync /dev/sda7
(3)移出现有的RAID5设备
#umount/data/ //卸载/data目录
#mdadm—stop/dev/md0//停止对md0设备的使用
mdadm:stopped/dev/md0
#mdadm—detail/dev/md0//显示md0这个RAID5设备状况
mdadm:md device/dev/md0 does not appear to be active.//md0的RAID5已经被移出了
6.LVM简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。物理卷(Physical Volume)物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具(比如PatitionMagic等),但这都只是暂时解决办法,没有根本解决问题。随着Linux的逻辑盘卷管理功能的出现,这些问题都迎刃而解。
7.LVM基本术语
(1)物理卷:Physical Volume(PV)
即为LVM底层的东西,可以为一个硬盘如sda,sdb,也可以为一个硬盘里面的一个分区如sda1,sdb1。
(2)Volume Group(VG)卷组
它是由一个或者多个物理卷组成的一个抽象的概念,表现形式为/dev/vg0,注意这里的vg0为一个目录而不是一个设备节点,卷组名称就是它的目录名称。
(3)物理块Physical Extents(PE):
当一个物理卷加入卷组时,它的空间会分成大小均等的小组块,我们称为物理块,简称(PE),物理块大小是在创建卷组的时候被指定,具有代表性的物理块大小是4MB。更形象的表示它们,我们可以如图3.2.6所示去认识它们:
图3.2.6 物理卷
卷组Volume Group(VG),如图3.2.7所示:
逻辑卷Logical Volume(LV)(如图3.2.8所示):
图3.2.7 卷组
图3.2.8 逻辑卷
上面我们看见的LV0和LV1就是基于VG0上建立的逻辑卷。
8.创建LVM
使用RAID可实现容错或加快数据读写速度的功能,但无法在不丢失分区数据的前题下增大分区。想解决这个问题就需要使用LVM了。LVM是Logical Volume Manager的缩写。配置LVM首先要将普通分区转换为物理卷,再通过物理卷创建逻辑卷组,最后在逻辑卷组中创建逻辑卷。
假设我们有1块硬盘/dev/sda,创建3个分区,每个分区大小100M,然后我们对它进行分区操作,并把卷标属性设置成8e(Linux LVM分区格式)。
(1)创建3个分区,类型为LVM逻辑卷
[root@localhost/]#fdisk/dev/sda//对磁盘sda进行分区管理
The number of cylinders for this disk is set to 1435.
There is nothing wrong with that,but this is larger than 1024,
and could in certain setups cause problemswith:
1)software that runs at boot time(e.g.,old versions of LILO)
2)booting and partitioning software from other OSs
(e.g.,DOSFDISK,OS/2 FDISK)
Command(m for help):p//显示当前分区表
Disk/dev/sda:10.7 GB,10737418240 bytes
255 heads,63 sectors/track,1305 cylinders
Units=cylinders of 16065∗512=8225280 bytes
//sda1是Linux ext3类型分区格式
//sda2是swap交换分区
Command(m for help):n(开始分区)
Command action
e extended//扩展分区标示
p primary partition(1-4)//主分区标示
e(扩展分区)//创建扩展分区
Partition number(1-4):3//因为已经有两个分区了,所以新分区的序号选3
First cylinder(1275-1435,default 1275)://分区开始的磁柱数,默认是1275开始,不需要改变大小
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435)://设置分区大小,这里用默认的磁盘最后一个磁柱数1435,这样硬盘的剩余空间全做成扩展分区
Command(m for help):p//显示当前分区表
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
Device Boot Start End Blocks Id System
可以看见有一新的分区sda3,类型是扩展分区
Command(m for help):n//创建新的分区
Command action
l logical(5 or over)
p primary partition(1-4)
l//选逻辑分区
First cylinder(1275-1435,default 1275)://分区开始的磁柱数
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435):+100M//设置分区大小是100M
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
可以看见新增一分区sda5,分区类型是默认的ext3
Command(m for help):t//修改分区类型标记
Partition number(1-5):5//修改第5个分区
Hex code(type L to list codes):L//显示系统支持的分区类型
可以看到Linux LVM分区类型的代码是8e
Hex code(type L to list codes):8e//修改sda5分区类型为8e
Changed system type of partition 5 to 8e(Linux LVM)
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
可以看见sda5的分区类型已经改为Linux LVM。
如上所示sda6 sda7的就不演示了。
(2)让硬盘的分区改动生效
Command(m for help):w//保存退出
The partition table has been altered!
Calling ioctl()to re-read partition table.
WARNING:Re-reading the partition table failed with error 16:设备或资源忙.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
#partprobe//重新读取分区表
这样系统就不需要重启,新的分区已经建立好了。
(3)创建物理卷
#pvcreate/dev/sda5/dev/sda6//创建物理卷sda5,sda6
Wiping software RAID md superblock on/dev/sda5
Physical volume"/dev/sda5"successfully created
Wiping software RAID md superblock on/dev/sda6
Physical volume"/dev/sda6"successfully created
(4)显示物理卷状况
#pvdisplay //显示物理卷状况
"/dev/sda6"is a new physical volume of"101.94 MB"//sda6的状况显示
—NEW Physical volume—
PV UUID Vk17ih-cKCq-TKAA-IhXy-4sBL-yRge-o7T2B4
"/dev/sda5"is a new physical volume of"101.94 MB"//sda5的状况显示
—NEW Physical volume—
PV UUID ppuhu3-doSK-Ew0W-Kk7Z-jJuV-N2hh-KFJogI
(5)创建卷组
#vgcreate ora_vg /dev/sda5 /dev/sda6//创建名为org_vg卷组,由sda5,sda6组成Volume group"ora_vg"successfully created
(6)显示卷组状况
#vgdisplay//显示卷组状况
(7)创建逻辑卷
#lvcreate-L+50M-n ora_lv/dev/ora_vg//创建名为ora_lv的逻辑卷,大小为50M,卷组名为ora_vg
Rounding up size to full physical extent 52.00 MB
Logical volume"ora_lv"created
(8)显示逻辑卷状况
(9)逻辑卷格式化
#mkfs.ext3/dev/ora_vg/ora_lv//格式化名为ora_lv的逻辑卷,分区格式为ext3类型
mke2fs 1.39(29-May-2006)
Filesystem label=
OS type:Linux
Block size=1024(log=0)
Fragment size=1024(log=0)
13328 inodes,53248 blocks
2662 blocks(5.00%)reserved for the super user
First data block=1
Maximum filesystem blocks=54525952
7 block groups
8192 blocks per group,8192 fragments per group
1904 inodes per group
Superblock backups stored on blocks:
8193,24577,40961
Writing inode tables:done
Creating journal(4096 blocks):done
Writing superblocks and filesystem accounting information:done
This filesystem will be automatically checked every 20 mounts or
180 days,whichever comes first. Use tune2fs-c or-i to override.
(10)挂载逻辑卷
#mkdir/lvm//建立LVM目录
#mount/dev/ora_vg/ora_lv/lvm//挂载逻辑卷这个设备文件到/LVM目录
#df-h/lvm //显示/LVM目录对节点和磁盘块的使用情况,-h表示大容量格式
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 51M 4.9M 43M 11% /lvm
9.管理逻辑卷
(1)逻辑卷扩容
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 152.00 MB
Logical volume ora_lv successfully resized
#df-h/lvm
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 51M 4.9M 43M 11% /lvm
可以看见增加的容量还没有生效。
#resize2fs/dev/ora_vg/ora_lv//让逻辑卷更改大小生效
resize2fs 1.39(29-May-2006)
Filesystem at/dev/ora_vg/ora_lv ismounted on/lvm;on-line resizing required
Performing an on-line resize of/dev/ora_vg/ora_lv to 155648(1k)blocks.
The filesystem on/dev/ora_vg/ora_lv is now 155648 blocks long.
#df-h/lvm
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 148M 5.3M 135M 4% /lvm
扩容已经生效。
#lvextend-L+100M/dev/ora_vg/ora_lv
Extending logical volume ora_lv to 252.00 MB
Insufficient free space:25 extents needed,but only 12 available
表明已经超出了扩容范围,不能继续扩容(因为252M超出了卷组的容量范围)
(2)物理卷扩容
#pvcreate/dev/sda7//创建新的物理卷,包含sda7分区
Wiping software RAID md superblock on/dev/sda7
Physical volume"/dev/sda7"successfully created
#pvdisplay//显示物理卷状况
"/dev/sda7"is a new physical volume of"101.94 MB"
—NEW Physical volume—
PV Name /dev/sda7
VG Name
PV Size 101.94 MB
Allocatable NO
PE Size(KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 8WmCCA-uYrU-RX72-D8Bw-4XgV-7j2A-oHxLQk
(3)新增加物理卷加入到卷组
#vgextend ora_vg/dev/sda7//把sda7加入到卷组org_vg
Volume group"ora_vg"successfully extended
#vgdisplay
—Volume group—
VG Name ora_vg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 300.00 MB
PE Size 4.00 MB
Total PE 75
Alloc PE/Size 38/152.00 MB
Free PE/Size 37/148.00 MB
VG UUID kgTa0Y-EIAO-7Jij-vKrs-pU6f-Hppa-rQPDbb
(4)逻辑卷扩容
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 252.00 MB
Logical volume ora_lv successfully resized
#resize2fs/dev/ora_vg/ora_lv//让逻辑卷更改生效,因为卷组已经扩容,所以不再出错#df-h/lvm
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 245M 5.7M 227M 3% /lvm
(5)卸载逻辑卷
#umount/lvm//选卸载/lvm目录,停止对逻辑卷的使用
#lvdisplay//显示逻辑卷状况
—Logical volume—
LV Name /dev/ora_vg/ora_lv
VG Name ora_vg
LV UUID 7r6nwK-8qXe-vFLj-vcQ2-3Ch3-y3ih-Qmf9Ll
LVWrite Access read/write
LV Status available
#open 0
LV Size 252.00 MB
Current LE 63
Segments 3
Allocation inherit
Read ahead sectors auto
-currently set to 256
Block device S253:0
#lvremove/dev/ora_vg/ora_lv//移出逻辑卷
Do you really want to remove active logical volume"ora_lv"?[y/n]:y
Logical volume"ora_lv"successfully removed
(6)卸载卷组
#vgremove/dev/ora_vg//移出卷组org_vg
Volume group"ora_vg"successfully removed
(7)卸载物理卷
#pvremove/dev/sda5/dev/sda6/dev/sda7//移出物理卷sda5,sda6,sda7
Labels on physical volume"/dev/sda5"successfully wiped
Labels on physical volume"/dev/sda6"successfully wiped
Labels on physical volume"/dev/sda7"successfully wiped
3.2.4 任务实施
任务一 RAID5架构管理
任务步骤如下:
(1)创建3个分区,类型为Linux raid auto磁盘阵列
[root@localhost/]#fdisk/dev/sda//对磁盘sda进行分区管理
Command(m for help):n(开始分区)
Command action(www.daowen.com)
e extended//扩展分区标示
p primary partition(1-4)//主分区标示
e(扩展分区)//创建扩展分区
Partition number(1-4):3//因为已经有两个分区了,所以新分区的序号选3
First cylinder(1275-1435,default 1275)://分区开始的磁柱数,默认是1275开始,不需要改变大小
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435)://设置分区大小,这里用默认的磁盘最后一个磁柱数1435,这样硬盘的剩余空间全做成扩展分区
Command(m for help):n//创建新的分区
Command action
l logical(5 or over)
p primary partition(1-4)
l//选逻辑分区
First cylinder(1275-1435,default 1275)://分区开始的磁柱数
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435):+100M//设置分区大小是100M
Command(m for help):t//修改分区类型标记
Partition number(1-5):5//修改第5个分区
Hex code(type L to list codes):L//显示系统支持的分区类型
可以看到Linux raid auto分区类型的代码是fd
Hex code(type L to list codes):fd//修改sda5分区类型为8e
Changed system type of partition 5 to fd(Linux raid auto)
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 ∗ 1 1147 9213246 83 Linux
/dev/sda2 1148 1274 1020127+ 82 Linux swap/Solaris
/dev/sda3 1275 1435 1293232+ 5 Extended
/dev/sda5 1275 1287 104391 8e Linux LVM
可以看见sda5的分区类型已经改为Linux raid auto。
sda6,sda7操作与sda5操作步骤一样。
(2)让硬盘的分区改动生效
Command(m for help):w//保存退出
#partprobe//重新读取分区表
这样系统就不需要重启,新的分区已经建立好了
(3)创建RAID5磁盘阵列
#mdadm-C/dev/md0-l5-n3/dev/sda5/dev/sda6/dev/sda7
mdadm:array/dev/md0 started.
这样建立了等级为RAID5的磁盘阵列分区/dev/md0,而md0由sda5,sda6,sda7组成。
(4)显示RAID5状况
#mdadm—detail/dev/md0
(5)md0设备格式化
#mkfs.ext3/dev/md0//格式化设备为md0的磁盘阵列,分区格式为ext3类型
(6)挂载RAID5到/data目录下
#mkdir/data//建立/data目录
#mount/dev/md0/data//挂载md0这个RAID5设备到/data目录
管理RAID5磁盘阵列:
(1)标记出一坏的RAID设备并且移出(crash)
#mdadm—manage/dev/md0—fail/dev/sda7//假如sda7分区坏了,让sda7分区失效
mdadm:set/dev/sda7 faulty in/dev/md0
#mdadm—manage/dev/md0—remove/dev/sda7//移出sda7分区设备
mdadm:hot removed/dev/sda7
(2)添加一RAID设备到现有的RAID5
新做一个分区sda7,类型是Linux raid auto,以取代原来坏的分区
#mdadm—manage/dev/md0—add/dev/sda7//在md0这个RAID设备中,添加sda7分区
mdadm:re-added/dev/sda7
(3)移出现有的RAID5设备
#umount/data/ //卸载/data目录
#mdadm—stop/dev/md0//停止对md0设备的使用
mdadm:stopped/dev/md0
#mdadm—detail/dev/md0//显示md0这个RAID5设备状况
mdadm:md device/dev/md0 does not appear to be active.//md0的RAID5已经被移出了
任务二 LVM架构管理
任务步骤如下:
创建逻辑卷
(1)创建3个分区,类型为LVM逻辑卷
[root@localhost/]#fdisk/dev/sda//对磁盘sda进行分区管理
Command(m for help):n(开始分区)
Command action
e extended//扩展分区标示
p primary partition(1-4)//主分区标示
e(扩展分区)//创建扩展分区
Partition number(1-4):3//因为已经有两个分区了,所以新分区的序号选3
First cylinder(1275-1435,default 1275)://分区开始的磁柱数,默认是1275开始,不需要改变大小
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435)://设置分区大小,这里用默认的磁盘最后一个磁柱数1435,这样硬盘的剩余空间全做成扩展分区
Command(m for help):n//创建新的分区
Command action
l logical(5 or over)
p primary partition(1-4)
l//选逻辑分区
First cylinder(1275-1435,default 1275)://分区开始的磁柱数
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435):+100M//设置分区大小是100M
Command(m for help):t//修改分区类型标记
Partition number(1-5):5//修改第5个分区
Hex code(type L to list codes):L//显示系统支持的分区类型
可以看到Linux LVM分区类型的代码是8e
Hex code(type L to list codes):8e//修改sda5分区类型为8e
Changed system type of partition 5 to 8e(Linux LVM)
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 ∗ 1 1147 9213246 83 Linux
/dev/sda2 1148 1274 1020127+ 82 Linux swap/Solaris
/dev/sda3 1275 1435 1293232+ 5 Extended
/dev/sda5 1275 1287 104391 8e Linux LVM
可以看见sda5的分区类型已经改为Linux LVM。
sda6,sda7操作与sda5操作步骤一样。
(2)让硬盘的分区改动生效
Command(m for help):w//保存退出
#partprobe//重新读取分区表
这样系统就不需要重启,新的分区已经建立好了
(3)创建物理卷
#pvcreate/dev/sda5/dev/sda6//创建物理卷sda5,sda6
Wiping software RAID md superblock on/dev/sda5
Physical volume"/dev/sda5"successfully created
Wiping software RAID md superblock on/dev/sda6
Physical volume"/dev/sda6"successfully created
(4)显示物理卷状况
#pvdisplay //显示物理卷状况
(5)创建卷组
#vgcreate ora_vg /dev/sda5 /dev/sda6//创建名为org_vg卷组,由sda5,sda6组成
Volume group"ora_vg"successfully created
(6)显示卷组状况
#vgdisplay//显示卷组状况
(7)创建逻辑卷
#lvcreate-L+50M-n ora_lv/dev/ora_vg//创建名为ora_lv的逻辑卷,大小为50M,卷组名为ora_vg
Rounding up size to full physical extent 52.00 MB
Logical volume"ora_lv"created
(8)显示逻辑卷状况
#lvdisplay//显示逻辑卷状况
(9)逻辑卷格式化
#mkfs.ext3/dev/ora_vg/ora_lv//格式化名为ora_lv的逻辑卷,分区格式为ext3类型
(10)挂载逻辑卷
#mkdir/lvm//建立lvm目录
#mount/dev/ora_vg/ora_lv/lvm//挂载逻辑卷这个设备文件到/lvm目录
#df-h/lvm //显示/lvm目录对节点和磁盘块的使用情况,-h表示大容量格式
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 51M 4.9M 43M 11% /lvm
管理逻辑卷
(1)逻辑卷扩容
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 152.00 MB
Logical volume ora_lv successfully resized
#df-h/lvm
文件系统 容量 已用 可用 已用%挂载点
/dev/mapper/ora_vg-ora_lv 51M 4.9M 43M 11% /lvm
可以看见增加的容量还没有生效。
#resize2fs/dev/ora_vg/ora_lv//让逻辑卷更改大小生效
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 252.00 MB
Insufficient free space:25 extents needed,but only 12 available
表明已经超出了扩容范围,不能继续扩容(因为252M超出了卷组的容量范围)
(2)物理卷扩容
#pvcreate/dev/sda7//创建新的物理卷,包含sda7分区
Wiping software RAID md superblock on/dev/sda7
Physical volume"/dev/sda7"successfully created
#pvdisplay//显示物理卷状况
"/dev/sda7"is a new physical volume of"101.94 MB"
—NEW Physical volume—
(3)新增加物理卷加入到卷组
#vgextend ora_vg/dev/sda7//把sda7加入到卷组org_vg
Volume group"ora_vg"successfully extended
#vgdisplay
—Volume group—
Free PE/Size 37/148.00 MB
VG UUID kgTa0Y-EIAO-7Jij-vKrs-pU6f-Hppa-rQPDbb
(4)逻辑卷扩容
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 252.00 MB
Logical volume ora_lv successfully resized
#resize2fs/dev/ora_vg/ora_lv//让逻辑卷更改生效,因为卷组已经扩容,所以不再出错#df-h/lvm
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 245M 5.7M 227M 3% /lvm
(5)卸载逻辑卷
#umount/lvm//选卸载/lvm目录,停止对逻辑卷的使用
#lvdisplay//显示逻辑卷状况
#lvremove/dev/ora_vg/ora_lv//移出逻辑卷
Do you really want to remove active logical volume"ora_lv"?[y/n]:y
Logical volume"ora_lv"successfully removed
(6)卸载卷组
#vgremove/dev/ora_vg//移出卷组org_vg
Volume group"ora_vg"successfully removed
(7)卸载物理卷
#pvremove/dev/sda5/dev/sda6/dev/sda7//移出物理卷sda5,sda6,sda7
Labels on physical volume"/dev/sda5"successfully wiped
Labels on physical volume"/dev/sda6"successfully wiped
Labels on physical volume"/dev/sda7"successfully wiped
3.2.4 任务实施
任务一 RAID5架构管理
任务步骤如下:
(1)创建3个分区,类型为Linux raid auto磁盘阵列
[root@localhost/]#fdisk/dev/sda//对磁盘sda进行分区管理
Command(m for help):n(开始分区)
Command action
e extended//扩展分区标示
p primary partition(1-4)//主分区标示
e(扩展分区)//创建扩展分区
Partition number(1-4):3//因为已经有两个分区了,所以新分区的序号选3
First cylinder(1275-1435,default 1275)://分区开始的磁柱数,默认是1275开始,不需要改变大小
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435)://设置分区大小,这里用默认的磁盘最后一个磁柱数1435,这样硬盘的剩余空间全做成扩展分区
Command(m for help):n//创建新的分区
Command action
l logical(5 or over)
p primary partition(1-4)
l//选逻辑分区
First cylinder(1275-1435,default 1275)://分区开始的磁柱数
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435):+100M//设置分区大小是100M
Command(m for help):t//修改分区类型标记
Partition number(1-5):5//修改第5个分区
Hex code(type L to list codes):L//显示系统支持的分区类型
可以看到Linux raid auto分区类型的代码是fd
Hex code(type L to list codes):fd//修改sda5分区类型为8e
Changed system type of partition 5 to fd(Linux raid auto)
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
可以看见sda5的分区类型已经改为Linux raid auto。
sda6,sda7操作与sda5操作步骤一样。
(2)让硬盘的分区改动生效
Command(m for help):w//保存退出
#partprobe//重新读取分区表
这样系统就不需要重启,新的分区已经建立好了
(3)创建RAID5磁盘阵列
#mdadm-C/dev/md0-l5-n3/dev/sda5/dev/sda6/dev/sda7
mdadm:array/dev/md0 started.
这样建立了等级为RAID5的磁盘阵列分区/dev/md0,而md0由sda5,sda6,sda7组成。
(4)显示RAID5状况
#mdadm—detail/dev/md0
(5)md0设备格式化
#mkfs.ext3/dev/md0//格式化设备为md0的磁盘阵列,分区格式为ext3类型
(6)挂载RAID5到/data目录下
#mkdir/data//建立/data目录
#mount/dev/md0/data//挂载md0这个RAID5设备到/data目录
管理RAID5磁盘阵列:
(1)标记出一坏的RAID设备并且移出(crash)
#mdadm—manage/dev/md0—fail/dev/sda7//假如sda7分区坏了,让sda7分区失效
mdadm:set/dev/sda7 faulty in/dev/md0
#mdadm—manage/dev/md0—remove/dev/sda7//移出sda7分区设备
mdadm:hot removed/dev/sda7
(2)添加一RAID设备到现有的RAID5
新做一个分区sda7,类型是Linux raid auto,以取代原来坏的分区
#mdadm—manage/dev/md0—add/dev/sda7//在md0这个RAID设备中,添加sda7分区
mdadm:re-added/dev/sda7
(3)移出现有的RAID5设备
#umount/data/ //卸载/data目录
#mdadm—stop/dev/md0//停止对md0设备的使用
mdadm:stopped/dev/md0
#mdadm—detail/dev/md0//显示md0这个RAID5设备状况
mdadm:md device/dev/md0 does not appear to be active.//md0的RAID5已经被移出了
任务二 LVM架构管理
任务步骤如下:
创建逻辑卷
(1)创建3个分区,类型为LVM逻辑卷
[root@localhost/]#fdisk/dev/sda//对磁盘sda进行分区管理
Command(m for help):n(开始分区)
Command action
e extended//扩展分区标示
p primary partition(1-4)//主分区标示
e(扩展分区)//创建扩展分区
Partition number(1-4):3//因为已经有两个分区了,所以新分区的序号选3
First cylinder(1275-1435,default 1275)://分区开始的磁柱数,默认是1275开始,不需要改变大小
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435)://设置分区大小,这里用默认的磁盘最后一个磁柱数1435,这样硬盘的剩余空间全做成扩展分区
Command(m for help):n//创建新的分区
Command action
l logical(5 or over)
p primary partition(1-4)
l//选逻辑分区
First cylinder(1275-1435,default 1275)://分区开始的磁柱数
Using default value 1275
Last cylinder or+size or+sizeM or+sizeK(1275-1435,default 1435):+100M//设置分区大小是100M
Command(m for help):t//修改分区类型标记
Partition number(1-5):5//修改第5个分区
Hex code(type L to list codes):L//显示系统支持的分区类型
可以看到Linux LVM分区类型的代码是8e
Hex code(type L to list codes):8e//修改sda5分区类型为8e
Changed system type of partition 5 to 8e(Linux LVM)
Command(m for help):p
Disk/dev/sda:11.8 GB,11811160064 bytes
255 heads,63 sectors/track,1435 cylinders
Units=cylinders of 16065∗512=8225280 bytes
可以看见sda5的分区类型已经改为Linux LVM。
sda6,sda7操作与sda5操作步骤一样。
(2)让硬盘的分区改动生效
Command(m for help):w//保存退出
#partprobe//重新读取分区表
这样系统就不需要重启,新的分区已经建立好了
(3)创建物理卷
#pvcreate/dev/sda5/dev/sda6//创建物理卷sda5,sda6
Wiping software RAID md superblock on/dev/sda5
Physical volume"/dev/sda5"successfully created
Wiping software RAID md superblock on/dev/sda6
Physical volume"/dev/sda6"successfully created
(4)显示物理卷状况
#pvdisplay //显示物理卷状况
(5)创建卷组
#vgcreate ora_vg /dev/sda5 /dev/sda6//创建名为org_vg卷组,由sda5,sda6组成
Volume group"ora_vg"successfully created
(6)显示卷组状况
#vgdisplay//显示卷组状况
(7)创建逻辑卷
#lvcreate-L+50M-n ora_lv/dev/ora_vg//创建名为ora_lv的逻辑卷,大小为50M,卷组名为ora_vg
Rounding up size to full physical extent 52.00 MB
Logical volume"ora_lv"created
(8)显示逻辑卷状况
#lvdisplay//显示逻辑卷状况
(9)逻辑卷格式化
#mkfs.ext3/dev/ora_vg/ora_lv//格式化名为ora_lv的逻辑卷,分区格式为ext3类型
(10)挂载逻辑卷
#mkdir/lvm//建立lvm目录
#mount/dev/ora_vg/ora_lv/lvm//挂载逻辑卷这个设备文件到/lvm目录
#df-h/lvm //显示/lvm目录对节点和磁盘块的使用情况,-h表示大容量格式
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/ora_vg-ora_lv 51M 4.9M 43M 11% /lvm
管理逻辑卷
(1)逻辑卷扩容
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 152.00 MB
Logical volume ora_lv successfully resized
#df-h/lvm
文件系统 容量 已用 可用 已用%挂载点
/dev/mapper/ora_vg-ora_lv 51M 4.9M 43M 11% /lvm
可以看见增加的容量还没有生效。
#resize2fs/dev/ora_vg/ora_lv//让逻辑卷更改大小生效
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 252.00 MB
Insufficient free space:25 extents needed,but only 12 available
表明已经超出了扩容范围,不能继续扩容(因为252M超出了卷组的容量范围)
(2)物理卷扩容
#pvcreate/dev/sda7//创建新的物理卷,包含sda7分区
Wiping software RAID md superblock on/dev/sda7
Physical volume"/dev/sda7"successfully created
#pvdisplay//显示物理卷状况
(3)新增加物理卷加入到卷组
#vgextend ora_vg/dev/sda7//把sda7加入到卷组org_vg
(4)逻辑卷扩容
#lvextend-L+100M/dev/ora_vg/ora_lv//逻辑卷扩容100M
Extending logical volume ora_lv to 252.00 MB
Logical volume ora_lv successfully resized
#resize2fs/dev/ora_vg/ora_lv//让逻辑卷更改生效,因为卷组已经扩容,所以不再出错#df-h/lvm
文件系统 容量 已用 可用 已用%挂载点
/dev/mapper/ora_vg-ora_lv 245M 5.7M 227M 3% /lvm
(5)卸载逻辑卷
#umount/lvm//选卸载/lvm目录,停止对逻辑卷的使用
#lvdisplay//显示逻辑卷状况
#lvremove/dev/ora_vg/ora_lv//移出逻辑卷
Do you really want to remove active logical volume"ora_lv"?[y/n]:y
Logical volume"ora_lv"successfully removed
(6)卸载卷组
#vgremove/dev/ora_vg//移出卷组org_vg
Volume group"ora_vg"successfully removed
(7)卸载物理卷
#pvremove/dev/sda5/dev/sda6/dev/sda7//移出物理卷sda5,sda6,sda7
Labels on physical volume"/dev/sda5"successfully wiped
Labels on physical volume"/dev/sda6"successfully wiped
Labels on physical volume"/dev/sda7"successfully wiped
3.2.5 考核要点
表3.2.1 《RAID磁盘阵列与LVM逻辑卷的管理应用》考核标准
3.2.6 能力拓展
1.使用RAID作为网络存储设备有许多好处,以下关于RAID的叙述中不正确的是_______。
A.RAID使用多块廉价磁盘阵列构成,提高了性能价格比
B.RAID采用交叉存取技术,提高了访问速度
C.RAID0使用磁盘镜像技术,提高了可靠性
D.RAID3利用一台奇偶校验盘完成容错功能,减少了冗余磁盘数量
2.使用三个硬盘存储数据,保证数据安全性的同时还能让磁盘根据需要动态的缩放,设备sdb sdc sdd,要求
(1)将三个硬盘组成RAID5,实现安全性。
(2)在阵列md0上创建物理卷、卷组、逻辑卷。
(3)将/var目录下的数据文件移植到逻辑卷下。
(4)将逻辑卷挂载到/var目录。
学习情境3.3 Web集群服务器的架构
3.3.1 学习要点
1.知识点:了解LVS集群的通用体系结构,理解heartbeat心跳在负载均衡调度器中的作用
2.技能点:掌握Linux下Web服务集群的实现方法
3.3.2 任务描述
正确描绘出LVSWeb服务器集群的系统构架结构图。
安装配置LVS,实现Web服务集群。
安装配置heartbeat,实现LVS的负载均衡。
3.3.3 相关知识
1.什么是服务器集群
集群,是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。
一方面,随着Internet的爆炸性增长,Internet与人的生活越来越息息相关,通过Internet上进行交易也就越来越受关注。近几年,电子商务的年增长均超过100%。服务器的工作量也迅速增长,所以服务器(特别是一个受人欢迎的Web服务器)很容易在访问高峰时期过载。
而另一方面,计算机从1946年单纯的科学计算任务到现在大量纷繁复杂的信息处理,工作量越来越大,需要越来越快的处理能力。所以计算机界就不得不不断研究更快的处理器、存储器,以适应这一需求。
然而,科学家们意识到,单块处理器的速度发展空间是有限的,为什么不能让计算机像人一样协同工作,“群策群力”地将工作完成好呢?这时,就掀起了“并行计算”的研究。举个例子来说,我们架设了一台WWW服务器,上面构建了一个电子商务网站,然而随着时间的推移,名声越来越大,这时点击率也就越来越高,WWW服务器的负载也就越来越高。这种情况下,我们就必须提升WWW服务器的能力,以满足日益增长的服务请求。这时,我们就面临两种选择:
(1)升级WWW服务器,采用更快的CPU,增加更多的内存,使其更具有POWER;但日益增长的服务请求又会使服务器再次过载,需要再次升级,这样就陷入了升级的怪圈。还有,升级时还得考虑到服务如何接续,能否中止!
(2)增加WWW服务器,让多台服务器来完成相同的服务。
这种方法就是服务器集群,通过并行技术来大大提升系统性能。
2.负载均衡的概念
负载均衡(Load Balance):
网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去。这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性。
特点:
①高可靠性(HA)。利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
②高性能计算(HP)。即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析、化学分析等。
③负载平衡。即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
3.LVS系统结构与特点
(1)Linux Virtual Server:简称LVS。是由中国一个Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的体系。许多商业的集群产品,比如RedHat的Piranha、Turbo Linux公司的Turbo Cluster等,都是基于LVS的核心代码的。
(2)体系结构:使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器。物理服务器之间可以通过高速的LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器。
(3)LVS的三种工作模式
①Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。
②Virtual Server via IP Tunneling(VS-TUN):用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等等。
③Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。
4.LVS三种工作模式的优缺点比较
(1)Virtual server via NAT(VS-NAT)
优点:集群中的物理服务器可以使用任何支持TCP/IP的操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
解决办法:即使是负载均衡器成为整个系统的瓶颈,也有两种方法来解决它。一种是混合处理,另一种是采用Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。采用Virtual Server via IP tunneling或Virtual Server via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面采用VS-NAT的负载均衡器。
(2)Virtual server via IP Tunneling(VS-TUN)
我们发现,许多Internet服务(例如Web服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持“IP Tunneling”(IP Encapsulation)协议,仅在Linux系统上实现了这个,如果想让其他操作系统支持,还在探索之中。
(3)Virtual Server via Direct Routing(VS-DR)
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36,2.2.9,2.2.10,2.2.12;Solaris 2.5.1,2.6,2.7;FreeBSD 3.1,3.2,3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上。
5.负载均衡集群
负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的、高负载的服务器组以保证对外提供良好的服务响应;而LVS就是实现这一功能的技术。实际上LVS是一种Linux操作系统上基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。
图3.3.1 LVS实现集群系统结构简图
如图图3.3.1所示为一台名为Director的机器是前端负载均衡器,运行LVS,目前只能在Linux下运行.可以针对Web、FTP、Cache、MMS甚至MySQL等服务做负载均衡;后端机器称之为Real Server,是需要负载均衡的服务器,可以为各类系统,Linux、Solaris、Aix、BSD、Windows都可,甚至Director本身也可以作为Real Server。
可用性(availability)当集群中的一个系统发生故障时,集群软件迅速做出反映,将该系统的任务分配到集群中其他正在工作的系统上执行。考虑到计算机硬件和软件的易错性,高可用性群集的目的主要是为了使群集的整体服务尽可能可用。如果高可用性群集中的主节点发生了故障,那么这段时间内将由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份,并且因此使系统环境对于用户是一致的。
高可用性(HA)群集致力于使服务器系统的运行速度和响应速度尽可能快。它们经常利用在多台机器上运行的冗余节点和服务来相互跟踪。如果某个节点失败,它的替补将在几秒钟或更短时间内接管它的职责。因此,对于用户而言,群集永远不会停机。
Load Balancer(负载均衡器)是整个集群系统的前端,负责把客户请求转发到Real Server上。Backup是备份Load Balancer,当Load Balancer不可用时接替它,成为实际的Load Balancer。Load Balancer通过Ldirectord监测各Real Server的健康状况。在Real Server不可用时把它从群中剔除,恢复时重新加入。
通常主服务器运行作业,而系统使辅助服务器保持闲置。辅助服务器通常是主服务器操作系统设置的镜像,尽管硬件本身稍有不同。辅助节点对主服务器进行活动监控或心跳观察,以查看它是否仍在运行。如果心跳计时器没有接收到主服务器的响应,则辅助节点将接管网络和系统身份。
6.系统结构设计
系统体系结构如图3.3.2所示,从客户端发出请求至服务器响应,本系统划分为4个层次:客户端、分配器、Web应用服务器、存储系统。
图3.3.2 系统结构设计
①第1层客户端。使用浏览器访问应用服务器的Internet或Intranet上的用户群。
②第2层负载均衡系统。系统的唯一入口点,负责接受用户请求,并按一定的均衡策略分配给真实服务器。负载均衡器上的管理软件可以自动屏蔽宕机的节点服务器,并在节点恢复服务功能后重新加入服务器池。负载均衡可以通过LVS+heartbeat(DR)方式实现。为避免单点失效,选择配置一个备份负载均衡器,与主负载均衡器通过心跳线相互监测状态,若主负载均衡器意外宕机,备份负载均衡器自动接管分配给节点的任务,至主负载均衡器重新启用后,备份负载均衡器将自动将分配任务交给主负载均衡器,从而避免单点失效带来的系统崩溃。
③第3层Web真实服务器组。是实际处理客户请求的网络服务器集合,提供WWW网络服务,每台服务器称为节点,各节点处理由负载均衡器分配来的用户请求,并通过间接响应客户端。服务器组是在RHEL5下相同的Apache Web服务器。
④第4层共享存储系统。以NFS方式实现,为Web真实服务器组提供一个共享存储区,实现服务器池拥有相同的内容,提供相同的服务。从而保证第3层Web服务器组提供数据的一致性,并可以实时更新。
3.3.4 任务实施
架设LVSWeb服务器集群
系统配置环境如表3.3.1所示:
表3.3.1 系统配置环境
这里设置服务器的主机名,比如station1,编辑/etc/sysconfig/network文件
#vim/etc/sysconfig/network
NETWORKING=yes//启动网路
NETWORKING_IPV6=no//关闭IPV6功能
HOSTNAME=station1//设置本机的计算机名
station6,station8架设Apache Web服务器。
任务步骤如下:
所需软件包:heartbeat、libnet、ipvsadm-1.24.tar.gz,mysql-cluster-gpl-7.0.5
ipvsadm IPVS的管理工具,提供了一个和IPVS打交道的接口,包括配置IPVS和连接信息统计。到地址:http://www.Linuxvirtualserver.org/software/ipvs.html去下载相应的版本。
heartbeat、libnet、mysql-cluster软件包可以到如下网址下载:
http://Linux-ha.org/DownloadSoftware
http://www.packetfactory.net/libnet/dist/libnet.tar.gz
http://www.mysql.com
在调度器A和B的/etc/hosts内加入以下内容:
vim/etc/hosts///etc/hosts是配置IP地址和其对应主机名的文件,这里可以记录本机的或其他主机的ip及其对应主机名
1.station1、station3安装libnet.tar.gz
#tar–zxvf libnet.tar.gz
#cd libnet
#./configure//配置
make&&make install//编译与安装
libnet安装完成。
2.station1安装ipvsadm-1.24.tar.gz
#tar–zxvf ipvsadm-1.24.tar.gz
#cd ipvsadm-1.24
将当前使用内核连接到/usr/src/Linux
ln-s/usr/src/kernels/Linux-2.6.27/usr/src/Linux//将当前使用内核连接到/usr/src/Linux,假设当前系统内核版本是2.6.27,内核解压在/usr/src/kernels/Linux-2.6.27目录
make&&make install//编译与安装
ipvsadm安装完成。
3.配置基于DR模式LVS集群
(1)Load Balancer:172.17.2.1
#vim/usr/local/lvs/lvs//编辑LVS启动脚本/usr/local/lvs/lvs
#!/bin/sh
VIP=172.17.2.4//指定虚拟IP
RIP1=172.17.2.6//设置真实服务器1的IP
RIP2=172.17.2.8 //RIP1-RIP2为真实服务器IP,如有更多真实服务器则可以添加更多
/etc/rc.d/init.d/functions
case"$1"in//分支语句,对$1的参数值做选择
start)//当参数值为start时
echo"start LVS of DirectorServer"//显示“start LVS of DirectorServer”字符
#设置虚拟地址
/sbin/ifconfig eth0:0$VIP broadcast$VIP netmask 255.255.255.255 up//在网卡eth0上绑定虚拟IP地址172.17.2.4
/sbin/route add-host$VIP dev eth0:0//LVS启动时添加VIP的网口eth0:0
#清除IPVS表
/sbin/ipvsadm-C//清除IPVS表
#设置LVS
/sbin/ipvsadm-A-t$VIP:80-s rr #rr是使用了轮叫算法
/sbin/ipvsadm-a-t$VIP:80-r$RIP1:80–g//使用ipvsadm来转发客户端请求,-s lc为最小连接数算法,-g指的是采用DR模式。有几个真实服务器就添加几条记录。
/sbin/ipvsadm-a-t$VIP:80-r$RIP2:80-g
#Run Lvs
/sbin/ipvsadm
;;
stop) //LVS的停止参数
echo"close LVSDirectorserver"
/sbin/ifconfig eth0:0 down//停止时候删除VIP的网口eth0:0
/sbin/ipvsadm–C//关闭时清除ipvsadm表
;;
∗)
echo"Usage:$0{start|stop}"//脚本执行时的参数提示
exit 1
esac//case的结束标记,case和esac相对应才构成一个完整的case语句
(2)station6:172.17.2.6
#vim/usr/local/lvs/realserver//真实服务器的启动脚本
VIP=172.17.2.4
/sbin/ifconfig lo:0$VIP broadcast$VIP netmask 255.255.255.255 up//在环回地址上绑定虚拟IP地址172.17.2.4
/sbin/route add-host$VIP dev lo:0//真实服务器启动时添加VIP的网口lo:0
echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo"2">/proc/sys/net/ipv4/conf/all/arp_announce
#:注释:这四句目的是为了关闭ARP广播响应
sysctl–p//通过sysctl命令动态配置内核,使上述设置生效
(3)station8:172.17.2.8
#vim/usr/local/lvs/realserver//真实服务器的启动脚本
文件内容与Real Server 1:172.17.2.6的/usr/local/lvs/realserver相同
(4)分别启动LVS服务
172.17.2.1 /usr/local/lvs/lvs start//启动LVS虚拟服务器脚本
172.17.2.6 /usr/local/lvs/Lvs/realserver start//启动真实服务器脚本
172.17.2.8 /usr/local/lvs/Lvs/realserver start//启动真实服务器脚本
(5)启动station6,station8 apache
/usr/local/apache2/bin/apachectl start//启动Apache服务器
(6)测试VIP 172.17.2.4
访问:http://172.17.2.4
多开几个窗口刷新几次,应该可以看到网页内容转换轮循打开station6,station8的主页。
4.配置基于高可用LVS+heartbeat
对主调度器A,从调度器B都要进行配置
(1)安装heartbeat
#groupadd-g 694 haclient//添加haclient组
#useradd-u 694-g haclient hacluster//添加hacluster用户,所属组为haclient
#tar–zxvf Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.gz//解压heartbeat压缩文件
#cd Heartbeat-STABLE-2-1-STABLE-2.1.4
#./ConfigureMe configure//配置
#make&&make install//编译与安装
#cp doc/ha.cf doc/haresources doc/authkeys/etc/ha.d///拷贝heartbeat的主配置文件ha.cf
#cp ldirectord/ldirectord.cf/etc/ha.d/
heartbeat安装完成。
(2)配置主文件/etc/ha.d/ha.cf//ha.cf为heartbeat的主配置文件
debugfile/var/log/ha-debug//调试日志文件文件,取默认值
logfile/var/log/ha-log//日志文件位置
logfacility local0//日志等级,取默认值
keepalive 2//指定主备服务器多久发送一次心跳
deadtime 20//指定20秒没有收到对方心跳就认为对方已经DOWN机
warntime 10//10秒没有收到心跳,便发出警报。
initdead 120//对方DOWN后120秒重新检测一次
udpport 694//指定监听端口
bcast eth0//心跳监听网口,这里为eth0
ucast eth0 172.17.2.1//采用网卡eth0的udp单播来通知心跳,eth0的IP
auto_failback on//主节点恢复后,自动收回资源
watchdog/dev/watchdog//看门狗。如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启
node station1//指定主备服务器的主机名称,即在hosts文件中指定的。
第一个node为主服务器,第二个node为备服务器
node station3
ping_group group1 172.17.2.1 172.17.2.3//这两个IP都不能ping通时对方即开始接管资源。
respawn hacluster/usr/lib/heartbeat/ipfail//启用ipfail脚本
apiauth ipfail gid=haclient uid=hacluster//指定运行ipfail的用户。
(3)认证文件(/etc/ha.d/authkeys),authkeys文件的作用是用来设置心跳信息的加密方式。每个值对应一种算法,这个算法是在主节点和从节点间数据校验用的,选取一种认证方式,这个文件的权限必须是600
#vim/etc/ha.d/authkeys
auth 1//认证标示
1 crc//采用crc循环冗余码校验
#sha1 sha1_any_password//sha1的验证方式,没有采用
#md5 md5_any_password//md5的验证方式,没有采用
详细的说明请参考:www.Linux-ha.org
(4)资源文件/etc/ha.d/haresources
这个文件配置的是节点要管理的资源也就是高可用服务,这些资源在主节点DOWN时,从节点就会开启这些资源。Heartbeat认为配置资源名称start/stop就可以开启/停止这些资源。
#vim/etc/ha.d/haresources
station1 172.17.2.4 ipvsadm ldirectord httpd//设置station1为主调度器,集群服务器的IP地址为172.17.2.4,ipvsadm ldirectord为heartbeat控制的资源脚本,集群的服务有httpd
#chmod 600/etc/ha.d/haresources//对资源文件/etc/ha.d/haresources下权
(5)启动heartbeat
#/usr/lib/heartbeat/heartbeat start
(6)配置Ldirectord
Ldirectord的作用是监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord。
配置(/etc/ha.d/ldirectord.cf):是ldirectord进程的配置文件,该进程用来监视真实服务器的运行状况,如果真实服务器不能响应请求则把它排除在转发列表外。
checktimeout=3//设置真实服务器的超时时间
checkinterval=1//监视真实服务器的时间间隔
fallback=127.0.0.1:80//如全部真实服务器失败,则转发至本地
autoreload=yes//改变配置文件内容,不需要重新ldirectord
logfile="/var/log/ldirectord.log"//指定日志位置
quiescent=yes
virtual=172.17.2.4:80//指定虚拟IP
real=172.17.2.6:80 gate//指定真实服务器IP及监听端口
real=172.17.2.8:80 gate
fallback=127.0.0.1:80 gate
service=http
request="index.html"//监听测试页面名称,这个页面放入真实服务器Web服务的根目录
receive="Test Page"//指定测试页面返回内容
virtualhost=some.domain.com.au//虚拟服务器的域名
scheduler=rr #指定转发算法,这里的算法要和LVS脚本的算法一样
(7)启动ldirectord
启动时如果提示ldirectord某行出错,一般是有些运行需要的软件没安装,大部分是perl开头的软件包。
解决办法:http://search.cpan.org搜索Mailtools模块MailTools-2.04.tar.gz
(8)测试:
①将hertbeat在主从调度器上,realserver在真实服务器上开启,测试其是否切换与转发正常工作。
②关闭主节点(或者把主调度器的网线拔掉),在备份节点上执行ipvsadm–ln命令。会发现执行结果与主节点的执行结果一样,表示从节点将自动接管directorserver服务。
至此Apache Web集群平台搭建完毕。
3.3.5 考核要点
表3.3.2 《Web集群服务器的架构》考核标准
3.3.6 能力拓展
基于LVS的负载均衡技术架设Linux Web集群。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。