keepalived+nginx,haproxy
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相关推荐
- lvs(+keepalived)、haproxy(+heartbeat)、nginx 负载均衡的比较分析
目前使用比较多的就是标题中提到的这两者,其实lvs和haproxy都是实现的负载均衡的作用,keepalived和heartbeat都是提高高可用性的,避免单点故障.那么他们为什么这么搭配,而又有什么 ...
- Redhat5下haproxy+keepalived+nginx配置笔记
Redhat5下haproxy+keepalived+nginx配置笔记 ----by knight HA:高可用性 keepalived个人简单理解就是实现一个虚IP在keepalived主从服务器 ...
- Haproxy+Keepalived+Nginx
Haproxy+Keepalived+Nginx 高可用负载均衡 官方网站: http://haproxy.com/ http://www.keepalived.org/ http://nginx.o ...
- haproxy+keepalived+nginx+php-fpm
手头有三台机器,领导要求做成高可用的网站,一台做数据库肯定是没错的,剩下两台机器只能做web了. 原本打算用nginx+keepalived,keepalived做高可用没问题,一主一从,但是从机完全 ...
- LVS Nginx HAProxy 优缺点
搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...
- LVS Nginx HAProxy 三种负载均衡优缺点比较
搭建负载均衡高可用环境相对简单,主要是要理解其中原理.此文描述了三种负载均衡器的优缺点,以便在实际的生产应用中,按需求取舍. 目前,在线上环境中应用较多的负载均衡器硬件有F5 BIG-IP,软件有LV ...
- F5/LVS/Nginx/HAProxy硬软件级网络负载均衡介绍
F5/LVS/Nginx/HAProxy硬软件级网络负载均衡介绍 1 硬件级的负载均衡 常见的商用硬件负载均衡器:NetScaler.F5.Radware.Array 优点: 1)专业团队维护,能够直 ...
- lvs/nginx/haproxy优缺点
Nginx的优点是: 1.工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名.目录结构 它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一 Nginx ...
- IT运维面试问题总结-LVS、Keepalived、HAProxy、Kubernetes、OpenShift
文章目录 1.简述ETCD及其特点 2.简述ETCD适应的场景? 3.简述HAProxy及其特性 4.简述HAProxy常见的负载均衡策略? 5.简述负载均衡四层和七层的区别? 6.简述LVS.Ngi ...
- Keepalived与HaProxy的协调合作原理分析
Keepalived与HaProxy的协调合作原理分析 keepalived与haproxy合作场景 更好的理解方式 协调合作中考虑的问题 一.Keepalived 以TCP/IP模型角度来分析: 二 ...
最新文章
- 元宇宙和我有什么关系?
- linux安全体系分析与编程pdf下载,linux内核printk调试(摘录《Linux安全体系分析与编程》)...
- Jenkins 2.9.1 安装文档
- 台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression
- python最短回文串_LeetCode-Python-214. 最短回文串
- jsf绑定bean_JSF –渴望的CDI bean
- 为什么ConcurrentHashMap没有ConcurrentHashSet
- android动画之属性动画学习
- 产业研发用地_金阊新城控制规划调整 新增学校 住宅及产业研发用地
- ubuntu12.04完美安装QQ2012、QQMusic、Foxmail等
- 【炫斗之王win7主题下载】
- java菜鸟驿站_RxJava菜鸟驿站(一)
- svchost.exe病毒-任务栏怎么也关闭不掉的搜索框
- 新浪云sae免费PHP,免费php空间:新浪云平台sae搭建WordPress网站
- linux 常用解压、压缩命令合集——筑梦之路
- Inspect的学习笔记
- 人体属性检测与深度实战
- 我是一个计算机作文,我是一台电脑作文
- JavaScript进阶篇③ — 浏览器对象、Dom对象
- 三八节送什么礼物好?最适合送礼的无线蓝牙耳机品牌排名
热门文章
- 为什么SecureCRT里无法输入?
- vue 如何生成一个dom元素_vue:虚拟dom的实现
- 常州2021高考成绩查询,2021江苏常州高考选课分班情况(数据)
- Android Bitmap 保存图片透明背景变黑色背景
- 计算机管理 灰色,详解电脑任务管理器变成灰色不可用的解决方法
- 安装win7时,出现“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”的处理方式
- 用Delphi开发微信支付和支付宝支付生成签名并提交刷卡支付请求验证源码
- 浏览器 本地html 图片不显示,浏览网页图片无法显示怎么回事 网页图片显示不出来的解决方法...
- SQL简体繁体转换函数代码
- 使用基于全志D1-H的LicheeRV的 86 Panel 与 Tina BSP 实现 RGB 与 SPI 双屏显示