Chinaunix首页 | 论坛 | 博客
  • 博客访问: 784965
  • 博文数量: 201
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2391
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-06 22:16
文章分类

全部博文(201)

文章存档

2011年(1)

2010年(2)

2009年(57)

2008年(141)

我的朋友

分类: LINUX

2009-05-18 21:48:09

基于 CentOS 5.2 的RHCS 的高可用性解决方案

作者:liheng



本文所参考的资源:
史应生《红帽集群高可用性配置管理和维护之最强版》、《基于红帽RHEL5U2 GFS2+ISCSI+XEN+Cluster 的高可性解决方案-最新技术版》
鸟哥Linux 私房菜: 网友分享区的 《 MySQL on RHCS 》
RedHat doc:
《 Cluster_Suite_Overview5.2 》、《 Cluster_Administration5.2 》

        感谢以上IT Pro的无私奉献,没有你们,我想我不可能体验到RHCS !




























简介:
不间断的无故障的业务运行环境是每一个企业IT系统部署要求的重中之重。任何一个发生在关键服务上的停顿故障都会导致直接和间接的企业经济损失以及客户的满意度下降。虽然Linux操作系统已经提供高度的容错能力,但是关键业务系统仍旧需要成熟的技术来实现服务的高可用性,尽可能减少和缩短服务停顿的次数和时间。传统的通过冗余和复制硬件设备的解决方式既昂贵且局限性大,用户只能通过这样的方式解决企业中最关键的业务应用对于可用性的要求。 因此很多企业内部的重要应用由于缺乏高性价比的方案而失去保护,面临着灾难后的长时间恢复和数据的丢失。 同样的情况下,当企业的IT部门需要对关键应用所处软硬件环境进行调整,或仅仅是作系统维护的时候,这种计划内的停机也会造成应用重新上线前的长时间服务停止以及潜在的数据丢失。
计算机集群作为一种技术近两年也越来越受到大家的关注,这也是因为海量信息的不断厂商要求计算机提升自己的性能,在不能有效的更换硬件设备的情况下,就要通过网络手段,将多台服务器通过高速的局域网连接,实现统一管理,分布式运算,提高整体系统的性能。
商业的 Unix 市场中,高可用性 ( High Availability ) 是销售Unix 服务器解决方案的关键。事实上每个 Unix 供货商都有他们自己的高可用性软件解决方案,例如IBM 的高可用性丛集软件解决方案,就是 AIX 上的HACMP ( High Availability Cluster Multi-Processing ) 。其它主要的 Unix 供货商像 HP,Sun,DEC 和其它的供货商有许多类似的软件解决方案可用。High Availability 是现今销售Unix 给许多企业的关键。特别对于需要web-based 和其它必须一整年,每周七天,每天 24 小时可用的服务器。至于新窜起的网格运算市场而言更是如此。
Red Hat 公司在2007年发布Red Hat Enterprise Linux 5 时,就将原本是作为独立软件发售的用于构建企业级集群的集群套件redhat cluster suite(RHCS,红帽集群套件)集成到了操作系统中一同发布,将RHCS集成到系统中,这意味着将是RHEL产品在集群功能方面的提升。而且RHCS的安装与管理也将会变得更容易掌握。
红帽的企业集群解决方案(RHCS)是全球领先的高可用性解决方案,专为红帽企业Linux量身定做,是全球企业Linux厂商中唯一提供原生集群解决方案的厂商。RHCS集群经过红帽公司全球研发团队以及广大开发者社区的多年打造,已经成为企业级Linux平台上顶尖的高可用解决方案。
红帽RHCS集群采用了业界成熟的技术和主流国际标准,遵循高度安全和可靠的苛刻要求,被广泛的部署在电信,金融,政府,军队,制造,医疗,商贸,教育等各行业。
          通过长年于主流硬件制造商及软件制造商的研发协作与合作,红帽RHCS集群已经在几乎所有主流硬件平台上运行,并且高度支持主流的数据库及中间件应用,针对绝大多数网站/网络所必须的应用服务也提供了完整的支持。 红帽RHCS集群方案已经预置了对主要网络和数据库服务的支持,用户可通过红帽全球专家服务(GlobalProfessional Service)完成对特殊服务和应用的集群定制部署。
        以上花了如此一大篇的篇幅介绍集群技术与Red Hat Cluster Suite ,那么集群究竟是怎么一回事?那么Red Hat Cluster Suite 又凭什么能够成为Linux 平台上顶尖的高可用解决方案呢?下面就以这两个问题展开讨论:
