阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Heartbeat实现Nginx高可用

165次阅读
没有评论

共计 5680 个字符,预计需要花费 15 分钟才能阅读完成。

介绍

Heartbeat 是著名 HA 项目,Heartbeat 在 3.0 之后分拆为 Heartbeat 和 Pacemaker 两个各自独立项目。Pacemaker 在后续发展中使用 Corosync 作为消息层,和 Corosync 紧密结合,同时也保留 Heartbeat 作为可选的消息层。不管 heartbeat,还是 corosync 都是高可用集群中的 Cluster Messaging Layer(集群信息层),是主要传递发集群信息与心跳信息的,并没有资源管理功能,资源管理还得依赖于上层的 crm(Cluster resource Manager,集群资源管理器),最著名的资源管理器,就是 pacemaker。现在 corosync+pacemaker 成了高可用集群中的最佳组合。

本文首先介绍 HA 套件中的 heartbeat,为 nginx 实现高可用

环境:

vm3    172.16.1.203

vm4    172.16.1.204

VIP      172.16.1.200

heartbeat 版本:3.0.4

nginx      版本:1.6.3

以下所有步骤都是两个 HA 节点都需要做

一、安装 heartbeat 和 nginx

yum install heartbeat
yum install nginx

二、配置

1、/etc/ha.d/authkeys

auth 2
#1 crc
2 sha1 HI!
#3 md5 Hello!

2、/etc/ha.d/ha.cf

注意 ucast 参数,需要配置对端的 IP 地址,即 vm3 上的 ha.cf 配置为 vm4 的 ip 地址,反之亦然

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility    local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth0 172.16.1.204
auto_failback off
node    vm3
node    vm4
ping 172.16.1.200
respawn hacluster /usr/lib64/heartbeat/ipfail

3、/etc/ha.d/haresources

第一段为配置文件所在节点的主机名,nginx 为 /etc/ha.d/resource.d 下的脚本,下一步会提到

vm3 IPaddr::172.16.1.200/24/eth0:0 nginx

4、/etc/ha.d/resource.d/nginx

ln -s /etc/init.d/nginx /etc/ha.d/resource.d/nginx

三、启动

service heartbeat start

heartbeat 日志:/var/log/ha-log 和 /var/log/ha-debug,/var/log/message 中也能看到

启动到生效可能会有 1~2 分钟延迟(和 ha.cf 中的 initdead 参数有关,单位秒),一开始在 vm3 上的 /var/log/ha-log 上最后几行如下

Aug 04 14:39:42 vm3 heartbeat: [113707]: info: Link vm4:eth0 up.
Aug 04 14:39:42 vm3 heartbeat: [113707]: info: Status update for node vm4: status up
harc(default)[113716]: 2015/08/04_14:39:42 info: Running /etc/ha.d//rc.d/status status

生效后,日志刷到如下,这时就能 ping 通浮动 IP172.16.1.200 了

