一直以来,对于Nginx+Keepalived实现高可用都停留在一个比较模糊的阶段。
只大致理解部署两个Nginx节点,其中只会有一个节点提供服务(主节点)。
当主节点挂了,自动切换到另一个节点(备用节点),这时候就是备用节点来提供服务,以此来达到高可用的目的。
但是对于主备切换的实现原理一直都不太清楚,加上tcp也有个keepalive,很容易和keepalived搞混。
于是专门花点时间来学习一下,通过记录博客来巩固一下。
要理解主备切换的原理,首先得了解什么是VIP(Virtual IP):虚拟IP。
下面两篇文章讲解得比较清楚:
https://www.cnblogs.com/myseries/p/11409895.html
https://www.cnblogs.com/wangwangfei/p/15575929.html
说是虚拟IP,看起来其实也就是一个普通的IP,似乎并没有什么差别。
但是和一般IP不同的是,虚拟IP不会分配给真实的主机。
换句话说,虚拟IP对应的不是某一台固定的主机(可以认为对应多台主机),它所对应的主机是会动态变化的
类似如下图:
VIP实际对应哪个IP,其实是不确定的,因为是可以随实际情况动态变化的。
一个IP对应的主机动态变化,这是怎么实现的呢,这就涉及到ARP协议了,简单理解为一个将IP地址转换为主机MAC地址的协议。
通过修改IP地址和MAC地址的对应关系,即可做到IP切换了(常说的VIP漂移,其实大致就是这样了)。
这个东西如果要自己去做,有大量的细节在里面,最好的方法当然是利用现成的工具软件了。
而且服务高可用可不只是IP切换这么简单,如何检测主节点挂掉,VIP漂移到备用节点,也有很多工作要做。
用keepalived,就可以只用配置一下,就轻松做到。
说了这么多,那keepalived到底是什么
一句话概括:keepalived一个基于VRRP协议来实现的服务高可用方案。
好像还是比较难以理解,
下面实际安装下keepalived来进行体验:
1、安装keepalived:
yum install -y keepalived
keepalived --version
systemctl start keepalived
systemctl status keepalived
2、修改keepalived配置文件
keepalived配置文件默认为:/etc/keepalived/keepalived.conf
默认安装好是有示例配置的,我这边直接把这个文件清空,写入自己的配置:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.19.103.240
}
}
3、重新加载配置
systemctl reload keepalived
4、查看是否生效
ip addr show eth0
可以看到已经生效
也可以通过执行 ip -br a命令来进行查看
目前只是单台机器,在多台机器上的操作类似
通过修改priority可以控制哪台实际生效
更多参考链接:
http://www.linuxvirtualserver.org/software/ipvs.html
https://www.redhat.com/sysadmin/keepalived-basics
https://www.redhat.com/sysadmin/ha-cluster-linux