一、什么是集群?
一个集群是由两台或更多台计算机(也可以称为节能或成员)同时工作来执行一个任务。群集一般可以分为存储、高可用群集、高性能群集、负载均衡群集四大类。下面分别对这四类集群进行简单说明,以及介绍在红帽群集套件是通过哪一部分功能来实现这一系列功能。
存储集群在一个集群中为服务提供一个一致的文件系统映像,允许服务同时去读写一个单一的共享文件系统。存储集群通过将数据放到一个共享文件系统中从而消除了在应用程序间拷贝数据的麻烦,并提供一个单一的备份和故障恢复点。Red Hat Cluster Suite通过Red Hat GFS提供一个存储集群。
Red Hat Cluster Suit高可用性集群通过消除单一故障点和节点故障转移功能(当一个集群节点失败后将服务转移到其他节点上)来提供高可用性。节点故障转移功能对客户端是透明的,当节点失败后客户端并不会看到节点之间的服务转移。Red Hat Cluster Suite通过高可用性服务管理组件来提供一个高可用性集群。
负载均衡集群将服务请求调度到集群中的多个节点上。负载均衡是一个低成本、高可用性的集群,因为你可以根据负载情况灵活的添加和删除节点。在负载均衡集群中当一个节点失败后,调度器会发现这个失败并停止向此节点发送请求。节点的失败对于客户端是透明的。Red Hat Cluster Suite 通过LVS(Linux Virtual Server)来提供负载均衡集群。
高性能集群在节点上执行并行计算。高性能集群允许应用程序并行计算从而提高应用程序性能。

NOTE:红帽群集套件暂不支持高性能群集的应用。

二、什么是 RHCS ?
RHCS即 RedHat Cluster Suite ,中文意思即红帽集群套件。红帽集群套件(RedHat Cluter Suite, RHCS)是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。
对于需要最大正常运行时间的应用来说,带有红帽集群套件(Red Hat Cluster Suite)的红帽企业 Linux 集群是最佳的选择。红帽集群套件专为红帽企业 Linux 量身设计,它提供有如下两种不同类型的集群:
1、应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
2、IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡
利用红帽集群套件,可以以高可用性配置来部署应用,从而使其总是处于运行状态-这赋予了企业向外扩展(scale-out)Linux 部署的能力。对于网络文件系统(NFS)、Samba 和Apache 等大量应用的开源应用来说,红帽集群套件提供了一个随时可用的全面故障切换解决方案。而对于其它大多数应用来说,客户可以使用红帽集群套件提供的模板来创建自定义的故障切换脚本。如果需要,还可以采用红帽专业服务(Red Hat Professional Services),由专业人员提供量身定制的红帽集群套件部署服务。
技术要点 :
1、最多支持128个节点(红帽企业Linux 3 和红帽企业Linux 4 支持 16 个节点)。
2、可同时为多个应用提供高可用性。
3、NFS/CIFS 故障切换:支持 Unix 和 Windows 环境下使用的高可用性文件。
4、完全共享的存储子系统:所有集群成员都可以访问同一个存储子系统。
5、综合数据完整性:使用最新的 I/O 屏障(barrier)技术,如可编程的嵌入式和外部电源开关装置(power switches)。
6、服务故障切换:红帽集群套件可以确保及时发现硬件停止运行或故障的发生并自动恢复系统,同时,它还可以通过监控应用来确保应用的正确运行并在其发生故障时进行自动重启。
红帽集群套件可与 x86、AMD64/EM64T 和 Itanium 计算机上运行的红帽企业 Linux AS 和红帽企业 Linux ES 共同使用。像所有红帽解决方案一样,它也是以年度订阅的方式通过红帽网络提供 。

三、RHCS有哪几部分组成?
通过前面的介绍,大家知道RHCS是一套综合的软件组件包,那么RHCS是由哪几部分组成的呢?RHCS主要有下面部分组成:
集群架构—提供一个基本功能使节点作为集群工作在一起:配置文件管理,成员关系管理,锁管理和栅设备。
高可用性服务管理--提供节点失败转移服务,当一个节点失败后将服务转移到另一个节点上。
集群管理工具—通过配置和管理工具来配置和管理Red Hat集群。
Linux Virtual Server (LVS)—LVS提供一个基于IP的负载均衡功能,通过LVS可以将客户请求均匀的分配到集群节点上。
你可以通过下面的组件补充Red Hat集群:
Red Hat GFS (Global File System)--GFS为Red Hat Cluster Suite提供一个集群文件系统,CFS允许多个节点在块级别上共享存储。
Red Hat Cluster Suit
   * Cluster Logical Volume Manager (CLVM)--提供逻辑卷管理集群存储。
   * Global Network Block Device (GNBD)--GFS的一个补充组件用于将存储在块级别导出到以太网上。
