通过特殊的软件将若干服务器连接在一起并提供故障切换功能的实体我们称之为高可用集群。可用性是指系统的uptime,在7x24x365的工作环境中,99%的可用性指在一年中可以有87小时36分钟的DOWN机时间,通常在关键服务中这种一天多的故障时间是无法接受的,所以提出了前面提到的错误恢复概念,以满足99.999%的高可用性需求。
这里我们先说一下几个概念:
  1. 服务(Service),是HA集群中提供的资源,包括Float IP,共享的存储,apache等等。
  2. 成员服务器(Member Server) 也叫节点(Node),是HA中实际运行服务提供资源的服务器。
  3. 失效域(Failover Domain),是HA中提供资源的服务器的集合,当内部某个成员出现故障时,可以将服务切换到其他正常的成员服务器上。在HA中一个失效域一般包含2台成员服务器(未应用虚拟技术)。
  4. 心跳(HeartBeat)是HA中监控成员服务器状态的方法,一般心跳是通过网线和串口线来传输的。
  5. 单一故障点(Single Point Of Failuer,SPOF)是指一个系统的这样的一个部件,当它失效或者停止运行,将导致整个系统不能工作。在HA中通常使用双电源,多网卡,双交换机等来避免SPOF。
  6. 仲裁(Quorum)是HA中为了准确的判断服务器及其提供的服务是否正常而采用的在共享磁盘中保存成员服务器信息的方法。共享的状态信息包括群集是否活跃。服务状态信息包括服务是否在运行以及哪个成员正在运行该服务。每个成员都检查这些信息来保证其它成员处于最新状态。在一个只有两个成员的群集中,每个成员都定期把一个时间戳和群集状态信息写入位于共享磁盘贮存区的两个共享群集分区上。要保证正确的群集操作,如果某成员无法在启动时写入主共享群集分区和屏蔽共享群集分区,它将不会被允许加入群集。此外,如果某群集成员不更新其时间戳,或者到系统的"heartbeats"(心跳)失败了,该成员就会从群集中删除。
  7. Fence设备,Fence设备的作用时在一个节点出现问题时,另一个节点通过fence设备把出现问题的节点重新启动,这样做到了非人工的干预和防止出现问题的节点访问共享存储,造成文件系统的冲突,关于Fence 设备,有外置的比如APC的电源管理器.很多服务器都是内置的,只不过不同厂家的叫法不同而已。比如HP的称为iLo,IBM的称为BMC,Dell的称为DRAC。
      下面我们以RedHat Cluster Suite为例来简要说一下HA的搭建。RedHat Cluster Suite简称RHCS,RHCS目前的版本有v3,v4和v5,各版本之间不能通用。RedHat Enterprise Linux 3.0和4.0中对应的的RHCSv3/v4支持的最大节点数为16,RedHat Enterprise Linux 5.0对应的RHCSv5支持的最大节点数为128。
RedHat高可用集群组成:
  1. Cluster Configuration System (CCS):集群配置系统,以管理cluster.conf档案
  2. Cluster Manager (CMAN):集群管理器
  3. Distributed Lock Manager (DLM):分布式锁管理器
  4. Fence:输入/输出系统围栏系统(栅设备)
  5. Resource Group Manage (rgmanager):资源组管理器,用来监督、启动和停止应用、服务和资源
  6. Quorum Disk:仲裁磁盘
  7. Conga:RHCM的Web控制套件。包括luci和ricci
  8. system-configure-cluster:图形化工具来管理集群中的多个机器
下图为一HA集群环境:
 
 
从防火墙到服务器网卡都是HA模式。这里交换机我是以Cisco为例的,开启HSRP。
环境描述:
2台服务器为IBM Blade HS21(2*2.5G以上 4核处理器,8G 内存,2*146G硬盘, 集成冗余双口网卡  )
Fence设备:Advanced Management Module(AMM)此次利用IBM提供的免费午餐来作为Fence设备(貌似给过钱了=.=!)。IP是192.168.110.47,用户名是USERID,密码是PASSW0RD
OS:RedHat Enterprise Linux Advance Server 4 update 6
准备工作:
1.配置bonding:
  • 新建http://www.qixoo.qixoo.com/etc/sysconfig/network-config/ifcfg-bond0,内容如下:
DEVICE=bond0 
BOOTPROTO=static 
BROADCAST=192.168.100.255 
IPADDR=192.168.100.21 
NETMASK=255.255.255.0 
ONBOOT=yes 
TYPE=Ethernet
  • 编辑要绑定的真实网卡eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
  • 编辑要绑定的真实网卡eth1
# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
ONBOOT=yes
  • 配置绑定模式:
编辑 /etc/modules.conf 文件,加入如下一行内容以使系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0加入下列两行
# vi /etc/modules.conf
alias bond0 bonding
options bond0 miimon=100 mode=1 primary=eth0
说明:miimon是用来进行链路监测的。 比如:miimon=100,那么系统每100ms监测一次路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,共有0、1、2、3四种模式,常用的为0,1两种:mode=0表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,默认情况下只有一块网卡工作,另一块做备份,primary指定启动后active的网卡。
  • 修改默认路由
由环境描述可知192.168.100.0网段是跑业务的,所以我们需要指定默认路由
# more /etc/sysconfig/network 
NETWORKING=yes 
HOSTNAME=am1 
GATEWAY=192.168.100.2
  • 重新启动网络服务应用刚才的配置
# /etc/init.d/network restart
Bringing up interface bond0 OK
Bringing up interface eth0 OK
Bringing up interface eth1 OK
# cat http://qkxue.net/proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005)
Bonding Mode: fault-tolerance (active-backup) 
Primary Slave: None 
Currently Active Slave: eth0 
MII Status: up 
MII Polling Interval (ms): 100 
Up Delay (ms): 0 
Down Delay (ms): 0
Slave Interface: eth0 
MII Status: up 
Link Failure Count: 1 
Permanent HW addr: xx:xx:xx:xx:xx:xx
Slave Interface: eth1 
MII Status: up 
Link Failure Count: 1 
Permanent HW addr: xx:xx:xx:xx:xx:xx
  • bond1的配置同上,am2服务器配置同am1。
