HA Cluster—heartbeat v1基础应用

一、HA Cluster定义

高可用集群,英文原文为High Availability Cluster,简称HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。

高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损 失。如果某个节点失效,它的备援节点将在几 秒钟的时间内接管它的职责。高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。

配置HA Cluster之前需要先了解几个基础定义:

ha_aware:如果一个应用程序自己能够利用底层心跳信息传递层的功能完成集群事务决策的程序;也就是说该程序自己具有HA的能力。反之;称为非ha_aware。

不具有该能力时就需要借助其他程序或组件来完成集群功能:

  • DC(Designated Coordinator):收集集群中每一个节点的信息;以此来判断当前的节点数、服务数;以及对应服务运行于哪个节点等相关信息;方便管理;是节点选定的协调员;起承上启下的作用。

  • CRM(Cluster Resource Manager):CRM对于资源的配置对应的都有一个脚本或应用程序来执行

  • RA(Resource Agent):支持接收四个参数{start|stop|restart|status};对资源进行管理操作

  • LRM(Local Resource Manager):执行资源检测等功能

下面直接上图说明它们之间的关系:

wKiom1NR9nTzN9vCAAHRorJwDc8891.jpg

CRM(Cluster Resource Manager):

  • heartbeat

   heartbeat v1: haresources(配置接口:配置文件;文件名haresoucres)

   heartbeat v2: crm(各节点运行进程:crmd(tcp/5560);客户端:crmsh heartbeat-GUI)

   heartbeat v3 = heartbeat + pacemaker + cluster-glue

  • cman + rgmanager:

   resource group manager:Failover Domain(故障转移域)

  • RHCS(RedHat Cluster Suite):Conga(完全生命周期的配置接口)

二、安装配置heartbeat v1实现web集群服务:

大致规划:

node1:172.16.251.85

node2:172.16.251.86

node3:172.16.251.87(NFS)

VIP:  172.16.251.111

   这里没有用到node3;只是作为NFS使用的。

系统版本:CentOS 6.5 x86_84

  • 有几点需要注意的

节点名称集群每个节点的名称都需要互相能解析;更改/etc/hosts;需与"uname -n"一致
时间同步可以使用网络时间服务器同步
密钥认证节点间需要基于ssh认证;方便管理;并非必须
多节点管理
后续需要可以使用ansible软件来管理;基于ssh密钥认证
1
2
3
4
5
6
7
8
9
10
11
[root@node1 heartbeat2] # uname -n
node1.soul.com
[root@node1 heartbeat2] # cat /etc/hosts
127.0 . 0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
:: 1          localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16 . 251.85    node1.soul.com  node1     #node1为别名;各节点都需要配置
172.16 . 251.86    node2.soul.com  node2
172.16 . 251.87    node3.soul.com  node3
[root@node1 heartbeat2] #
                                                                                                                                                                                                                                                        
#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#基于SSH认证
[root@node1 ~] # ssh-keygen -t rsa
Generating public / private rsa key pair.
Enter  file  in  which to save the key ( / root / .ssh / id_rsa):
Enter passphrase (empty  for  no passphrase):      #一路回车留空即可
Enter same passphrase again:
Your identification has been saved  in  / root / .ssh / id_rsa.
...
[root@node1 ~] # ssh-copy-id -i .ssh/id_rsa.pub root@node2
#第一次传输拷贝时需要输入密码;后续就无需输入了
#在对应的node2上执行与node1一样的操作;两台主机相互做认证
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
#测试
[root@node1 ~] # ssh node2 'date';date
Fri Apr  18  19 : 17 : 30  CST  2014
Fri Apr  18  19 : 17 : 30  CST  2014
[root@node1 ~] # 时间一定需要保持一致
  • 安装heartbeat基本软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@node1 heartbeat2] # ls
