一、Keepalived与VRRP介绍
1.1 Keepalived介绍
Keepalived基于VRRP协议,可以解决服务器的单点故障问题,通过与Nginx的配合实现Web服务的高可用。高可用的实现原理为:
两台主机同时安装好keepalived软件并启动服务,开始正常工作时,角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;
当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;
而当角色为Master的主机故障修复后,又会自动接管回他原来处理的工作,角色为Backup的主机则同时释放Master主机失效时他接管的工作。此时两台主机将恢复到启动时各自的原始角色及工作状态。
1.2 VRRP介绍
VRRP(虚拟路由冗余协议),它的出现就是为了解决静态路由的单点故障问题。VRRP通过竞选机制来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(Multicast)包(默认的多播地址224.0.0.18)形式发送的。
在一组虚拟路由器中,只有作为Master的VRRP路由器会一直发送VRRP广播包,此时Backup不会抢占Master。当Master不可用时,Backup就收不到来自Master的广播包了,此时多台Backup中优先级最高的路由器会抢占为Master。
二、环境介绍(基于Ubuntu 18.04)
角色 |
ip |
要部署的软件 |
Master |
192.168.8.106(node2) |
Keepalived,nginx |
Backup |
192.168.8.107(node3) |
Keepalived,nginx |
三、部署过程
- 两台机器分别安装Keepalived和Nginx,安装过程省略
- 两台机器分别配置nginx的测试页面,便于区分
3.Master端部署Keepalived.conf:
4.Backup端部署Keepalived.conf:
注意,两个keepalived要组成集群,需要满足以下条件:
virtual_router_id(路由器id)必须相同;
authentication(认证机制)里面的auth_type(认证方式)和auth_pass(密钥)配置必须一致
5.检测Nginx脚本(主备一致):
先检查Nginx是否启动,如未启动则启动Nginx,休眠1s能有足够时间启动Nginx。之后再检测Nginx服务状态,如仍未启动则停止keepalived和nginx服务。脚本内容如下:
6.之后两台机器分别启动Nginx和Keepalived,测试过程如下:
(1)查看vip,发现vip是在192.168.8.106上(因为106机器的权重为100,大于107机器的90)。此时访问vip就转向106机器的nginx测试页面
(2)停止主节点106的Keepalived服务,发现vip已经切换到从节点192.168.8.107。此时再访问vip就转向107机器的nginx测试页面
(3)再次重新启动主节点106的keepalived,则vip又重新切换到主节点106上,访问vip也是主节点106的nginx测试页面。因为此时106机器的权重为100,而107机器为90。
(4)也可以测试在nginx出现问题的情况下,实现切换,这个时候只需要把nginx的配置文件进行修改,让其变得不可用,然后强杀掉nginx进程即可,发现也会实现vip自动切换服务器节点