2.修改/etc/hosts文件,添加节点的主机名和IP地址。在两台刀片机上该文件必须一致。
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.110.21 amcluster1
192.168.100.21 am1
192.168.110.22 amcluster2
192.168.100.22 am2
3.安装RHCS套件
# mount –o loop rhel-4-u6-rhcs-i386-disc1.iso /mnt
# cd /mnt
# ./autorun
弹出安装cluster软件对话框,选择需要安装的软件,所有有关Xen、large、huge、luci、ricci字样的软件包都不选择,点下一步,如果没有错误信息,则安装成功。如果多选了一些软件包的话,
可能需要插入RedHat安装盘。
注意:
必须关掉RedHat的Selinux和Iptables,当然你要是知道cluster软件的端口在防火墙上打开也是可以的^_^。
4.停掉两台机器上cluster的所有服务
# /etc/init.d/rgmanager stop
#/etc/init.d/fenced stop
#/etc/init.d/cman stop
#/etc/init.d/ccsd stop
修改/usr/share/system-config-cluster/FaildomController.py文件,第213行少一个“=”,该问题为cluser自身bug。
5.编写集群启动和关闭脚本:
#more /root/cluster.sh
#!/bin/sh
start() { 
/etc/init.d/ccsd start 
/etc/init.d/cman start 
/etc/init.d/fenced start 
/etc/init.d/rgmanager start 
}
stop() { 
/etc/init.d/rgmanager stop 
/etc/init.d/fenced stop 
/etc/init.d/cman stop 
/etc/init.d/ccsd stop 
}
status() { 
/etc/init.d/rgmanager status 
/etc/init.d/fenced status 
/etc/init.d/cman status 
/etc/init.d/ccsd status 
}
case "$1" in 
start) 
start $1 
;; 
stop) 
stop $1 
exit 0 
;; 
restart|reload) 
stop $1 
start $1 
RETVAL=$? 
;; 
status) 
status 
;; 
*) 
echo $"Usage: $0 {start|stop|restart|status}" 
exit 1 
esac
修改权限
#chmod 700 /root/cluster.sh
开始配置Cluster:(使用的是RHCSV5版本的system-config-cluster工具)
1.在Xwindow下运行
# system-config-cluser
打开图形化配置工具:
2.选择Create New Configuration按钮,然后输入文件名点和多播地址,然后点击“确定”。
再选择左边的Cluster,并选择右下"Edit Cluster Properties" 调出"cluster Properies" 配置Cluster的名称和相关属性。
"PostJoinDelay" 栅进程接收新节点的加入请求后等待节点确认加入的延迟秒数,默认值为3,典型的设置为20至30,这个根据你的网路和集群的实际情况而定。"PostFailDelay" 栅进程发现节点失效后将节点踢出错误恢复域的等待延迟时间,默认值为0代表立即踢出不延时,这个值要按你集群网络的实际情况而定。
3.选中Cluster Nodes,这里就是加入成员节点的,点击Add a Cluster Node,输入amcluster1点OK,如下图,Node Name需要和/etc/hosts文件中配置的机器名相同
同理加入amcluster2。
4.选中Fence Devices,点击Add a Fence Device,如下图,Fence设备需要根据实际情况进行选择配置,这次安装中IBM刀片服务器使用IBM Blade Center管理,修改后的IP是192.168.110.47,用户名是USERID,密码是PASSW0RD, 点OK。
5.选中刚添加的节点amcluster1,点Manage Fencing For This Node,弹出对话框,点Add a New Fence Level,再选中左侧的Fence-Level-1,点Add a New Fence to this Level,弹出下面对话框,输入刀片所在的槽位,点OK
同样方式配置amcluster2的fence设备。
6.创建失效域,添加对应节点,如图,选中Failover Domains,点击右下角的Create a Failover Domain。在弹出的对话框中输入失效域的名称,这里我们输入AMHA保存后。
7.将失效域成员节点添加进去
右边的两个打勾选向分别是 "RestrictFailover Domains members" 以及 "Priotitzed List"。如果妳只有两台, 打勾第一项“Restrict Failover Domains members” 就可以了,这项是只允许这两台做轮替。另外一项"Priotitzed List"则是在你有两台以上的服务器,需要分别设定轮替的优先级时需要的。当你打钩"Priotitzed List"后可以使用"Adjust Priority" 调整多节点的替换优先级
8.创建资源组
选中Resources,点击右下角的Create a Resources,这里选择Create a Resource,然后选择IP Address,填写Float IP进去。
然后将tomcat的启动脚本添加进去,如下图所示:
9.创建服务
选中Service,点击右下角的Create a Service,在弹出的对话框中创建Service,如下图
点击OK后,做如下配置
注意:
1.红色圈出的下拉框要选择我们刚才创建的失效域名称AMHA
2.蓝色圈出的部分,若选择Restart,则服务发生异常时,cluster尝试把该服务重启;若选择Relocate,则服务发生异常时,cluster直接尝试切换服务至另一个节点上。
配置完这两步,点击左下角的 弹出如下对话框
依次增加要切换的服务即可。
在这里需要提醒各位最好将服务脚本放置在IP下面,只有网卡起来了才
能服务,逻辑上才正确。
操作流程:选择Create a new resource for this service 然后选择IP Address,这样地址资源就加载好了,选中刚建立的地址,再在下面选择Attach a new Private Resource to the Selection,这里选择Script并添加我们需要服务的脚本。
10.保存配置并同步到备机
最终的cluster.conf文件内容应该如下结构:
<?xml version="1.0" ?> 
<cluster alias="AMHA" config_version="2" name="AMHA"> 
        <fence_daemon post_fail_delay="0" post_join_delay="3"/> 
        <clusternodes> 
                <clusternode name="amcluster1" nodeid="1" votes="1"> 
                        <multicast addr="225.0.0.1" interface="bond0"/> 
                        <fence> 
                                <method name="1"> 
                                        <device blade="1" name="AMM"/> 
                                </method> 
                        </fence> 
                </clusternode> 
                <clusternode name="amcluster2" nodeid="2" votes="1"> 
                        <multicast addr="225.0.0.1" interface="bond0"/> 
                        <fence> 
                                <method name="1"> 
                                        <device blade="2" name="AMM"/> 
                                </method> 
                        </fence> 
                </clusternode> 
        </clusternodes> 
        <cman expected_votes="1" two_node="1"> 
                <multicast addr="225.0.0.1"/> 
        </cman> 
        <fencedevices> 
                <fencedevice agent="fence_bladecenter" ipaddr="192.168.110.47" login="USERID" name="AMM" passwd="PASSW0RD"/> 
        </fencedevices> 
        <rm> 
                <failoverdomains> 
                        <failoverdomain name="AMHA" ordered="0" restricted="1"> 
                                <failoverdomainnode name="amcluster1" priority="1"/> 
                                <failoverdomainnode name="amcluster2" priority="1"/> 
                        </failoverdomain> 
                </failoverdomains> 
                <resources> 
                        <ip address="192.168.100.18" monitor_link="1"/> 
                        <script file="/etc/init.d/tomcat" name="tomcat"/> 
                </resources> 
                <service autostart="1" domain="AMHA" name="AMHA"> 
                        <ip ref="192.168.100.18"> 
                                <script ref="tomcat"/> 
                        </ip> 
                </service> 
        </rm> 
