一直以来,对于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 MASTERinterface eth0virtual_router_id 51priority 101advert_int 1authentication {auth_type PASSauth_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

keepalived学习记录相关推荐

  1. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  2. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  3. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  4. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  5. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  6. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  7. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

  8. java之字符串学习记录

    java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...

  9. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

最新文章

  1. getOwnPropertyNames() keys()
  2. 字节面试必须拿下的十道算法题,你会几道?
  3. 【转】Compile、Make和Build的区别
  4. Free tour II SPOJ - FTOUR2 点分治 + 树状数组
  5. 自定义 Spark item 的渲染器
  6. 无锁atomicInteger
  7. Ubuntu18.04找不到wifi适配器解决办法以及怎么上网
  8. PCB和PCBA设计及标准
  9. 大数据与数据分析概述
  10. HDU 4609 3-idiots (思维+FFT卷积)
  11. 4.2.1 Duration and Convexity
  12. docker 执行py文件
  13. 仿淘宝、京东多重商品属性组合Sku标签
  14. 此计算机将网络限制为,解决win7无法连接wifi提示“此计算机当前已将连接限制为...”的方法...
  15. C语言入门习题系列二(含答案)
  16. 【2019.05】极验滑动验证码破解 geetest
  17. SQL查询重复记录 sql 查重
  18. innodb buffer pool管理--数据页的访问
  19. 【Java】学习日记 Day11
  20. [CSDN帮助]勤写勋章说明

热门文章

  1. vue3.2+js,web端canvas实现手写签名
  2. 闪电网络(三):建立闪电通道+利用闪电通道转账
  3. SSM拦截ajax请求判断session过期
  4. AMBA AHB面试题连载(一)
  5. Winpython环境下mayavi配置
  6. 天下手游服务器维护需要多久,天下手游22日更新维护内容详细解读
  7. wordpress免插件实现添加“友情链接”功能,非常简单!
  8. 解析!2018软件测试官方行业报告
  9. 请选出可用作c语言用户标识符的是6,请选出可用作C语言用户标识符的一组标识符____...
  10. 看《功勋》于敏,真的看到了人和人的差距!