1.什么是keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

2.工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(VIP = Virtual IP Address,虚拟IP地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
    keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。

3.keepalived+nginx实现高可用过程

4 准备

Linux下Nginx+keepalived实现高可用 - 仅此而已-远方 - 博客园

虚拟机两台,安装Nginx,安装 keepalived 可直接使用命令 yum -y install keepalived 。

keepalived 默认配置文件路径:/etc/keepalived/keepalived.conf

keepalived 默认日志存放路径:/var/log/messages

网格划分如下:

名称 操作系统 IP 虚拟IP keepalived
虚拟机1 Centos7.6 192.168.20.12 192.168.20.100 MASTER
虚拟机2 Centos7.6 192.168.20.16 192.168.20.100 BACKUP

5、keepalived抢占式配置

MASTER配置如下(默认配置文件:/etc/keepalived/keepalived.conf):

global_defs {               router_id keep12             ##路由id,通常为 hostname
}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径interval 10             ## 检测时间间隔weight -20              ## 如果条件成立,权重-20
}vrrp_instance VI_1 {state MASTER                ##主节点为 MASTER,备份节点为 BACKUPinterface ens32             ##绑定 VIP 的网络接口,与本机IP地址所在网络接口相同virtual_router_id 100       ##虚拟路由id,主从节点必须保持一致priority 100                ##节点优先级,直范围0-254,MASTER 要比 BACKUP 高advert_int 1authentication {            ##设置验证信息,两个节点必须一致auth_type PASSauth_pass 123456}track_script {chk_nginx               ##执行 Nginx 监控}virtual_ipaddress {192.168.20.100          ##VIP,两个节点必须设置一样(可设置多个)}
}

BACKUP配置如下(默认配置文件:/etc/keepalived/keepalived.conf):

global_defs {               router_id keep16             ##路由id,通常为 hostname
}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径interval 10              ## 检测时间间隔weight -20              ## 如果条件成立,权重-20
}vrrp_instance VI_1 {state BACKUP                ##主节点为 MASTER,备份节点为 BACKUPinterface ens32             ##绑定 VIP 的网络接口,与本机IP地址所在网络接口相同virtual_router_id 100       ##虚拟路由id,主从节点必须保持一致priority 90                 ##节点优先级,直范围0-254,MASTER 要比 BACKUP 高advert_int 1authentication {            ##设置验证信息,两个节点必须一致auth_type PASSauth_pass 123456}track_script {chk_nginx               ##执行 Nginx 监控}virtual_ipaddress {192.168.20.100          ##VIP,两个节点必须设置一样(可设置多个)}
}

其中有几个配置需要注意:

a、router_id,最好配置成hostname(需要在 /etc/hosts 文件中,增加一行,比如:127.0.0.1  keep12)

b、interface,本机IP地址所在网络接口(可以通过 ifconfig 命令查看具体ip所对应的那个接口名称)

c.  interval : 心跳检查间隔时间太短了,会报错.

脚本中的sleep时间是2s,那么interval至少 大于2秒. 我设置10秒

日志提示:/etc/keepalived/nginx_check.sh exited due to signal 15

原因:心跳检查间隔时间太短了

解决:interval设置大一点(一定要大于sleep时间)

6、增加检测心跳脚本

在 /etc/keepalived 目录下,新增文件 nginx_check.sh (和上面对应script中对应),然后添加内容

chmod 777   nginx_check.sh 授权

#!/bin/bashif [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then/usr/sbin/nginxfi
sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; thenkillall keepalived
fi

7. 启动

[root@localhost /]# service  keepalived start  -- 启动
[root@localhost /]# service keepalived stop    --关闭
[root@localhost /]# ps aux|grep keepalived   --查看进程我一般kill 

7、测试

nginx的index.html 写上ip,来区分访问的页面

a、分别启动两台机器上的 Nginx 和 keepalived,然后访问虚拟ip:http://192.168.20.100  看到的A机器

b、停掉192.168.20.12上的Nginx服务,在 keepalived的日志文件中可以看到心跳脚本被执行了,最后杀掉了keepalived: (也可以直接停掉keeplived,模拟主机当机)