</cluster>
可以通过
# scp /etc/cluster/cluster.conf :/etc/cluster
也可以通过systemconfigcluster图形集群配置工具中可以简单的点一下”Send to”按钮来传。
也可以通过RHCS提供的工具:
1.# ccs_tool update /etc/cluster/cluster.conf,告知ccs升级配置文件版本。
2.# cman_tool status | grep “Config version”,首先查出你cluster.conf文件的版本。
观察返回的东东是否和你的新版本一样,否的话就需要通过下面的命令来更新。
# cman_tool version-r new_version_number
3.验证一下是否是最新就OK了。
以上操作时RHEL4中的,在RHEL5中用户只需要使用ccs_tool update /etc/cluster/cluster.conf就可以了。
到这里使用之前的集群启动脚本启动服务就可以了。

转:Linux集群-----HA浅谈的更多相关文章

  1. Linux集群问题~浅谈

    系统扩展的方式 # scale up 向上扩展 # scale out 向外扩展 集群类型 LB 负载均衡集群 Load Balancing HA 高可用集群 High Availability HP ...

  2. Linux 集群

    html,body { } .CodeMirror { height: auto } .CodeMirror-scroll { } .CodeMirror-lines { padding: 4px 0 ...

  3. Linux集群

    集群的起源: 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发.由于主要用于科学工程计算,所以这些系统并不为大家所熟知.直到Linux集群的出现,集群的概念 ...

  4. Linux集群架构(二)

    Linux集群架构(二) 目录 八.LVS DR模式搭建 九.keepalived + LVS 十.扩展 八.LVS DR模式搭建 1.实验环境: 四台机器: client: 10.0.1.50 Di ...

  5. Linux集群架构(一)

    第二十八课 Linux集群架构(一) 目录 一. 集群介绍 二. keepalived介绍 三. 用keepalived配置高可用集群 四. 负载均衡集群介绍 五. LVS介绍 六. LVS调度算法 ...

  6. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  7. Linux集群基础

    Linux集群基础 作者:Danbo 时间:2015-7-12 集群概述 什么是集群?集群是一组协同工作的服务器实体.用以提供比单一服务实体更具扩展性和可用性的平台. 集群的分类 1.HPC(High ...

  8. Linux集群的总结和思考

    前言:在涉及到对外项目,经手许多小中型网站的架构,F5.LVS及Nginx都比较多,我想一种比较通俗易懂的语气跟大家说明下何谓负载均衡,何谓Linux集群,帮助大家走出这个误区,真正意义上来理解它们. ...

  9. Linux 笔记 - 第十八章 Linux 集群之(二)LVS 负载均衡集群

    一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.上一篇已经讲解了 HA 高可用集群,此节讲解负载均衡集群. 负载均衡集群(Load Balance Cluseter,简称 ...

随机推荐

  1. throw跟throws关键字

    throws关键字 定义一个方法的时候可以使用throws关键字声明.使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理. throws关键字格式: public 返回值类 ...

  2. window下查看TCP端口连接情况

    window下查看TCP端口连接情况:netstat -ano -p tcp|findstr 10001

  3. zepto源码注解

    /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...

  4. Socket Programming in C#--Conclusion

    Conclusion And that's all there is to it! Here is how our client looks like Here is how our server l ...

  5. raid知识

    1,raid形象理解(饮水机模型) http://dingyichao.blog.51cto.com/442449/698762     2,raid利用率 3,raid详细理解 raid0 raid ...

  6. ASP.Net MVC如何访问的静态页面

    MVC开发中,因为View文件夹下的web.config文件默认会把任何方法的请求的任何文件,路径都交给 System.Web.HttpNotFoundHandler 去处理.起到Controller ...

  7. JS调用Silverlight方法拾遗

    在最近做的物联网项目中,需要利用封装过的Silverlight刻度控件显示温度,湿度,二氧化碳浓度等值.由于最新的数据是通过js ajax获取的,所以需要把这些数据传递给silverlight显示,这 ...

  8. JAVA NIO是什么(zz)

    JAVA NIO是什么? 1.   基本 概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系 ...

  9. 优化Hibernate所鼓励的7大措施

    优化Hibernate所鼓励的7大措施: 1.尽量使用many-to-one,避免使用单项one-to-many2.灵活使用单向one-to-many3.不用一对一,使用多对一代替一对一4.配置对象缓 ...

  10. [CareerCup] 12.6 Test an ATM 测试一个自动取款机

    12.6 How would you test an ATM in a distributed banking system? 这道题问我们如何来测试一个自动取款机,我们首先要询问下列问题: - 谁来 ...