在上面介绍了如此多的与集群、RHCS相关的内容,现在就言归真传了,讲一些真正实用的,与本文密切相关的内容,如读者对其他相关的内容感兴趣,可以自己去找找。因为本文主要是针对于如何使用RHCS构建一个高可用的集群环境,故本文只会针对于RHCS中的高可用集群相关的内容进行介绍,其他的内容就不作介绍啦(如果介绍下去,我想那不是一两篇文档的事啦)。
首先,先来熟悉一下本文需要掌握的与RHCS相关的知识点:
1、集群节点(Cluster Node)
集群节点也称为集群成员,说白了就是一台运行着的服务器。
2、故障切换域 (Failover domain)
故障切换域是多个群集节点的一个子集,用来执行特定的群集服务。
Note:故障切换域是不需要操作的。
为了维护数据的完整性,一个群集服务可以在同一个时间里只运行在一个群集节点上。在一个故障切换域里可以指定个容错优先级。特定的故障切换优先级包含分配一个故障切换优先级别到故障切换域里的每一个节点。故障切换优先级别用来决定故障转移次序-----决定哪一个节点上运行的群集服务应该进行故障切换。如果没有指定故障切换优先级,一个群集服务可以故障切换到故障切换域里的任何节点上。同样,如果你要限制一个群集服务只是运行在与它自己相关联的故障切换域的一个指定的节点上,你也可以对它进行指定(当同一个无限制的故障切换域相关联的时候,在一个故障切换域里没有任何成员是可用的事件中,群集服务可以在任何节点启动)。

在上图中,故障切换域1(Failover Domain 1)是配置在它自己的域里进行可限制的故障切换的,因为,群集服务X只能在节点A与节点B之间进行故障切换。故障切换2(Failover Domain 2)同样也是配置在它们自己的域里进行可限制的故障切换。另外,它还进行了故障切换优先级的配置。在故障切换域2中的优先级配置中,节点C的故障转移优先级别是1,节点B的优先级别是2,节点D的优先级别是3。如果节点C出现故障,群集服务Y将故障切换到节点B,如果不能故障切换到节点B,那么将尝试故障切换到节点D。故障切换3(Failover Domain 3)是配置成没有优先级和限制性的。如果节点上的群集服务Z运行出错的话,群集服务Z尝试故障切换到故障切换域3里的任意一个节点上。如果这些节点都是不可用的,群集服务Z将故障切换到集群中的任何一个节点。

上图显示的是一个高可用的群集的实例,在这个实例中一个WEB服务器命名为“Content-Webserver”,它运行集群节点B上,并且集群节点B是在一个故障切换域里,在这个故障切换域里包含节点A、B、D。另外,故障转移域是配置具有一个故障转移优先级的,这个故障转移的顺序是:B-D-A。并且故障转移只能在这个故障转移域的节点内进行。群集服务包含如下集群资源:
IP Address resource-------IP Address 10.10.10.201
一个应用程序资源命名为“httpd-content”-----一个WEB服务器应用程序的初始脚本“/etc/init.d/httpd(指定的httpd)”
一个文件系统资源-------- RedHat GFS 命名为“gfs-content-webserver”

客户端访问群集服务是通过 IP 地址10.10.10.201。WEB 服务器应用程序 httpd-content 开始互动操作。httpd-content 应用程序使用 gfs-content-webserver 文件系统。如果节点B出错,content-webserver群集服务将故障切换到节点D,如果节点D是不可用的或者同样也出错,服务将故障切换到节点A。故障转移将会造成不会显示任何错误信息给客户端。群集服务将通过一个相同的IP地址可以从另一个集群节点上实现可访问,因为它是故障切换前的。