为了方便测试,最好先将上面心跳脚本文件中的重启nginx注释掉,不然手动停止Nginx后,又会被keepalived复活。

C. 然后访问虚拟ip:http://192.168.20.100   看到是B机器

D. 重启A机器上keeplive 或者nginx. 访问http://192.168.20.100   看到是B机器. 除非把B停掉才会切换回来

8. 遇到报错: 

>>> 心跳脚本没有被执行 

原因: 脚本写错了,所以编辑心跳脚本文件,可以通过sh nginx_check.sh 命令执行一下,看编写的脚本是否正确

>>> 心跳脚本执行报错,日志提示:WARNING - script '/etc/keepalived/nginx_check.sh' is not executable for uid:gid 0:0 - disabling.

原因:心跳脚本文件没有执行权限

解决:chmod +x /etc/keepalived/nginx_check.sh

>>> 心跳脚本执行报错,日志提示:/etc/keepalived/nginx_check.sh exited due to signal 15

原因:心跳检查间隔时间太短了

解决:interval设置大一点(一定要大于sleep时间)

9. Keepalived非抢占模式配置

Keepalived非抢占模式配置 - T-BARBARIANS - 博客园

下面直接展示keepalived的非抢占配置。

主机配置如下:vrrp_instance VI_1
{state BACKUPnopreemptpriority 100advert_int 1virtual_router_id 1interface eth0authentication{auth_type PASSauth_pass abcd@hehe}virtual_ipaddress{100.92.2.110}
}备机配置如下:vrrp_instance VI_1
{state BACKUPnopreemptpriority 90advert_int 1virtual_router_id 1interface eth0authentication{auth_type PASSauth_pass abcd@hehe}virtual_ipaddress{100.92.2.110}
}

重点:

1、两个节点的state都必须配置为BACKUP

2、两个节点都必须加上配置 nopreempt

引用官方文档对nopreempt字段的说明:

"nopreempt" allows the lower priority machine to maintain the master role, even when a higher priority machine comes back online.

NOTE: For this to work, the initial state of this entry must be BACKUP.

根据上述描述,第一点提到的state必须配置为BACKUP就明白了。

3、其中一个节点的优先级必须要高于另外一个节点的优先级。

10. 配置keeplived日志文件

>> vi /etc/sysconfig/keepalived #修改配置文件

KEEPALIVED_OPTIONS=”-D -d -S 0”

>> vi /etc/rsyslog.conf #修改配置文件

local0.* /var/log/keepalived.log  #日志保存位置

>> 重启服务

重启 rsyslog 服务:service rsyslog restart

重启 keepalived 服务:service keepalived restart

>> 日志可以在  /var/log/keepalived.log 看到

11 如何判断虚ip对应哪台机器

ip addr

表示再此机器上

表示不再此机器上

12   如果虚ip 在两台机器上就出问题

记一次keepalived和VIP导致的故障 - 腾讯云开发者社区-腾讯云

有2台服务器绑定相同的vip, 出现大面积的不能访问

问题的根源在于,keepalived为网卡停止后,keepalived为网卡绑定的VIP并没有移除,导致多台机器出现同样的ip。

解决方案, 通过ip addr delete删除绑定的vip

ip addr delete 172.31.161.42/32 dev eno1
ip addr delete 172.31.161.41/32 dev eno1
ip addr delete 172.31.161.41/0 dev eno1

顺道介绍如何给网卡绑定vip

ip addr add 172.31.161.41/32 dev eno1

13 nginx 部署:

linux安装nginx_我家小宝_朱朱的博客-CSDN博客

14. haproxy 部署:

linux-rabbit集群部署+ha_我家小宝_朱朱的博客-CSDN博客

15 haproxy+nginx的脚本

