服务器集群之高可用集群—HA Cluster(High Available)

什么是高可用HA?

    HA(High Available), 高可用性群集,是保证业务连续性的有效解决方案,避免了因为单点故障带来的风险,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点,各节点之间会传递心跳信息确认对方是否运行正常。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。


Messaging Layer Cluster Infrastucture 集群的基础架构层:提供底层的高可用服务。

Cluster Resource Manager 集群资源管理器:通过收集底层的心跳信息来确定哪个节点依然存活,它能够接受上层服务的委托,与底层通信,管理哪个服务运行在哪个节点上,它可以实现,想要提供高可用服务实现高可用性,但本身不具备高可用能力,也无法与基础架构层通信的服务,都作为资源来管理。 需要在各节点转移的,都可称为资源,如 IP,Web服务,ftp服务等。

资源约束:

    位置约束:约束资源优先运行在哪个节点上。

    排列约束:用于定义资源与资源间的关系,资源之间能否运行在一起,比如约束当某个资源启动时,另一个才可以启动,如果它没启动那另一个也一定不会启动。

    顺序约束:定义资源与资源间的启动顺序。


RA(Resource Agent) 资源代理:

    LSB:Linux Standard Base      Linux基础标准   

    OCF:Open Cluster Framework    开放集群框架

RA还会实现资源的检测,当服务运行不正常时,会尝试重启该服务,再不行会通知CRM实施转移。

DC(Designated Coordinator):

    是节点中自动推举的协调员,负责收集心跳信息,协调各个节点。

LRM (Local Resource Manager):每个节点都有运行一个LRM作为CRM的一部分存在,运行流程DC——>LRM——>RA——>执行脚本启动服务。

实验一、使用heartbeat构建一个Web高可用集群。

实验规划:

    主节点:admin1.tuchao.com 192.168.18.201/24

    备节点:admin2.tuchao.com 192.168.18.202/24

    vip:192.168.18.222/24

    myip:192.168.18.220/24

    NFS服务器:192.168.18.203/24 

实验目标:    

    1、主节点上面提供HTTP服务,运行着一个动态Blog站点。备节点上提供了MySQL服务。

    2、当主节点故障时,备节点在运行MySQL的情况下,会自动启动httpd服务,接续主节点提供Web服务

    3、当备节点故障时,主节点会启动MySQL服务接续工作,这就实现了两个节点之间互为主备。

    4、网站程序与MySQL数据目录,存放至NFS服务器上,实现共享存储。

    准备存储,先配置NFS服务器:

  • mkdir /mysqldata --用于存放MySQL数据文件

  • mkdir /http --用于存放网站程序

  • vim /etc/exports --修改配置文件,加入以下行。

  • /http      192.168.18.0/24(rw,no_root_squash)

  • /mysqldata      192.168.18.0/24(rw,no_root_squash)

  • /etc/init.d/nfs start --启动nfs服务

  • useradd -r -u 300 mysql --添加mysql用户

  • chown -R mysql.mysql  /mysqldata --给予权限

    主节点admin1.tuchao.com配置:

MySQL的安装 略

  • cp support-files/mysql.server  /etc/init.d/mysqld  --复制服务脚本

  • chkconfig --add mysqld  --添加到系统服务

  • chkconfig mysqld off  --禁止开机自启动,注意如果要作为高可用集群的话,一定要禁止。

  • useradd -r -u 300 mysql --添加mysql用户

  • mkdir /mydata  --创建挂载点

  • mount -t nfs 192.168.1.110:/mysqldata /mydata  --挂载共享存储

  • mkdir /mydata/data  --创建数据目录

  • 修改/etc/my.cnf文件,指定datadir=/mydata/data

初始化MySQL,创建库,创建用户,授权用户。(给网站程序连接数据库时使用)

  • ./scripts/mysql_install_db  --user=mysql --datadir=/mydata/data

  • service mysqld start

  • create database wpdb;

  • create user wpuser;

  • grant all on wpdb.* to 'wpuser'@'192.168.18.%' identified by '123456';


修改hosts文件。

  • vim /etc/hosts

192.168.18.201   admin1.tuchao.com admin1

192.168.18.202   admin2.tuchao.com admin2

安装PHP,配置httpd服务,解压网站程序,配置接口。

首页可以访问到了,代表Web服务和MySQL配置是没问题的。