故障切换域是可以在一个发生故障的节点中,用来选择子组成员有资格来运行群集服务。故障切换域的特性可以在域创建或域创建之后的时候指定,他们是:
无限制的(尽管一个成员子集是首选的,群集服务分配到这个域任何可用的成员上运行)
受限制的(限制成员运行一个指定的群集服务,如果在一个受限制的故障切换域里没有任何一个成员是可以的,服务将不能启动)
无序的(运行群集服务的成员是从可用的故障切换域成员中选择的,而不是通过优先权排序)
有序的(在一个故障切换域中指定一个首选成员序列表)
默认,故障切换域是无限制和无序列的。
在群集具有几个成员时,使用一个受限制的故障切换域可以最小化设置群集来运行一群集服务(如 httpd,)的工作量。这就需要你在所有运行群集服务的成员上设置配置相等性,而不是建立在整个集群运行群集服务。在受限制的故障切换域里必须设置唯一的成员与群集服务相关联。
3、资源(Resource)
有许多集群资源类型是可以配置的,以下的三个资源类型将用来定义提供一个高可用的WEB服务功能。
脚本(Script)
IP address
File system
3.1脚本(Script)
脚本资源基本上是参考一个脚本的执行,这个脚本可以是预先存在的或出于一个指定目标撰写的。
3.2IP address
这个资源地址可以用于任何需要资源地址的群集服务,在同一个群集服务相关联后,如果认为它是必需的,可以通过一个群集成员重新设置,或者通过一个GUI接口(luci)或命令行。如果任何群集成员提供的服务变得不可用(如硬件或软件错误,网络/连通性错误),服务IP将自动迁移到一个有资格的成员上。通常,一部分地址是为不同的群集服务所保留的。
必须定义一个地址给WEB服务用来发布HTML内容。

4、服务(Service)
        在这里,这个服务(Service)与我们平时所接触到的 /etc/init.d/httpd 等应用程序是不同的。在RHCS高可用性集群中,服务(Service)实际上指的是一系列资源(Resource)的集合。为什么这么说呢?大家想一想,在一个WEB服务器应用的集群中,如果集群中的主WEB服务器宕机啦,另一台备用的服务器开始接管WWW服务,只需要启动 /etc/init.d/httpd 就行了吗?在一个高可用性集群中,这样是不行的,备份服务器需要全部接管主WEB服务器所有与集群相关的资源,包括集群使用的IP地址、网页文件存放的目录(存放在 sharedisk 上)等,在备份服务器接管主服务器的资源时,首先接管IP地址,之后是网页文件存放目录(Sharedisk),最后才是启动 /etc/init.d/httpd start 命令。

5、Fence Device
通过栅设备可以从集群共享存储中断开一个节点。栅设备从共享存储切断I/O以保证数据的完整性。当CMAN确定一个节点失败后,它在集群结构中通告这个失败的节点,fenced进程将失败的节点隔离,以保证失败节点不破坏共享数据。Fenced运行在每个节点上。
Red Hat Cluster Suite提供下面集中隔离方式:
   * 电源栅设备
   * 光线通道栅设备
   * GNBD栅
   * 其他栅设备
栅设备实例
当A上的栅进程发现D节点失效时,它通过栅代理通知电源控制器将D节点隔离。


电源栅设备实例 
当A上的栅进程发现D节点失效时,它通过栅代理通知光纤通道交换设备将D节点隔离

光纤通道交换栅设备实例
那么为什么RHCS需要使用 Fencing device 呢?在现实生活中,服务器有时都会出现负载过重,尤其是像数据库服务器,在服务器负载过重时,负载过重会使到服务器完全处理不过来手上的工作,甚至连 Heartbeat 也无法传递,但此时服务器实际上并没有宕机,在经过一段时间后,负载没有那么重啦,服务器又重新开始正常工作,Heartbeat 也可以正常传递啦。这里面就有一个问题啦,在RHCS的机制里,主服务器与备用服务器是通过 Heartbeat  来进行集群信息传递的,在一个规定的时间里,备份服务器都会通过  Heartbeat 与主服务器取得联系,以确定主服务器是否是工作正常。当备用服务器发现与主服务器的 Heartbeat 不通时,没有产生响应时,备用服务器就会判断主服务器已经宕机啦,那么备用服务器就会开始接管主服务器上的集群服务。但是正如上面所描述的,如果主服务器是由于负载过重,而无法响应备用服务器的 Heartbeat ,但过了一段时间主服务器又开始恢复工作啦,集群服务中包含有File System资源,这时就有可能会造成两台服务器同时挂载文件系统,就会造成文件系统数据不一致,严重的情况可能会损坏整个文件系统。
                RHCS为了避免这种情况,就使用了 Fencing Device 。当RHCS发现主服务器的Heartbeat 不通时,第一件事不是先接管 Service ,而是利用 Fencing Device 将主服务器重开机(poweroff),然后备用服务器再开始接管Service ,这样就不会发生两台服务器同时挂载文件系统资源的情况啦。

6、Conga
                Conga 是一个综合的软件组件集,用来提供红帽集群和存储的集中控制和配置管理。Conga 主要提供以下功能:
