vlambda博客
学习文章列表

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

我们上一节的架构是比较浪费钱的,怎么说呢?因为是冷备架构,即主节点只要不挂,备节点永远不会得到利用。

然而服务器的采购是需要不少钱的,眼睁睁看着备节点放在那一年不使用,多少是肉疼的。

但是这个冷备还不能去掉,万一主节点挂了,整个业务还需要有备节点来支撑。

那么能不能充分利用备节点呢?不要让他白白放在那吃灰?并且当其中一个节点挂了,仍然可以达到上一节的效果?

一、双主热备架构

要实现以上目标,则需要采取双主热备架构。

何为双主热备?我们可以认为是互为主备,两个节点地位相同,承担的责任相同。请求进来,大家都要处理,而不是一个一直在忙碌,而另一个一直闲着。

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

如何实现双主热备呢?一个虚拟IP只能绑定一个主节点,那么要使两个节点都工作,就需要两个虚拟IP。

两个虚拟IP交叉配置,实现互为主备,即实现了双主架构

前端DNS轮询至虚拟IP1和虚拟IP2,正常情况下,请求可以均匀打到两台nginx节点上。

当其中一个nginx节点挂了,那么其中一个虚拟IP绑定的主节点就会自动指向另外一个节点,服务依然持续提供。

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

当挂掉的节点修复后,对应的虚拟IP又会自动绑定这个节点,后续两个节点又可以同时对外服务了。

二、DNS解析配置负载均衡

我现在使用的腾讯云服务器控制台上可直接进行域名解析的负载均衡配置,配置方式也十分简单。

登录 DNS 解析控制台。

在 “域名解析列表” 管理页面,选择待设置权重的域名,进入 “记录管理” 页面。如下图所示:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

  • 同记录类型、同主机记录、同线路类型的记录可以实现解析的负载均衡。

  • 记录类型为 A 记录、CNAME 记录可实现负载均衡。

选择 “负载均衡” 页签,查看负载均衡记录列表。

选择待查看权重信息的记录行,单击【详情】。如下图所示:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

可查看和修改权重信息:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

三、ip的规划

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

准备好四台虚拟机,我的IP安排如上,100和200作为虚拟IP,剩下的101和102还是作为两台nginx主机

由于本地无法模拟DNS轮询,故用两个域名进行模拟:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

四、双主热备配置

分别在101和102上修改keepalived配置:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

www.ha.com对应的虚拟IP是192.168.56.100,www.ha1.com对应的虚拟IP是192.168.56.200,100对应的master节点应该是192.168.56.101上的nginx,200对应的master节点应该是192.168.56.102上的nginx,我们来实际访问下:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

好,符合我们现在的预期,我们也来看下192.168.56.101和192.168.56.102上绑定的虚拟IP是啥:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

OK,只要前端DNS能分别轮询这两个虚拟IP,那么两个节点就不会闲着,下面验证如果其中一台挂了的情况,我直接关闭102主机的keepalived进程:

37、【yummyfood商城-集群版本】-keepalived实现Nginx双主热备

看下浏览器展示效果:

因为102主机挂了,此时200这个虚拟IP也被绑定至101主机:

OK,现在100和200虚拟IP进来的请求全部都交给101这个节点去服务了,102暂时嗝屁一会也没事,喝杯茶慢慢去修理一下102即可。

本篇文章就到这里~下篇文章再见。