共计 11726 个字符,预计需要花费 30 分钟才能阅读完成。
Heartbeat 实现热备原理:
与 keepalived 运用 vrrp 协议不同,heartbeat 利用串口和 ip 实现心跳监控,节点会检查配置文件中的网络联通性,如果网络不通,则主节点的 ipfail 会执行切换,关闭主节点上的 Nginx 并释放虚拟 ip;此时备用节点将接管虚拟 ip,并将此节点上的 nginx 启动,这样就实现了 nginx 的热备。
虚拟 ip:192.168.3.233
主节点:
hostname usvr-124
eth0:192.168.3.124
eth0:0:192.168.8.124 用于监测心跳
/etc/hosts
192.1683.126 usvr-126
备用节点:
hostname usvr-126
eth0:192.168.3.126
eth0:0:192.168.8.126 用于监测心跳
/etc/hosts
192.1683.124 usvr-124
注 :
1. 需要在两台机器上各自添加对方的 host。
2. 主备节点需要时间同步。
————————————– 分割线 ————————————–
相关阅读 :
基于 Heartbeat V1 实现 Web 服务双机热备 http://www.linuxidc.com/Linux/2014-04/100635.htm
Heartbeat 实现 Web 服务的高可用群集 http://www.linuxidc.com/Linux/2014-04/99503.htm
Heartbeat+LVS+Ldirectord 高可用负载均衡解决方案 http://www.linuxidc.com/Linux/2014-04/99502.htm
DRBD+Heartbeat+NFS 高可用性配置笔记 http://www.linuxidc.com/Linux/2014-04/99501.htm
Heartbeat 基于 CRM 使用 NFS 对 MySQL 高可用 http://www.linuxidc.com/Linux/2014-03/98674.htm
Heartbeat 高可用 httpd 基于 Resources 简单配置 http://www.linuxidc.com/Linux/2014-03/98672.htm
————————————– 分割线 ————————————–
1.heartbeat 安装:
wget http://mirrors.sohu.com/Fedora-epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum -y install heartbeat*
安装完成后会在 /etc/ha.d 建立相关目录
[root@usvr-124 ha.d]# rpm -q heartbeat -d
/usr/share/doc/heartbeat-3.0.4/AUTHORS
/usr/share/doc/heartbeat-3.0.4/COPYING
/usr/share/doc/heartbeat-3.0.4/COPYING.LGPL
/usr/share/doc/heartbeat-3.0.4/ChangeLog
/usr/share/doc/heartbeat-3.0.4/README
/usr/share/doc/heartbeat-3.0.4/apphbd.cf
/usr/share/doc/heartbeat-3.0.4/authkeys
/usr/share/doc/heartbeat-3.0.4/ha.cf
/usr/share/doc/heartbeat-3.0.4/haresources
/usr/share/man/man1/cl_status.1.gz
/usr/share/man/man1/hb_addnode.1.gz
/usr/share/man/man1/hb_delnode.1.gz
/usr/share/man/man1/hb_standby.1.gz
/usr/share/man/man1/hb_takeover.1.gz
/usr/share/man/man5/authkeys.5.gz
/usr/share/man/man5/ha.cf.5.gz
/usr/share/man/man8/apphbd.8.gz
/usr/share/man/man8/heartbeat.8.gz
将相关配置文件 copy 到 /etc/ha.d 中即可
2.heartbeat 配置
主节点配置:
(1) 主配置文件(ha.cf)
#debugfile /var/log/ha-debug
logfile /var/log/ha-log #指名 heartbeat 的日志存放位置。
#crm yes #是否开启 Cluster Resource Manager(集群资源管理)功能。
#bcast eth1 #指明心跳使用以太网广播方式,并且是在 eth1 接口上进行广播。
keepalive 2 #指定心跳间隔时间为 2 秒(即每两秒钟在 eth1 上发送一次广播)。
deadtime 30 #指定备用节点在 30 秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。
warntime 10 #指定心跳延迟的时间为十秒。当 10 秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。
initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。
udpport 694 #设置广播通信使用的端口,694 为默认使用的端口号。
#baud 19200 #设置串行通信的波特率。
#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。
ucast eth0 192.168.8.126 # 采用网卡 eth0 的 udp 单播来组织心跳,后面跟的 IP 地址应为双机对方的 IP 地址。
#mcast eth0 225.0.0.1 694 1 0 #采用网卡 eth0 的 Udp 多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast 和 mcast 分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
auto_failback on #用来定义当主节点恢复后,是否将服务自动切回,heartbeat 的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为 off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。
#stonith baytech /etc/ha.d/conf/stonith.baytech # stonith 的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。
#watchdog /dev/watchdog #该选项是可选配置,是通过 Heartbeat 来监控系统的运行状态。使用该特性,需要在内核中载入 ”softdog” 内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入 ”insmod softdog” 加载该模块。然后输入 ”grep misc /proc/devices”(应为 10),输入 ”cat /proc/misc |grep watchdog”(应为 130)。最后,生成设备文件:”mknod /dev/watchdog c 10 130″。即可使用此功能。
node usvr-124 #主节点主机名,可以通过命令“uanme –n”查看。
node usvr-126 #备用节点主机名。
ping 192.168.3.1 #选择 ping 的节点,ping 节点选择的越好,HA 集群就越强壮,可以选择固定的路由器作为 ping 节点,但是最好不要选择集群中的成员作为 ping 节点,ping 节点仅仅用来测试网络连接。
respawn hacluster /usr/lib64/heartbeat/ipfail #该选项是可选配置, 列出与 heartbeat 一起启动和关闭的进程 ,该进程一般是和 heartbeat 集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是 ipfail,此进程用于检测和处理网络故障,需要配合 ping 语句指定的 ping node 来检测网络的连通性。其中 hacluster 表示启动 ipfail 进程的身份。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-12/110416p2.htm
(2) 资源文件(haresource)
Haresources 文件用于指定双机系统的主节点、集群 IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个 HA 节点上该文件必须完全一致,此文件的一般格式为:
node-name network <resource-group>
node-name 表示主节点的主机名,必须和 ha.cf 文件中指定的节点名一致,network 用于设定集群的 IP 地址、子网掩码、网络设备标识等,需要注意的是,这里指定的 IP 地址就是集群对外服务的 IP 地址,resource-group 用来指定需要 heartbeat 托管的服务,也就是这些服务可以由 heartbeat 来启动和关闭,如果要托管这些服务,必须将服务写成可以通过 start/stop 来启动和关闭的脚步,然后放到 /etc/init.d/ 或者 /etc/ha.d/resource.d/ 目录下,heartbeat 会根据脚本的名称自动去 /etc/init.d 或者 /etc/ha.d/resource.d/ 目录下找到相应脚步进行启动或关闭操作。
下面对配置方法进行具体说明:
usvr-124 IPaddr::192.168.3.233/24/eth0 nginx
其中,usvr-124 是 HA 集群的主节点,IPaddr 为 heartbeat 自带的一个执行脚步,heartbeat 首先将执行 /etc/ha.d/resource.d/IPaddr 192.168.3.233/24 start 的操作,也就是虚拟出一个子网掩码为 255.255.255.0,IP 为 192.168.3.233 的地址,此 IP 为 heartbeat 对外提供服务的网络地址,同时指定此 IP 使用的网络接口为 eth0,接着启动 nginx 服务。
注意:1. 主节点和备份节点中资源文件 haresources 要完全一样。
2.resource-group 中还可以指定其他资源,如 httpd 等,但是后面跟的服务器需要有 start/stop 启动和关闭并放在 /etc/init.d/ 或者 /etc/ha.d/resource.d/ 下。
(3) 认证文件(authkeys)
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
保证此文件权限为 600
chmod 600 authkeys
(4) 放置 nginx 启动脚本
#! /bin/bash
# Description: Startup script for webserver on CentOS. cp it in /etc/init.d and
# chkconfig –add nginx && chkconfig nginx on
# then you can use server command control nginx
#
# chkconfig: 2345 08 99
# description: Starts, stops nginx
set -e
PATH=$PATH:/usr/local/nginx1.6/
DESC=”nginx daemon”
NAME=nginx
DAEMON=/usr/local/nginx1.6/$NAME
CONFIGFILE=/usr/local/nginx1.6/nginx.conf
PIDFILE=/var/run/nginx.pid
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
d_start() {
$DAEMON -c $CONFIGFILE || echo -n ” already running”
}
d_stop() {
kill -QUIT `cat $PIDFILE` || echo -n ” not running”
}
d_reload() {
kill -HUP `cat $PIDFILE` || echo -n ” can’t reload”
}
case “$1” in
start)
echo -n “Starting $DESC: $NAME”
d_start
echo “.”
;;
stop)
echo -n “Stopping $DESC: $NAME”
d_stop
echo “.”
;;
reload)
echo -n “Reloading $DESC configuration…”
d_reload
echo “reloaded.”
;;
restart)
echo -n “Restarting $DESC: $NAME”
d_stop
sleep 1
d_start
echo “.”
;;
*)
echo “Usage: $SCRIPTNAME {start|stop|restart|force-reload}” >&2
exit 3
;;
esac
exit 0
Heartbeat 实现热备原理:
与 keepalived 运用 vrrp 协议不同,heartbeat 利用串口和 ip 实现心跳监控,节点会检查配置文件中的网络联通性,如果网络不通,则主节点的 ipfail 会执行切换,关闭主节点上的 Nginx 并释放虚拟 ip;此时备用节点将接管虚拟 ip,并将此节点上的 nginx 启动,这样就实现了 nginx 的热备。
虚拟 ip:192.168.3.233
主节点:
hostname usvr-124
eth0:192.168.3.124
eth0:0:192.168.8.124 用于监测心跳
/etc/hosts
192.1683.126 usvr-126
备用节点:
hostname usvr-126
eth0:192.168.3.126
eth0:0:192.168.8.126 用于监测心跳
/etc/hosts
192.1683.124 usvr-124
注 :
1. 需要在两台机器上各自添加对方的 host。
2. 主备节点需要时间同步。
————————————– 分割线 ————————————–
相关阅读 :
基于 Heartbeat V1 实现 Web 服务双机热备 http://www.linuxidc.com/Linux/2014-04/100635.htm
Heartbeat 实现 Web 服务的高可用群集 http://www.linuxidc.com/Linux/2014-04/99503.htm
Heartbeat+LVS+Ldirectord 高可用负载均衡解决方案 http://www.linuxidc.com/Linux/2014-04/99502.htm
DRBD+Heartbeat+NFS 高可用性配置笔记 http://www.linuxidc.com/Linux/2014-04/99501.htm
Heartbeat 基于 CRM 使用 NFS 对 MySQL 高可用 http://www.linuxidc.com/Linux/2014-03/98674.htm
Heartbeat 高可用 httpd 基于 Resources 简单配置 http://www.linuxidc.com/Linux/2014-03/98672.htm
————————————– 分割线 ————————————–
1.heartbeat 安装:
wget http://mirrors.sohu.com/Fedora-epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum -y install heartbeat*
安装完成后会在 /etc/ha.d 建立相关目录
[root@usvr-124 ha.d]# rpm -q heartbeat -d
/usr/share/doc/heartbeat-3.0.4/AUTHORS
/usr/share/doc/heartbeat-3.0.4/COPYING
/usr/share/doc/heartbeat-3.0.4/COPYING.LGPL
/usr/share/doc/heartbeat-3.0.4/ChangeLog
/usr/share/doc/heartbeat-3.0.4/README
/usr/share/doc/heartbeat-3.0.4/apphbd.cf
/usr/share/doc/heartbeat-3.0.4/authkeys
/usr/share/doc/heartbeat-3.0.4/ha.cf
/usr/share/doc/heartbeat-3.0.4/haresources
/usr/share/man/man1/cl_status.1.gz
/usr/share/man/man1/hb_addnode.1.gz
/usr/share/man/man1/hb_delnode.1.gz
/usr/share/man/man1/hb_standby.1.gz
/usr/share/man/man1/hb_takeover.1.gz
/usr/share/man/man5/authkeys.5.gz
/usr/share/man/man5/ha.cf.5.gz
/usr/share/man/man8/apphbd.8.gz
/usr/share/man/man8/heartbeat.8.gz
将相关配置文件 copy 到 /etc/ha.d 中即可
2.heartbeat 配置
主节点配置:
(1) 主配置文件(ha.cf)
#debugfile /var/log/ha-debug
logfile /var/log/ha-log #指名 heartbeat 的日志存放位置。
#crm yes #是否开启 Cluster Resource Manager(集群资源管理)功能。
#bcast eth1 #指明心跳使用以太网广播方式,并且是在 eth1 接口上进行广播。
keepalive 2 #指定心跳间隔时间为 2 秒(即每两秒钟在 eth1 上发送一次广播)。
deadtime 30 #指定备用节点在 30 秒内没有收到主节点的心跳信号后,则立即接管主节点的服务资源。
warntime 10 #指定心跳延迟的时间为十秒。当 10 秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务。
initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。
udpport 694 #设置广播通信使用的端口,694 为默认使用的端口号。
#baud 19200 #设置串行通信的波特率。
#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。
ucast eth0 192.168.8.126 # 采用网卡 eth0 的 udp 单播来组织心跳,后面跟的 IP 地址应为双机对方的 IP 地址。
#mcast eth0 225.0.0.1 694 1 0 #采用网卡 eth0 的 Udp 多播来组织心跳,一般在备用节点不止一台时使用。Bcast、ucast 和 mcast 分别代表广播、单播和多播,是组织心跳的三种方式,任选其一即可。
auto_failback on #用来定义当主节点恢复后,是否将服务自动切回,heartbeat 的两台主机分别为主节点和备份节点。主节点在正常情况下占用资源并运行所有的服务,遇到故障时把资源交给备份节点并由备份节点运行服务。在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取资源并取代备份节点,如果该选项设置为 off,那么当主节点恢复后,将变为备份节点,而原来的备份节点成为主节点。
#stonith baytech /etc/ha.d/conf/stonith.baytech # stonith 的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。保证共享数据的安全性和完整性。
#watchdog /dev/watchdog #该选项是可选配置,是通过 Heartbeat 来监控系统的运行状态。使用该特性,需要在内核中载入 ”softdog” 内核模块,用来生成实际的设备文件,如果系统中没有这个内核模块,就需要指定此模块,重新编译内核。编译完成输入 ”insmod softdog” 加载该模块。然后输入 ”grep misc /proc/devices”(应为 10),输入 ”cat /proc/misc |grep watchdog”(应为 130)。最后,生成设备文件:”mknod /dev/watchdog c 10 130″。即可使用此功能。
node usvr-124 #主节点主机名,可以通过命令“uanme –n”查看。
node usvr-126 #备用节点主机名。
ping 192.168.3.1 #选择 ping 的节点,ping 节点选择的越好,HA 集群就越强壮,可以选择固定的路由器作为 ping 节点,但是最好不要选择集群中的成员作为 ping 节点,ping 节点仅仅用来测试网络连接。
respawn hacluster /usr/lib64/heartbeat/ipfail #该选项是可选配置, 列出与 heartbeat 一起启动和关闭的进程 ,该进程一般是和 heartbeat 集成的插件,这些进程遇到故障可以自动重新启动。最常用的进程是 ipfail,此进程用于检测和处理网络故障,需要配合 ping 语句指定的 ping node 来检测网络的连通性。其中 hacluster 表示启动 ipfail 进程的身份。
更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-12/110416p2.htm
根据实际情况修改下安装目录等
备用节点配置 :
将主节点的 ha.cf haresources authkeys 复制到备用节点上
修改 ha.cf 中
ucast eth0 192.168.8.124 # 采用网卡 eth0 的 udp 单播来组织心跳,后面跟的 IP 地址应为双机对方的 IP 地址。
3. 测试
(1) 启动主备节点上的 heartbeat
service heartbeat start
(2) 输入命令 ip a 查看主节点上虚拟 ip192.168.3.233 是否启动
[root@usvr-124 ha.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:50:56:89:a2:16 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.124/24 brd 192.168.3.255 scope global eth0
inet 192.168.8.124/24 brd 192.168.8.255 scope global eth0:0
inet 192.168.3.233/24 brd 192.168.3.255 scope global secondary eth0
inet6 fe80::250:56ff:fe89:a216/64 scope link
valid_lft forever preferred_lft forever
此时主节点上的 nginx 也正常启动,但是备用节点上 nginx 没有启动
在 192.168.216 上查看:
curl http://192.168.3.233/1.html
输出:hello,192.168.3.124
(3) 将主节点的 heartbeat 停掉,我们在备用节点上 ip a 查看
[root@usvr-126 ha.d]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:50:56:89:91:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.126/24 brd 192.168.3.255 scope global eth0
inet 192.168.8.126/24 brd 192.168.8.255 scope global eth0:0
inet 192.168.3.233/24 brd 192.168.3.255 scope global secondary eth0
inet6 fe80::250:56ff:fe89:91a0/64 scope link
此时备用节点上的 nginx 启动,但是主节点上的 nginx 已经由 heartbeat 将 nginx 停掉
在 192.168.216 上查看:
curl http://192.168.3.233/1.html
输出:hello,192.168.3.126
ok,至此 heartbeat 实现 nginx 热备,就让我们应用起来吧
————————————– 分割线 ————————————–
CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
————————————– 分割线 ————————————–
Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里