一、 high available
HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务。 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务。常用实现高可用的开源软件有 heartbeat和keepalived,其中keepalived有负载均衡的功能。
HA也可以用在mysql,但是两台mysql之间必须有一个共享存储。
两台机器都必须是双网卡,各自用一条连接交换机,另一条互联(心跳线)。
本实验是在虚拟机下实现的,在虚拟机设置里面各自为两台机器增加多一块网卡。
新增的网卡设置为“Host-only(仅主机模式)”,不能设置为桥接模式。IP设置过程如下图:
新增的网卡,系统里面没有对应的ifcfg-eth1文件,直接复制ifcfg-eth0,并改名为ifcfg-eth1。
eth1文件只要保留几行即可:
1、两台机器分别修改hostname
vi /etc/sysconfig/network 重启后生效
分别修改为aminglinux1,aminglinux2
hostname aminglinux1(2) 更改主机名,重启后无效
bash 使更改的主机名生效
2、关闭防火墙,两台机器都要关闭
iptables -F 清除防火墙规则
service iptables save 保存防火墙规则(清除后)
setenforce 0 临时关闭selinux系统
vi /etc/selinux/config
SELINUX=disabled 永久关闭selinux系统
3、添加hosts记录
vi /etc/hosts
两台记分别添加对另一台机的host记录172.18.18.230 aminglinux1
172.18.18.231 aminglinux2
4、安装epel扩展yum源
yum install -y epel-release 方便后面安装heartbeat
5、两台机上都安装heartbeat、libnet、nginx
yum install -y heartbeat*
yum install -y libnet
yum install -y nginx
6、主机器上(aminglinux1)配置
cd /usr/share/doc/heartbeat-3.0.4/
cp ha.cf haresources authkeys /etc/ha.d/
cd /etc/ha.d/
chmod 600 authkeys
vi authkeys
此文件是用来验证的,两个机器用心跳线通讯,确认对方是否存活。用这个文件来进行加密验证,避免其它机器随意的冒认主从机器。
模板文件内容如下
#auth 1
#1 crc 加密最弱的方式
#2 sha1 HI! sha加密,加密最强的方式
#3 md5 Hello! md5加密,加密比sha相对简单些
我们需要做一些修改,启用第三种auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
vi haresoureces
此文件是用来指定 主节点、 虚拟IP、 掌控的服务。
aminglinux1 172.18.18.233/22/eth0:0 nginx
nginx服务必须在/etc/init.d/这个目录下,否则,上面的nginx将无法找到。
虚拟IP要用对外提供服务的IP段,不能用心跳线的那个IP段。
vi ha.cf 主要配置文件
debugfile /var/log/ha-debug 打开日志功能
logfile /var/log/ha-log 指定日志文件
logfacility local0 错误日志级别
keepalive 2 两台机器,心跳线检测,每2秒检测
deadtime 30 检测对方机器宕机后,30后才确认是宕机
warntime 10 检测对方机器宕机10秒后,发一个警告,写入日志中
initdead 60 服务重启的情况下,等待60s,之后没有正常启动则取代它
udpport 694 以广播的形式去检测是否存活
#baud 19200 以串口线直连的心跳线模式,才启用这个选
串口模式下,端口的选择:
# serial serialportname ...
#serial /dev/ttyS0 # Linux
#serial /dev/cuaa0 # FreeBSD
#serial /dev/cuad0 # FreeBSD 6.x
#serial /dev/cua/a # Solaris广播模式下,端口的选择:
# What interfaces to broadcast heartbeats over?
#
#bcast eth0 # Linux
#bcast eth1 eth2 # Linux
#bcast le0 # Solaris
#bcast le1 le2 # Solarisucast eth1 192.168.126.102
ucast就是直接用IP的方式去访问心跳线的网卡。这里要填对方心跳线的网卡跟IP
auto_failback on
主宕机并修复正常,从检测到主恢复后,主动把服务都交还给主,自己恢复从状态。
respawn hacluster /usr/lib/heartbeat/ipfail
heartbeat 启动的同时,启动ipfail,这个工具是实现心跳线相互检测的功能。
以hacluster这个用户去启动此工具,这个用户是启动heartbeat进程的用户。
ping 192.168.126.1
仲裁IP,主或从检测对方宕机的请求是否生效,由此设备来决定,一般选择网关
node aminglinux1 主
node aminglinux2 从
scp ha.cf haresources authkeys aminglinux2:/etc/ha.d/
将这三个配置文件复制到从机上
scp命令,两台机都安装openssh-clients才能使用。
7、从机器配置
chmod 600 authkeys
cd /etc/ha.d/
authkeys、haresources文件不用修改
vi ha.cf 只需要改一点,ucast改为对方的IP即可。
ucast eth1 192.168.126.101
8、启动heartbeat服务
先主后从
service heartbeat start
Starting High-Availability services: INFO: Resource is stopped
INFO: Resource is stopped这个提示不是错误
仲裁是通过imcp协议去跟主从交流的,所以主从上都不能禁PING,否则会被认为是宕机状态
当心跳线断掉后,主从都会觉得对方宕机了,主从都会启动各项服务,从而浪费资源。
当心跳线恢复后,双方又都会放弃这些资源,导致服务不正常。所以,心跳线恢复后,从要重启下heartbeat服务
本文出自 “eleven” 博客,转载请与作者联系!
原文地址:http://elevencup.blog.51cto.com/2643613/1661957