(1)用于管理红帽集群和存储的WEB图形化接口
(2)集群数据和支持包的自动部署
(3)易于整合现有的集群
(4)不需要重新验证
(5)集群状态和日记的集成
(6)细粒度用户权限控制
在Conga 里主要的组件是 luci 和 ricci ,它们都是单独安装的。luci 是一个服务器(server)组件,它运行在一台计算机上,通过 ricci 可以同多个集群和计算机联系。ricci 是一个代理(agent)组件,运行在每一台通过 Conga进行管理的计算机上。
第二,再来介绍一下本次所使用到的技术:
1、共享存储使用了基于ISCSI的IP-SAN技术。iSCSI集SCSI、以太网和TCP/IP等技术于一身,支持iSCSI技术的服务器和存储设备能够直接连接到现有的IP交换机和路由器上,具有低廉、开放、大容量、传输速度高、安全等诸多优点,最适合需要在网络上存储和传输大量数据的应用环境,比如广电视频制作和媒资系统,视频监控系统,IPTV系统,数据备份系统,以及许多的对IOPS和带宽性能要求不是还很高的数据库存储系统、大容量文件存储系统。
2、基于Cenos5.2 的RHCS高可用集群的实现,真正避免单点故障,保证服务的不间断运行 。CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。本次所有服务器上运行的操作系统都为 CentOS 5.2
最后,我们来首先一下本次试验的环境:
3、本次环境的网络拓扑:

4、各个服务器IP的地址规划
服务器主机名        IP地址        承担的角色
Iscsitarget.cqh.com        192.16898.240        IscsiTarget Server ,luci server
Rs-01.cqh.com        192.168.98.231        Iscsi ininiator,ricci agent ,Cluster node
Rs-02.cqh.com        192.168.98.232        Iscsi ininiator,ricci agent ,Cluster node

系统安装:

语言选择:简体中文
键盘布局:U.S.English
硬盘分区:
服务器主机名        IP地址        硬盘分区(8G)
Iscsitarget.cqh.com        192.16898.240        /dev/sda1 /boot 100M
/dev/sda2 /swap 512M
/dev/sda3 /     5G
/dev/sda5      500M  
/dev/sda6      500M
/dev/sda7      500M

Rs-01.cqh.com        192.168.98.231        /dev/sda1 /boot 100M
/dev/sda2 /swap 512M
/dev/sda3 /     7.4G
Rs-02.cqh.com        192.168.98.232        /dev/sda1 /boot 100M
/dev/sda2 /swap 512M
/dev/sda3 /     7.4G
注:iscsitarget.cqh.com 中的 /dev/sda5、/dev/sda6、/dev/sda7 用于 iscsi 共享使用,可以暂不用划分分区,系统安装完成后,再进行分区。

主机名与网络设置:按IP地址与主机名规划表进行设置
时区:Asia/ShangHai
Root password:
包安装选择:clustering、 storage clustering,开发工具包全选、服务器中选择 web 服务器与windows文件服务器
系统安装完成后,进入系统,使用ntsysv 命令,设置开机自启动项,将以下启动项禁用:
NetworkManager
NetworkManagerDispatcher
Acpid
Apmd
Atd
Auditd
Avahi-daemon
Avah-dnsconfd
Bluetooth
Cpuspeed
Cups
Gpm
Hidd
Ip6tables
Iptables
Irqbalance
Isdn
Lvm2-monitor
Mcstrans
Mdmonitor
Netfs
Nfslock
Pcscd
Readahead_early
Restorecond
Rpcgssd
Rpcidmapd
Sendmail
Smartd
Xend
Xendomains
Xfs
Yum-updatesd
禁用 SELINUX
[root @iscsitarget root]# vi /etc/selinux/conifg
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
将 SELINUX=enforcing
改成
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted
在iscitarget server 上挂载Centos5.2 的第4张光盘到电脑上,找到 scsi-target-untils-0.0-0.20070620snap.el5.i386.rpm
[root @ iscsitarget ~] # rpm -ivh scsi-target-untils-0.0-0.20070620snap.el5.i386.rpm
用 fdisk 在本地硬盘上增加三个分区/dev/sda5、/dev/sda6、/dev/sda7(分区的结果与下图相同),不用格式化。作为rs-01与rs-02 的共享磁盘。