heartbeat - 2.1 . 4 - 12.el6 .x86_64.rpm     #核心程序     
heartbeat - ldirectord - 2.1 . 4 - 12.el6 .x86_64.rpm     #实现director HA的
heartbeat - pils - 2.1 . 4 - 12.el6 .x86_64.rpm     #库文件
heartbeat - devel - 2.1 . 4 - 12.el6 .x86_64.rpm    #开发组件
heartbeat - stonith - 2.1 . 4 - 12.el6 .x86_64.rpm     #资源管理
heartbeat - gui - 2.1 . 4 - 12.el6 .x86_64.rpm     #图形配置界面
[root@node1 heartbeat2] #
#由于centos6.5版本的cluster-glue-libs包与pils冲突;但是又必须依赖pils
#所以这里先用yum解决依赖关系;在rpm安装;目前只安装pils、stonith和核心包
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
# yum install perl-TimeDate net-snmp-libs libnet PyXML
# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm ...
#
[root@node1 ~] # rpm -ql heartbeat    安装完成查看生成的文件
/ etc / ha.d
/ etc / ha.d / README.config
/ etc / ha.d / harc
/ etc / ha.d / rc.d
/ etc / ha.d / rc.d / ask_resources
/ etc / ha.d / rc.d / hb_takeover
/ etc / ha.d / rc.d / ip - request
/ etc / ha.d / rc.d / ip - request - resp
/ etc / ha.d / rc.d / status
  • 配置heartbeat的认证密码

1
2
3
4
5
6
7
8
9
10
11
12
#拷贝配置文件到/etc/ha.d目录
[root@node1 ~] # cp /usr/share/doc/heartbeat-2.1.4/{haresources,authkeys,ha.cf} /etc/ha.d/
#haresources    资源管理器
#authkeys       认证文件
#ha.cf          主配置文件
[root@node1 ~] # cd /etc/ha.d/
[root@node1 ha.d] # vim authkeys
auth  2     #启用第二项sha1加密
#1 crc
2  sha1 a443995f092077eca1b4     #密码
#3 md5 Hello!
[root@node1 ha.d] # chmod 600 authkeys     #更改权限;很重要
  • 主配置文件说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@node1 ha.d] # vim ha.cf
#       File to write other messages to
#
logfile  / var / log / ha - log     #日志文件;开启
keepalive  1                 #定义规定时间发送心跳信息;单位s
deadtime   5                 #定义单位时间内对方无心跳信息;stonith对方
warntime   3                 #警告时间
initdead  60                 #开机后单位时间后传递心跳信息;单位s
udpport         694          #监听的端口
#bcast                     #广播地址
mcast eth0  225.0 . 40.1  694  1  0     #定义多播地址
#ucast                     #单播
auto_failback on            #故障转回
node    node1.soul.com      #节点数
node    node2.soul.com
ping     172.16 . 0.1          #ping节点仲裁设备;因为节点为2台
compression    bz2          #压缩传送心跳
compression_threshold  2     #2K以上才进行压缩
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
#本次这样配置;详细信息文件内有说明
  • 定义cluster服务

1
2
3
4
5
6
7
8
9
10
11
[root@node1 ha.d] # vim haresources
#定义很简单;在文件末尾添加
node1.soul.com   172.16 . 251.111 / 16 / eth0  httpd
#节点            VIP           掩码 网卡    服务
#具体文件内有例子可以参考
[root@node1 ha.d] # scp -p haresources ha.cf authkeys node2:/etc/ha.d/
#复制到node2上;并保持原有属性
haresources                                                            100 %  5949      5.8KB / s    00 : 00
ha.cf                                                                  100 %    10KB   10.3KB / s    00 : 00
authkeys                                                               100 %   660      0.6KB / s    00 : 00
[root@node1 ha.d] #
  • 配置每个节点的httpd服务

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node1 ~] # vim /var/www/html/index.html
<h1>Node1.soul.com< / h1>
#这里为了试验;所以设置两个index文件不同;且需要关闭服务开启自动启动
#因为集群会自动控***务启动/关闭
[root@node1 ~] # chkconfig httpd off
[root@node1 ~] #
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
#node2节点配置
[root@node2 ~] # vim /var/www/html/index.html
<h1>Node2.soul.com< / h1>
[root@node2 ~] # chkconfig httpd off
[root@node2 ~] #
#配置好后需要进行测试;这里就不列出

三、启动测试heartbeat

  • 启动测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@node1 ~] # service heartbeat start
