高可用集群就是为了保证某项服务能够时时在线,我们可以通过几个9来衡量一个高可用集群提供服务的稳定性,例如5个9的高可用集群必须保证服务一年在线的时间占99.999%,也就是说一年的时间中仅允许服务电线不到6分钟的时间,可见高可用集群非同反响。
下面我就给大家讲解一下高可用性集群的工作机制,由于只是为了讲明原理,在此处我们就假设一个集群中之后两个节点(即两台提供服务的主机,假设提供的是web服务)。
最简单的高可用集群的工作机制为,两个节点都在线,但是只有节点1提供web服务,在提供服务的同时,节点1还要在特定的时间段内不停的向外发送自己的心跳信息,以此来通告在同一个集群中的节点2自己运行正常,当节点2连续2-3此在规定的时间段内没有接受到几点1的心跳信息,则就认为节点1已经不能正常的提供web服务了,此时节点2就直接将节点1的资源(资源:就是为提供一个服务所需要必须东西,如IP,数据等)抢夺过来,并立刻提供相同的服务,这样就保证了服务的时时在线。
当然这是最简单的靠可用集群的工作机制,但是只有理解了基本的原理,才能进行更高层次的探索,下面我们就基于这个最简单、最基本的高可用集群的原理来实现基于Heartbeat的高可用web服务集群
实验目的:通过Heartbeat来实现高可用web服务集群模拟
实验拓扑图如下图所示:
每个节点都有两块网卡分别为eth0、eth1,前者和交换机或路由器相连来为外界提供服务,后者直接连接为彼此传递心跳信息,VIP为在线提供服务的节点向外提供服务的IP地址,这是一个虚拟的IP地址,当提供服务的节点宕机之后,这个VIP就将被替代者所使用。
这里我们要使用到heartbeat软件,下面我们就对这款软件的三个主要的配置问津进行一下介绍:
/etc/ha.d/ha.cf 定义心跳信息传输的端口以及整个集群一共有多少个节点
/etc/ha.d/haresources 本地最简单的基于纯文本文件的CRM,用来定义集群使用的VIP、广播等基本资源
/etc/ha.d/authkeys(400) 对传递的心跳信息进行签名,防止心跳信息被改动
下面 我们就开始进行相应的配置:
1、给noid1配置地址
ifconfig eth0 192.168.0.202/24
ifconfig eth1 1.1.1.1
给noid2配置地址
ifconfig eth0 192.168.0.204/24
ifconfig eth1 1.1.1.2
2、配置本地主机名称解析
在node1上
vim /etc/hosts 添加如下内容
192.168.0.202 node1.a.org
192.168.0.204 node2.a.org
node1、node2的主机名进行相应的修改
在node1上
hostname node1.a.org
在node2上
hostname node2.a.org
3、只有我们要多次在连个节点间拷贝文件,为了省去繁琐的密码输入,我们在两个节点上进行如下配置
在node1上
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.204
在node2上
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.202
从此我们在两个节点上拷贝文件就不需要输入密码了
4、在两个节点上分别安装httpd
yum install httpd –y
任何集群服务都需要使用集群启动,而非手动启动,并保证开机不能自动启动
chkconfig httpd off 防止开机自动启动
给每个http写一个网页,内容分别为自己的主机名,以便进行测试
在两个节点上进行同样的操作
5、开始安装集群服务
(1)、下载安装包
创建一个目录将所用的安装包都放在这个目录内
mkdir node
所用到的安装包如下
(2)、安装 这些软件包,因为他们之间有依赖关系,所以使用yum安装
cd node
yum localinstall * --nogpgcheck –y
前两步需要在两个节点上都进行同样的操作
(3)、将heartbeat的配置文件移动到/etc/下
cd /usr/share/doc/hearbeat-2.1.4
cp ha.cf harisources authkeys /etc/ha.d
(4)、编辑配置文件/etc/ha.d/ha.cf
vim /etc/ha.d/ha.cf 进行如下修改
打开日志 logfile /var/log/ha-log
打开 udpport 694 两节点用此端口发送心跳信息
添加 bcast eth1 发送心跳信息的网卡
添加定义节点 node node1.a.org
node node2.a.org
(5)、编辑配置文件/etc/ha.d/authkeys
vim /etc/ha.d/authkeys 添加如下内容
auth 2
2 sha1 kfhslkdhfsk(md5加密后的字符串,想要得到这个字符串运行如下命令,在将结果粘贴即可
dd if=/dev/urandom bs=512 count=1 | md5sum
将此文件的权限改为400
chmod 400 authkeys
(6)、编辑配置文件/etc/ha.d/haresources
vim /etc/ha.d/haressources 添加如下内容
node1.a.org 192.168.0.85/24/eth0/192.168.0.255 httpd
上面的内容依次为:主节点的主机名,提供服务的IP即VIP,设定VIP的端口,广播地址,提供的服务
(7)、将我们配置的这三个文件拷贝到node2上
cd /etc/ha.d
scp ha.cf authkeys haresources node2.a.org:/etc/ha.d
(8)、启动heartbeat
在哪个节点上启动第一个该服务,以后所有的这个服务必须在这个节点上启动
我们就在node1上启动heartbeat服务
/etc/init.d/heartbeat start
在node1上启动node2的heartbeat服务
ssh node2 --‘/etc/init.d/heartbeat start’
验证:我们设定的node1为主节点,所以服务应该由node1提供,即VIP在node1上,执行
ifconfig 进行查看,结果如下图:
我们在node1上使用浏览器输入192.168.0.85这个VIP来对我们的web服务进行测试:
表示此时提供web服务的节点为node1
当node1宕机之后,服务将有node2进行提供,所以VIP将在node2上,为达到node1宕机的目的,我们将node1的heartbeat服务关闭,让其不能发送心跳信息(注意:不能在本机上停止服务,需要在另个节点上执行)在node2上执行如下命令:
ssh node1.a.org --‘/etc/init.d/heartbeat stop’
对node2执行ifconfig 命令,将得到如下结果:
我们在node1上使用浏览器输入192.168.0.85这个VIP来对我们的web服务进行测试:
本实验只是简单的模拟了基于heartbeat实现高可用的web集群,其更深层次的内容还需大家继续学习