服务器集群之高可用集群—HA Cluster(High Available)


现在停止服务卸载共享存储,安装heartbeat,开始配置高可用集群:

  • /etc/init.d/httpd stop

  • /etc/init.d/mysqld stop

  • chkconfig httpd off   //这里注意一旦打算把服务定义为集群资源,一定不能设置开机启动。

  • chkconfig mysqld off

  • umount /var/www/html

  • umount /mydata

  • yum install heartbeat-2.1.4-12.el6.i686.rpm  heartbeat-stonith-2.1.4-12.el6.i686.rpm heartbeat-gui-2.1.4-12.el6.i686.rpm  ipvsadm-1.26-2.el6.i686.rpm  libnet-1.1.6-7.el6.i686.rpm  heartbeat-pils-2.1.4-12.el6.i686.rpm 

复制配置文件

  • cd /usr/share/doc/heartbeat-2.1.4/

  • cp authkeys   ha.cf /etc/ha.d/

生成随机数,配置authkeys文件,用于认证。

  • chmod 600 authkeys

  • openssl rand -hex 8 >> authkeys

服务器集群之高可用集群—HA Cluster(High Available)

配置ha.cf文件,启动heartbeat服务。

crm respawn,也可以使用crm on,crm yes  //用于启动额外的crm

#下面是对传输的数据进行压缩,是可选项

compression     bz2

compression_threshold 2


服务器集群之高可用集群—HA Cluster(High Available)


服务器集群之高可用集群—HA Cluster(High Available)


keepalive 2  //持久连接

deadtime 30  //30秒后认为节点死亡

initdead 30  //在某些配置下,重启后网络需要一些时间才能正常工作。这个单独的”initdead”选项可以处理这种情况。它的取值至少应该为通常deadtime的两倍。

udpport 694  //侦听的UDP端口,这个值是默认的。

bcast   eth0 eth1  //广播接口

auto_failback  on  //是否开启,节点恢复后资源自动返回原节点。

启动heartbeat关闭selinux和防火墙。

  • service heartbeat start

  • /etc/init.d/iptables stop

  • chkconfig iptables off

  • setenforce 0

备节点admin2.tuchao.com,配置和主节点相同,只需要安装好程序,然后把配置文件拷贝过去就可以了。

  • scp authkeys ha.cf  admin2:/etc/ha.d

  • scp /etc/hosts  admin2:/etc/hosts

  • scp /etc/httpd/conf/httpd.conf  admin2:/etc/httpd/conf/httpd.conf

  • scp /etc/my.cnf  admin2:/etc

  • scp /etc/ld.so.conf.d/mysql.conf  admin2:/etc/ld.so.conf.d/mysql.conf

  • scp /etc/profile.d/mysql.sh  admin2:/etc/profile.d/mysql.sh

  • ldconfig

  • . /etc/profile.d/mysql.sh

  • service heartbeat start

启动heartbeat后,需要给hacluster用户一个密码,就可以使用hb_gui图形界面来配置资源。

  • hb_gui &

  • echo 123456 |passwd --stdin hacluster 

配置资源

我将资源分为以下两组:

webserver    运行在主节点

vip:192.168.18.222    cidr_netmask 24

store device:192.168.18.203:/http  directory:/var/www/html fstype:nfs

httpd //这个使用的是LSB标准类型,没有额外参数。

mysql    运行在备节点

myip:192.168.18.220    cidr_netmask 24

mystore device:192.168.18.203:/mysqldata directory:/mydata fstype:nfs

mysqld //LSB类型

定义完成后,启动成功如下图:

服务器集群之高可用集群—HA Cluster(High Available)


我们访问vip对应解析的域名(www.tuchao.com)

可以正常访问到我们的站点

服务器集群之高可用集群—HA Cluster(High Available)


模拟故障,这时把我们主节点的network服务给stop。

/etc/init.d/network stop

尝试用备节点ping 主节点,已经ping不通了。

服务器集群之高可用集群—HA Cluster(High Available)

这时尝试下我们的站点还能不能正常访问。

服务器集群之高可用集群—HA Cluster(High Available)

哈哈,访问正常,我们明明把提供http服务的admin1节点的网络功能给停了呀。

我们来看看heartbeat。

服务器集群之高可用集群—HA Cluster(High Available)

这里显示主节点已关闭,主节点的资源组已经自动切换到备节点上来了。