重新启动电脑,以使刚新增的分区表生效
[root @ iscsitarget ~] # reboot
启动tgt (Linux target framework )服务
[root @ iscsitarget ~] # service tgtd start
Tips:
Linux target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance. The key goals are the clean integration into the scsi-mid layer and implementing a great portion of tgt in user space.
设置 tgtd 服务开机自启动
[root @ iscsitarget ~] # chkconfig —level 35 tgtd on
新增 target device ,使用 tgtadm 定义 iscsi target 的 qualified 名字
[root @ iscsitarget ~] # tgtadm —lld iscsi —op new —mode target —tid 1 -T iqn.2008-12.com.cqh.rhcs-storage
[root @ iscsitarget ~] # tgtadm —lld iscsi —op new —mode target —tid 2 -T iqn.2008-12.com.cqh.rhcs-storage-2
[root @ iscsitarget ~] # tgtadm —lld iscsi —op new —mode target —tid 3 -T iqn.2008-12.com.cqh.rhcs-storage-3

使用 tgtadm 将上一步新建的target device 加入分区
[root @ iscsitarget ~] # tgtadm —lld iscsi —op new —mode logicalunit —tid 1 —lun 1 -b /dev/sda5
[root @ iscsitarget ~] # tgtadm —lld iscsi —op new —mode logicalunit —tid 2 —lun 1 -b /dev/sda6
[root @ iscsitarget ~] # tgtadm —lld iscsi —op new —mode logicalunit —tid 3 —lun 1-b /dev/sda7

利用下面的指令查看 target device 的内容
[root @ iscsitarget ~] # tgtadm —lld iscsi —op show —mode target
Target 1: iqn.2008-12.com.cqh.rhcs-storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
       LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 525M
            Backing store: /dev/sda5
    Account information:
    ACL information:
Target 2: iqn.2008-12.com.cqh.rhcs-storage-2
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf2:0
            SCSI SN: beaf20
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf2:1
            SCSI SN: beaf21
            Size: 517M
            Backing store: /dev/sda6
    Account information:
    ACL information:
Target 3: iqn.2008-12.com.cqh.rhcs-storage-3
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf3:0
            SCSI SN: beaf30
            Size: 0
            Backing store: No backing store
        LUN: 1
           Type: disk
            SCSI ID: deadbeaf3:1
            SCSI SN: beaf31
            Size: 533M
            Backing store: /dev/sda7
    Account information:
    ACL information:



使用 tgtadm 允许客户端访问这三个目标逻辑卷
[root @iscsitarget ~] # tgtadm —lld iscsi —op bind —mode target —tid 1 -I ALL
[root @iscsitarget ~] # tgtadm —lld iscsi —op bind —mode target —tid 2 -I ALL
[root @iscsitarget ~] # tgtadm —lld iscsi —op bind —mode target —tid 3 -I ALL

也可以只指定某一台主机可以访问这三个逻辑卷,如果只想让192.168.98.231可以访问共享存储,就可以用以下指令可以实现
[root @iscsitarget ~] # tgtadm —lld iscsi —op bind —mode target —tid 1 -I 192.168.98.231

使用 tgtadm 验证所有的目标逻辑卷是否定义正确
[root @iscsitartget ~] # tgtadm —lld iscsi —op show —mode target | grep Target


因为上面的指令设定结果,重新开机后便会消失,而且现版本的 target server, Red Hat 尚未修改成 System V 服务,所以如果需要让上述设定在重新开机后依然有效。就需要将上述设定指定全部写进 /etc/rc.local 文件中,让系统在重新开机时,再自动执行一次
[root @iscsitartget ~] #  vi /etc/rc.local#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2008-12.com.cqh.rhcs-storage
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2008-12.com.cqh.rhcs-storage-2
tgtadm --lld iscsi --op new --mode target --tid 3 -T iqn.2008-12.com.cqh.rhcs-storage-3
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sda6
tgtadm --lld iscsi --op new --mode logicalunit --tid 3 --lun 1 -b /dev/sda7
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 3 -I ALL

安装配置 Iscsi-initiator 客户端 rs-01.cqh.com
挂载CentOS5.2安装盘的第一张安装盘到电脑上,找到 iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm
[root @ rs-01 Centos] # rpm -ivh iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm

启动 Iscsi 服务
[root @ rs-01 Centos] # service iscsi start
设置 iscsi 服务开机自启动
[root @ rs-01 Centos] # chkconfig —level 35 iscsi on

运行下面的命令,discorery iscsitarget 上的逻辑卷:
[root @ rs-01 Centos] # iscsiadm -m discovery -t sendtargets -p 192.168.98.240
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-2
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-3

出现这样的结果,说明了 iscsitarget 上的逻辑卷已经被成功发现。
使用 iscsiadm 登录 target
[root @ rs-01 Centos] # iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage -p 192.168.98.240 -l




(34.01 KB) 2009-4-30 18:21
 