Starting High - Availability services:
2014 / 04 / 18_21 : 01 : 59  INFO:  Resource  is  stopped
Done.
#启动node1
[root@node1 ~] # ssh node2 'service heartbeat start'
Starting High - Availability services:
2014 / 04 / 18_21 : 02 : 38  INFO:  Resource  is  stopped
Done.
#启动node2;这里使用的是别名;可以写完整;node2.soul.com
[root@node1 ~] #
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[root@node1 ~] # tail -40 /var/log/ha-log
IPaddr[ 12178 ]:   2014 / 04 / 18_21 : 02 : 54  INFO: Using calculated netmask  for  172.16 . 251.111 255.255 . 0.0
IPaddr[ 12178 ]:   2014 / 04 / 18_21 : 02 : 54  INFO:  eval  ifconfig eth0: 0  172.16 . 251.111  netmask  255.255 . 0.0  broadcast  172.16 . 255.255
IPaddr[ 12149 ]:   2014 / 04 / 18_21 : 02 : 55  INFO:  Success
ResourceManager[ 12055 ]:  2014 / 04 / 18_21 : 02 : 55  info: Running  / etc / init.d / httpd  start
[root@node1 ~] # 可以查看日志信息
[root@node1 ~] # ss -tunl | grep 80
tcp    LISTEN      0       128                    ::: 80                    ::: *
tcp    LISTEN      0       128                    ::: 34580                 ::: *
[root@node1 ~] #
[root@node1 ~] # ifconfig | grep "172.16.251.111"
           inet addr: 172.16 . 251.111   Bcast: 172.16 . 255.255   Mask: 255.255 . 0.0
#测试都启动正常

wKiom1NRLkawpf10AADCPoAfUmg648.jpg

因为上面设置的是在node1上;所以显示为node1.

  • 测试转移

1
2
3
4
5
6
7
8
9
#在node2上停止node1
[root@node1 ~] # /usr/share/heartbeat/hb_standby local
2014 / 04 / 18_21 : 51 : 04  Going standby [local].
[root@node2 ~] #
[root@node2 ~] # ifconfig
eth0: 0     Link encap:Ethernet  HWaddr  00 : 0C : 29 :DF: 70 :B6
           inet addr: 172.16 . 251.111   Bcast: 172.16 . 255.255   Mask: 255.255 . 0.0
           UP BROADCAST RUNNING MULTICAST  MTU: 1500   Metric: 1
#测试node2上已启动服务和VIP

wKiom1NRMEjz2MjBAADLGcNucVk408.jpg

四、挂载NFS系统;实现共享存储

  • 共享NFS系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#新建一个node3;实现NFS;配置信息这里就不做解释
[root@node3 ~] # mkdir /www/htdocs -pv
mkdir: created directory ` / www'
mkdir: created directory ` / www / htdocs'
[root@node3 ~] # vim /etc/exports
/ www / htdocs      172.16 . 0.0 / 16 (rw)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
[root@node3 ~] # setfacl -m u:48:rwx /www/htdocs/
[root@node3 ~] # getfacl /www/htdocs/
getfacl: Removing leading  '/'  from  absolute path names
# file: www/htdocs/
# owner: root
# group: root
user::rwx
user:apache:rwx
[root@node3 ~] # vim /www/htdocs/index.html
<h1>Page  in  NFS Server< / h1>
#
[root@node3 ~] # service nfs restart
Shutting down NFS daemon:                                  [  OK  ]
Shutting down NFS mountd:                                  [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down NFS services:                                [  OK  ]
  • 修改集群管理信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#停止heartbeat服务
[root@node1 ~] # vim /etc/ha.d/haresources
node1.soul.com   172.16 . 251.111 / 16 / eth0  Filesystem:: 172.16 . 251.87 : / www / htdocs:: / var / www / html::nfs      httpd
#
[root@node1 ~] # scp /etc/ha.d/haresources node2:/etc/ha.d/
#复制一份到node2
[root@node1 ~] # service heartbeat start
Starting High - Availability services:
2014 / 04 / 18_21 : 26 : 50  INFO:  Resource  is  stopped
Done.
[root@node1 ~] # ssh node2 'service heartbeat start'
Starting High - Availability services:
2014 / 04 / 18_21 : 26 : 59  INFO:  Resource  is  stopped
Done.
[root@node1 ~] #
  • 测试

wKioL1NRLD3DNAEnAADOI8_WzFI698.jpg

1
2
3
4
5
6
7
8
[root@node1 ~] # /usr/share/heartbeat/hb_standby local
2014 / 04 / 18_21 : 45 : 23  Going standby [local].
[root@node1 ~] #
#
#在node2上查看80端口已启动;测试页面正常
[root@node2 ~] # ss -tunl | grep 80
tcp    LISTEN      0       128                    ::: 80                    ::: *
[root@node2 ~] #

到此;基础heartbeat基于配置文件haresource的配置已完成。



本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1398394,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值