Aug 04 14:41:40 vm3 heartbeat: [113707]: WARN: node 172.16.1.200: is dead
harc(default)[113748]: 2015/08/04_14:41:40 info: Running /etc/ha.d//rc.d/status status
Aug 04 14:41:40 vm3 heartbeat: [113707]: info: Comm_now_up(): updating status to active
Aug 04 14:41:40 vm3 heartbeat: [113707]: info: Local status now set to: ‘active’
Aug 04 14:41:40 vm3 heartbeat: [113707]: info: Starting child client “/usr/lib64/heartbeat/ipfail” (491,490)
Aug 04 14:41:40 vm3 heartbeat: [113774]: info: Starting “/usr/lib64/heartbeat/ipfail” as uid 491  gid 490 (pid 113774)
Aug 04 14:41:43 vm3 heartbeat: [113707]: info: Status update for node vm4: status active
harc(default)[113777]: 2015/08/04_14:41:43 info: Running /etc/ha.d//rc.d/status status
Aug 04 14:41:45 vm3 ipfail: [113774]: info: Status update: Node vm4 now has status active
Aug 04 14:41:47 vm3 ipfail: [113774]: info: Asking other side for ping node count.
Aug 04 14:41:50 vm3 ipfail: [113774]: info: No giveup timer to abort.
Aug 04 14:41:53 vm3 heartbeat: [113707]: info: remote resource transition completed.
Aug 04 14:41:53 vm3 heartbeat: [113707]: info: remote resource transition completed.
Aug 04 14:41:53 vm3 heartbeat: [113707]: info: Initial resource acquisition complete (T_RESOURCES(us))
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.1.200)[113830]: 2015/08/04_14:41:53 INFO:  Resource is stopped
Aug 04 14:41:53 vm3 heartbeat: [113794]: info: Local Resource acquisition completed.
harc(default)[113913]: 2015/08/04_14:41:53 info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp
ip-request-resp(default)[113913]: 2015/08/04_14:41:53 received ip-request-resp IPaddr::172.16.1.200/24/eth0 OK yes
ResourceManager(default)[113936]: 2015/08/04_14:41:53 info: Acquiring resource group: vm3 IPaddr::172.16.1.200/24/eth0 nginx
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.1.200)[113964]: 2015/08/04_14:41:54 INFO:  Resource is stopped
ResourceManager(default)[113936]: 2015/08/04_14:41:54 info: Running /etc/ha.d/resource.d/IPaddr 172.16.1.200/24/eth0 start
IPaddr(IPaddr_172.16.1.200)[114089]: 2015/08/04_14:41:54 INFO: Adding inet address 172.16.1.200/24 with broadcast address 172.16.1.255 to device eth0
IPaddr(IPaddr_172.16.1.200)[114089]: 2015/08/04_14:41:54 INFO: Bringing device eth0 up
IPaddr(IPaddr_172.16.1.200)[114089]: 2015/08/04_14:41:54 INFO: /usr/libexec/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-172.16.1.200 eth0 172.16.1.200 auto not_used not_used
/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_172.16.1.200)[114063]: 2015/08/04_14:41:54 INFO:  Success
ResourceManager(default)[113936]: 2015/08/04_14:41:54 info: Running /etc/ha.d/resource.d/nginx  start
Aug 04 14:41:54 vm3 heartbeat: [113707]: info: Link 172.16.1.200:172.16.1.200 up.
Aug 04 14:41:54 vm3 heartbeat: [113707]: WARN: Late heartbeat: Node 172.16.1.200: interval 134490 ms
Aug 04 14:41:54 vm3 ipfail: [113774]: info: Link Status update: Link 172.16.1.200/172.16.1.200 now has status up
Aug 04 14:41:54 vm3 heartbeat: [113707]: info: Status update for node 172.16.1.200: status ping
Aug 04 14:41:54 vm3 ipfail: [113774]: info: Status update: Node 172.16.1.200 now has status ping
Aug 04 14:41:54 vm3 ipfail: [113774]: info: A ping node just came up.
Aug 04 14:41:55 vm3 ipfail: [113774]: info: Asking other side for ping node count.
Aug 04 14:41:59 vm3 ipfail: [113774]: info: Ping node count is balanced.
Aug 04 14:41:59 vm3 ipfail: [113774]: info: No giveup timer to abort.

四、验证

使用 curl 浮动 ip 访问 nginx

curl “http://172.16.1.200”

观察 nginx 日志 /var/log/nginx/access.log,发现上面访问到 vm3 的 nginx,关闭 vm3 的 heartbeat

service heartbeat stop

再访问,观察 nginx 发现,访问到了 vm4 上面

curl “http://172.16.1.200”

五、总结

单独使用 Heartbeat,确实能够做到 nginx 的 HA 浮动 IP 切换,但是按照上面的测试场景,如果只是浮动 IP 所在节点的 nginx 服务被关闭了,而 heartbeat 进程正常的话,浮动 IP 并不会切换,导致 nginx 不可用,解决方案是结合 heartbeat 的 CRM 软件(Cluster Resource Manager),在 HA 管理层检测服务健康状态,拉起 down 掉的服务。

————————————– 分割线 ————————————–

基于 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

CentOS 6 高可用服务 Heartbeat v3 安装以及配置  http://www.linuxidc.com/Linux/2015-04/116153.htm

————————————– 分割线 ————————————–

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-08/121140.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5680字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中