因为上面的指令设定结果,重新开机后便会消失,而且现版本的 target server, Red Hat 尚未修改成 System V 服务,所以如果需要让上述设定在重新开机后依然有效。就需要将上述设定指定全部写进 /etc/rc.local 文件中,让系统在重新开机时,再自动执行一次
[root @iscsitartget ~] #  vi /etc/rc.local#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2008-12.com.cqh.rhcs-storage
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2008-12.com.cqh.rhcs-storage-2
tgtadm --lld iscsi --op new --mode target --tid 3 -T iqn.2008-12.com.cqh.rhcs-storage-3
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda5
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/sda6
tgtadm --lld iscsi --op new --mode logicalunit --tid 3 --lun 1 -b /dev/sda7
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ALL
tgtadm --lld iscsi --op bind --mode target --tid 3 -I ALL

安装配置 Iscsi-initiator 客户端 rs-01.cqh.com
挂载CentOS5.2安装盘的第一张安装盘到电脑上,找到 iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm
[root @ rs-01 Centos] # rpm -ivh iscsi-initiator-utils-6.2.0.868-0.7.el5.i386.rpm

启动 Iscsi 服务
[root @ rs-01 Centos] # service iscsi start
设置 iscsi 服务开机自启动
[root @ rs-01 Centos] # chkconfig —level 35 iscsi on

运行下面的命令,discorery iscsitarget 上的逻辑卷:
[root @ rs-01 Centos] # iscsiadm -m discovery -t sendtargets -p 192.168.98.240
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-2
192.168.98.240:3260,1 iqn.2008-12.com.cqh.rhcs-storage-3

出现这样的结果,说明了 iscsitarget 上的逻辑卷已经被成功发现。
使用 iscsiadm 登录 target
[root @ rs-01 Centos] # iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage -p 192.168.98.240 -l


[root @ rs-01 Centos] # iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage-2 -p 192.168.98.240 -l

[root @ rs-01 Centos] # iscsiadm -m node -T iqn.2008-12.com.cqh.rhcs-storage-3 -p 192.168.98.240 -l

使用 fdisk -l 检验被识别的设备名
[root @ rs-01 Centos] # fdisk -l

图中的 /dev/sdb、/dev/sdc、/dev/sdd 都是 iscsitarget 上的逻辑卷,分别被识别成了本地的/dev/sdb、/dev/sdc、/dev/sdd 。
在这三个磁盘上,分别建立一个分区,建立成功后结果就为下图所示:
[root @ rs-01 Centos] # fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         778     6144862+  83  Linux
/dev/sda3             779         843      522112+  82  Linux swap / Solaris
Disk /dev/sdb: 551 MB, 551061504 bytes
17 heads, 62 sectors/track, 1021 cylinders
Units = cylinders of 1054 * 512 = 539648 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1021      538036   83  Linux
Disk /dev/sdc: 542 MB, 542836224 bytes
17 heads, 61 sectors/track, 1022 cylinders
Units = cylinders of 1037 * 512 = 530944 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1022      529876+  83  Linux
Disk /dev/sdd: 559 MB, 559286784 bytes
18 heads, 60 sectors/track, 1011 cylinders
Units = cylinders of 1080 * 512 = 552960 bytes
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1011      545910   83  Linux

在 rs-01.cqh.com 或 rs-02.cqh.com 上将 /dev/sdb1、/dev/sdc1、/dev/sdd1格式化成ext3文件系统。


在 iscsi target 上配置 luci
初始化 luci
[root @iscsitarget ~] # luci_admin init

设置 luci 服务开机自启动
[root @iscsitarget ~] # chkconfig —level 35 luci on
[root @iscsitarget ~] # service luci start
打开Firefox,在地址栏中键入 ,进入conga 的登录界面,输入登录的用户名admin 和初始化 luci 时设置的密码,点击登录

首先新建一个 cluster,点击顶端 cluster,点击左侧 clusters 栏中的 Create a New cluster 项,显示 Create a new cluster 编辑页面,如下:

输入项说明:
Cluster Name:创建的新集群的名称,集群名称不能超过15个字符
Node Hostname:要加入集群中的节点主机名称
Root Password:加入集群节点主机的 root 用户密码
Download packages:从Luci服务器下载集群软件包
Use locally installed packages:节点使用本地集群安装包
Enable Shared storage suupport:启用共享存储支持,如果需要使用共享存储的话,勾选此项。
Reboot nodes bdfore joining cluster :在加入集群之前重启节点计算机
Check if node passwords are indentical:检查节点的root 密码是不是相同的。

