共计 3686 个字符,预计需要花费 10 分钟才能阅读完成。
1、HA 集群介绍
HA 即(high available)高可用,又被叫做双机热备,用于关键性业务。可以这样理解,有两台机器 A 和 B,正常情况下,A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至 B 机继续提供该服务。常用实现高可用的开源软件有 heartbeat 和 keepalived,其中 keepalived 有负载均衡的功能。
如上图所示为一个 HA 架构,一个交换机下面有两台机器 Web1 和 Web2,其中 Web1 为主节点,正常使它提供服务,而 Web2 备用节点是闲置的。Web1 和 Web2 中间有一根心跳线,检查对方的存活状态。流动 IP,也叫 vip 是对外提供服务的 ip,正常情况下配置在 Web1 上,当 Web1 宕机后,Web2 会自动配置该 vip,对外提供服务。
2、前期准备
准备两台机器,一个使用了 CentOS6.5,另一个 centos6.3,系统版本不同不影响实验
网卡 eth0 ip 如下
master 192.168.1.165
slave 192.168.1.163
下面操作在两个机器上都要操作:
(1)设置 hostname,分别为主 master 和从 slave
主上设置:
# hostname master
# vim /etc/sysconfig/network
HOSTNAME=localhost.localdomain
修改为
HOSTNAME=master
从上设置
# hostname slave
# vim /etc/sysconfig/network
HOSTNAME=localhost.localdomain
修改为
HOSTNAME=slave
(2)关闭防火墙,主从都操作
# iptables -F
# service iptables save
# getenforce 0
# vim /etc/selinux/config
SELINUX=enforcing
修改为
SELINUX=disabled
(3)配置 host,主从操作一样
# vim /etc/host
192.168.1.165 master
192.168.1.163 slave
3、heartbeat 安装
主机和从机都需要安装 heartbeat,同时需要 libnet,主机从机执行同样的命令
# yum install -y heartbeat
# yum install -y libnet
如果没有包,则需要安装一个扩展 yum 源,heartbeat 在 epel 源中。
# yum install -y epel-release
4、主节点配置
需要先将 3 个相关的配置文件放置在 heartbeat 的配置目录下
# cd /usr/share/doc/heartbeat-3.0.4/
# cp authkeys ha.cf haresources /etc/ha.d/
之后便可以开始修改配置文件了,先修改验证文件
# cd /etc/ha.d/
# vim authkeys # 用来验证,主从通过通信验证对方是否存活,需要加密
auth 3 # 此处打开,数字表示选择哪种加密方式
#1 crc # 最简单
#2 sha1 HI! # 最复杂
3 md5 Hello! # 处于中间等级的加密方式
# chmod 600 /etc/ha.d/authkeys
# 如果不修改权限,heartbeat 启动不了
第二个配置 haresources 文件,只需要编辑一行。因为当前在 ha.d 目录下,直接 vim。如果不是,用绝对路径或者 cd
# vim haresources
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
# 找到上面一行,改成下面,需要去掉 #
master 192.168.1.186/24/eth0:0 nginx
# master 是主的主机名;192.168.1.186 是 vip,/24 指定网段,网卡 eth0:0(这里采用了虚拟网卡);nginx 提供服务,如果主宕掉,从启动。
最后一个配置 ha.cf,里边基本全是注释,这里选择删掉重新写入, 当前依旧在 /etc/ha.d 目录下
# > ha.cf
# vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 192.168.1.163
auto_failback on
node master
node slave
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
配置说明:
debugfile /var/log/ha-debug:该文件保存 heartbeat 的调试信息
logfile /var/log/ha-log:heartbeat 的日志文件
logfacility local0:日志级别
keepalive 2:心跳的时间间隔,默认单位秒
deadtime 30:超出该时间未收到对方节点的心跳,则认为对方死亡
warntime 10:超出该时间未收到对方节点的心跳,则发出警告并记录到日志
initdead 60:在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。最少为 deadtime 的两倍
udpport 694:设置广播通信使用的端口,694 为默认端口号
ucast eth0 192.168.1.163:ucast 指定对方 ip,bcast 形式寻找;eth0 心跳检测自己的网卡,ip 对方的 ip
auto_failback on:heartbeat 的两台主机分别为主节点和从节点。主节点正常情况下占用资源运行所有服务,遇到故障把资源交给从节点由从节点运行服务。选项为 on 情况下,一旦主节点恢复运行,则自动获取资源并取代从节点运行服务。
node master:指定主
node slave:指定从
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail:指定与 heartbeat 一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。最常用的进程是 ipfail,该进程用于检测和处理网络故障,需要配合 ping 语句指定的 pingnode 来检测网络连接。如果系统是 64 位,将地址中的 lib 改为 lib64
然后安装一个 nginx,用于后边测试
# yum install -y nginx
5、从节点配置
把主上的三个配置拷贝到从上,使用 scp 命令;并且只需要在从上修改 ha.cf 文件一个地方即可
# scp authkeys ha.cf haresources slave:/etc/ha.d/
# vim /etc/ha.d/ha.cf
ucast eth0 192.168.1.163 改为 ucast eth0 192.168.1.165
也安装一个 nginx,用于后边测试
# yum install -y nginx
6、heartbeat 测试
启动 heartbeat,顺序很重要,先主后从
# service heartbeat start
检查测试(主),第一次会需要等待一段时间,耐心
# ifconfig
看是否有 eth0:0
# ps aux | grep nginx
看是否有 nginx 进程
测试(1)
因为主从指间的心跳实质是通过 ping 来连通,so 主故意禁掉 ping,死掉
# iptables -D INPUT -p icmp -j DROP
如果失败,查看日志发现卡在这里不动
Dec 08 18:56:53 master heartbeat: [9590]: WARN: node 192.168.1.1: is dead
Dec 08 18:56:53 master heartbeat: [9590]: info: Link 192.168.1.1:192.168.1.1 dead.
Dec 08 18:56:53 master ipfail: [9619]: info: Status update: Node 192.168.1.1 now has status dead
harc(default)[10097]: 2016/12/08_18:56:53 info: Running /etc/ha.d//rc.d/status status
Dec 08 18:56:54 master ipfail: [9619]: info: NS: We are dead. :<
Dec 08 18:56:54 master ipfail: [9619]: info: Link Status update: Link 192.168.1.1/192.168.1.1 now has status dead
Dec 08 18:56:55 master ipfail: [9619]: info: We are dead. :<
Dec 08 18:56:55 master ipfail: [9619]: info: Asking other side for ping node count.
尝试解决方法
将从上的 ha.cf 配置文件中的 ucast 修改如下
bcast eth0
然后重新测试
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140341.htm