服务器集群之高可用集群—HA Cluster(High Available)


服务器集群之高可用集群—HA Cluster(High Available)


服务器集群之高可用集群—HA Cluster(High Available)

现在我们把主节点网络功能给恢复,因为这里开启了auto_failback on,资源又会自动切换回主节点了。


服务器集群之高可用集群—HA Cluster(High Available)

我们把备节点网络功能给关掉,主节点也会自动接替备节点的工作。

这就实现了互为主备的高可用模型。


服务器集群之高可用集群—HA Cluster(High Available)


实验二、LVS负载均衡+高可用,使用heartbeat-ldirectord对后端RealServer做健康状况检测。

实验环境:

    RHEL6.4

    主节点:admin1.tuchao.com 192.168.18.201/24

    备节点:admin2.tuchao.com 192.168.18.202/24

安装ipvsadm

  • yum install ipvsadm -y

安装heartbeat-ldirectord,复制配置文件样列。

  • yum install heartbeat-ldirectord -y

  • cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf  /etc/ha.d/

编辑配置文件:

checktimeout=3  //等待超时时间

checkinterval=1  //检查时间间隔

#fallback=127.0.0.1:80  

autoreload=yes  //自动装载配置文件

#logfile="/var/log/ldirectord.log"  //定义服务自我管理的日志

#logfile="local0"  //定义日志发送给rsyslog

#emailalert="admin@x.y.z"  //管理员邮箱

#emailalertfreq=3600  //邮件发送频率

#emailalertstatus=all 

quiescent=yes  //是否以静默模式工作(当某一个Realserver故障了如何处理,yes表示把realserver权重设置为0,no表示把realserver删除。

virtual=192.168.18.100:80  //定义虚拟IP

        real=192.168.18.191:80 gate  //定义RealServer,gate表示DR模型。

        real=192.168.18.192:80 gate 3

        fallback=127.0.0.1:80 gate  //当RealServer全部故障时,使用本机响应请求。

        service=http  //当检测类型为协商的时候,指定检测方式是基于什么服务实现的。

        request=".test.html"

        receive="OK"

        virtualhost=www.tuchao.com  //虚拟主机

        scheduler=wrr  //指定调度算法

        #persistent=600

        #netmask=255.255.255.255

        protocol=tcp

        checktype=negotiate  //检查类型为协商

        checkport=80

配置文件写好以后,复制一份到备节点。

启动图像界面定义资源

vip

服务器集群之高可用集群—HA Cluster(High Available)

ldirectord

服务器集群之高可用集群—HA Cluster(High Available)


配置好两台realserver分别是192.168.18.191,192.168.18.192。

  • 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

  • ifconfig lo:0 192.168.18.100  broadcast 192.168.18.100 netmask 255.255.255.255 up

  • route add -host 192.168.18.100 dev lo:0

创建首页文件  略

创建检测文件

echo "OK" > /var/www/html/.test.hmtl

启动httpd服务

service httpd start

第二台RealServer配置相同。

启动资源

服务器集群之高可用集群—HA Cluster(High Available)

资源运行在了节点二上

服务器集群之高可用集群—HA Cluster(High Available)

我们访问下director试试。

服务器集群之高可用集群—HA Cluster(High Available)


刷新一下,这里为了更好的分别有没有生效,设置了两个不同的网页内容。

服务器集群之高可用集群—HA Cluster(High Available)

现在模拟节点二故障,在节点二上执行halt。

资源已经自动切换到节点一上来了,负载均衡正常运作。

服务器集群之高可用集群—HA Cluster(High Available)

配置节点一与节点二httpd服务,实现fallback功能。

echo “Server is repairing”>/var/www/html/index.html

service httpd start

这时候模拟realserver全部都故障了,ldirectord会自动把故障的realserver权重标记为0。

服务器集群之高可用集群—HA Cluster(High Available)


尝试下访问,这时director就响应我们了。

服务器集群之高可用集群—HA Cluster(High Available)






HA高可用实验完成,这里提一个小细节,实际工作中配置heartbeat还是不要启用auto_failback,当损坏的节点突然好了以后,资源切回来有时会出错,要手动到clearup一下资源就可以了。


有更好的建议欢迎大家与我多多交流QQ:1183710107


本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1436086



上一篇:设计模式 -- 单例模式(Java&&PHP)


下一篇:推动 物联网智慧城市关键