按输入项要求输入内容后,点击 view SSL_cert fingerprints 显示每台节点服务器的SSL验证信息,如果验证成功,会显示如 status messages 中的信息。确认无误后,点击 submit 按钮提交,正在创建集群

在经过对添加的两个节点的进行:Install----Reboot----Configure----Join.在经过这一番动作后,如果没有出错的话,集群就创建成功啦。显示新建集群 Cluster-001 的全局集群属性列表,内容包括:General、Fence、Multicast、Quorum partition。

General                -----                显示集群名称、集群配置的版本号、高级集群属性。
Fence                  -----                提供配置 Fence daemon 属性参数的接口。
Multicast         ----                提供配置多播配置属性的接口,这些属性包括:让集群选择默认多播
地址与手工指定多播地址
Quorum Partition ----        提供配置集群仲裁分区属性的接口

Fence 列表内容:

Multicast 列表内容:

仲裁分区列表内容:

点击 Clusters 栏中的 cluster list ,然后点击集群名称 cluster-001,在左边栏里显示 cluster-001 的配置栏,点击配置功能下节点名称:rs-01.cqh.com 显示节点名称:rs-01.cqh.com的状态:

点击节点:rs-02.cqh.com 显示其状态信息

状态信息显示,当前的状态为 cluster member ,闭幕式显示 cman、rgmanager 当前正在运行 ,并在集群启动时自动启用,如果这两个程序没有运行可以手工在节点上运行启动。
下面开始创建集群的步骤,这里创建的流程步骤如下:Failover domain → cluster resource→ service → Fence device 。

创建 failover domain,点击顶端的 cluster ,在Cluster list 中点击集群:cluster-001,在左下端的 cluster-001 栏中点击 Failover domain | Add a Failover domain ,显示新增 Failover domain 编辑页面:

参数解析:
Failover domain name :Failover domain 名称,建议使用一个易记有代表性的的词语。
Prioritized :在 Failover domain 中启用域中成员优先级设置
Restrict Failover to this domain’s member :在 Failover domain 中启用服务故障切换限制在这个域中的成员。
Do not fail back services in this domain :在这个域中不使用故障回复服务
在Failover domain member 区域勾选 member 处的复选项框,将节点加入 Failover domain,在 priority 处设置成员的优先级别,优先级1的优先级别最高。
点击 submit  按钮提交确定,新增 Failover domain 成功。

创建 resource
在左下端的 cluster-001 栏中点击 Resource | Add a Resource ,显示新增资源页面,在选择资源类型下拉框中选择一个资源类型,这里根据实际情况,选择 IP Address、Scripts\File Systerm

选择IP地址

创建 File System resource

创建 scripts resource

创建 service
在左下端的 cluster-001 栏中点击 Service | Add a Service ,显示新增服务编辑页面,在 service name 处输入服务的名称,启用 automatically start this serivce 选项,在Failover domain 中选择Failover domain ,Recovery policy 处选择 Relocate ,分别将IP Address、Scripts、File system 资源添加进服务里面。


添加 Fence Device
在左下端的 cluster-001 栏中点击 Shared Fence Device | Add a Fence Device 显示新增 Fence Device 页面,在 Select a shared fence device 下拉框选择一下Fence Device ,这里由于是使用 vmware workstation 进行,所以选择 Vir

这里由于是使用 vmware workstation 进行,所以选择 Virtual machine Fencing


应用 Fence Device



点击Update main fence properties
点击Update main fence properties
至此集群的相关设置就算是完了。现在可以到 rs-01.cqh.com 上去检查一下集群设置是否成功:
使用 clustat 命令检查集群是否在运行:

使用 df -h 检查共享盘是否正常挂载

检查 httpd 服务是否正常运行:

检查集群IP地址是否在运行:

编辑 web 页面的 index.html 文件

打开浏览器,在地址栏中输入

成功。
测试将rs-01.cqh.com 电脑关机,看集群服务会否会自动转到 rs-02.cqh.com 电脑上。

在rs-02.cqh.com 主机上查看集群状态

显示的状是 online,但 rs-01.cqh.com 的服务已停止,继续使用 clustat 命令查看

过了40秒钟后,虽然  rs-01.cqh.com 的状态依然是 online ,但服务却已经故障转移到rs-02.cqh.com 啦,集群的故障转移功能生效。继续使用 clustat 命令查看集群状态

Rs-01.cqh.com 服务器的状态已经是离线啦。故障切换成功,高可用群集生效



阅读(1462) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-06-22 22:06:42

楼主太牛了,非常好的文章!!!!!!!!!!!!!!!!!!!!!!!!!