#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -D
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; thenkillall keepalivedfiif [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then/usr/sbin/nginxfi
sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; thenkillall keepalived
fi

keepalived+nginx,haproxy相关推荐

  1. lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析

    目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为什么这么搭配,而又有什么 ...

  2. Redhat5下haproxy+keepalived+nginx配置笔记

    Redhat5下haproxy+keepalived+nginx配置笔记 ----by knight HA:高可用性 keepalived个人简单理解就是实现一个虚IP在keepalived主从服务器 ...

  3. Haproxy+Keepalived+Nginx

    Haproxy+Keepalived+Nginx 高可用负载均衡 官方网站: http://haproxy.com/ http://www.keepalived.org/ http://nginx.o ...

  4. haproxy+keepalived+nginx+php-fpm

    手头有三台机器,领导要求做成高可用的网站,一台做数据库肯定是没错的,剩下两台机器只能做web了. 原本打算用nginx+keepalived,keepalived做高可用没问题,一主一从,但是从机完全 ...

  5. LVS Nginx HAProxy 优缺点

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...

  6. LVS Nginx HAProxy 三种负载均衡优缺点比较

    搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...

  7. F5/LVS/Nginx/HAProxy硬软件级网络负载均衡介绍

    F5/LVS/Nginx/HAProxy硬软件级网络负载均衡介绍 1 硬件级的负载均衡 常见的商用硬件负载均衡器:NetScaler.F5.Radware.Array 优点: 1)专业团队维护,能够直 ...

  8. lvs/nginx/haproxy优缺点

    Nginx的优点是: 1.工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名.目录结构 它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一 Nginx ...

  9. IT运维面试问题总结-LVS、Keepalived、HAProxy、Kubernetes、OpenShift

    文章目录 1.简述ETCD及其特点 2.简述ETCD适应的场景? 3.简述HAProxy及其特性 4.简述HAProxy常见的负载均衡策略? 5.简述负载均衡四层和七层的区别? 6.简述LVS.Ngi ...

  10. Keepalived与HaProxy的协调合作原理分析

    Keepalived与HaProxy的协调合作原理分析 keepalived与haproxy合作场景 更好的理解方式 协调合作中考虑的问题 一.Keepalived 以TCP/IP模型角度来分析: 二 ...

最新文章

  1. 元宇宙和我有什么关系?
  2. linux安全体系分析与编程pdf下载,linux内核printk调试(摘录《Linux安全体系分析与编程》)...
  3. Jenkins 2.9.1 安装文档
  4. 台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression
  5. python最短回文串_LeetCode-Python-214. 最短回文串
  6. jsf绑定bean_JSF –渴望的CDI bean
  7. 为什么ConcurrentHashMap没有ConcurrentHashSet
  8. android动画之属性动画学习
  9. 产业研发用地_金阊新城控制规划调整 新增学校 住宅及产业研发用地
  10. ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等
  11. 【炫斗之王win7主题下载】
  12. java菜鸟驿站_RxJava菜鸟驿站(一)
  13. svchost.exe病毒-任务栏怎么也关闭不掉的搜索框
  14. 新浪云sae免费PHP,免费php空间:新浪云平台sae搭建WordPress网站
  15. linux 常用解压、压缩命令合集——筑梦之路
  16. Inspect的学习笔记
  17. 人体属性检测与深度实战
  18. 我是一个计算机作文,我是一台电脑作文
  19. JavaScript进阶篇③ — 浏览器对象、Dom对象
  20. 三八节送什么礼物好?最适合送礼的无线蓝牙耳机品牌排名

热门文章

  1. 为什么SecureCRT里无法输入?
  2. vue 如何生成一个dom元素_vue:虚拟dom的实现
  3. 常州2021高考成绩查询,2021江苏常州高考选课分班情况(数据)
  4. Android Bitmap 保存图片透明背景变黑色背景
  5. 计算机管理 灰色,详解电脑任务管理器变成灰色不可用的解决方法
  6. 安装win7时,出现“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”的处理方式
  7. 用Delphi开发微信支付和支付宝支付生成签名并提交刷卡支付请求验证源码
  8. 浏览器 本地html 图片不显示,浏览网页图片无法显示怎么回事 网页图片显示不出来的解决方法...
  9. SQL简体繁体转换函数代码
  10. 使用基于全志D1-H的LicheeRV的 86 Panel 与 Tina BSP 实现 RGB 与 SPI 双屏显示