热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

KeepAlived+Nginx实现高可用

提前备好两台服务器(主:192.168.2.34,备:192.168.2.24),并安装好nginx,nginx安装此文不做赘述1、下载keepAlived至usrlocal并解压

提前备好两台服务器(主:192.168.2.34,备:192.168.2.24),并安装好nginx,nginx安装此文不做赘述

1、下载keepAlived至/usr/local并解压

wget --no-check-certificate https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
tar -zxvf keepalived-2.2.7.tar.gz

2、安装

#创建安装目录
mkdir /usr/local/keepalived
#安装
cd keepalived-2.2.7/
./configure --prefix=/usr/local/keepalived --syscOnf=/etc ##此处指定安装目录以及配置文件路径
make && make install

 3、此时/usr/local 目录下会有三个文件,除了安装目录(keepalived)其余两个都可以删除

 4、新增配置文件。

#我们安装时就指定了配置文件所在目录/etc/keepalived下
cd /etc/keepalived
#拷贝一个新的配置文件
cp keepalived.conf.sample keepalived.conf

 samples下为一些常用的配置文件示例。

 5、修改配置文件

##主
vrrp_instance VI_1 {
state MASTER ##主机为MASTER 备机为BACKUP
interface ens160 ##物理网卡名称
virtual_router_id 1 ##虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟ID还是虚拟MAC最后一段地址信息,取值范围0~255
priority 100 ##节点优先级,主 > 备
advert_int 1 ##主备间心跳检查时间间隔,单位:s
authentication { ##校验方式,主要有AUTH和PASS两种,主备通信时使用,通常使用PASS
auth_type PASS
auth_pass 123456 ##主备密码必须相同
}
virtual_ipaddress {
192.168.2.111 ##虚拟ip,主备必须相同
}
}
##备
vrrp_instance VI_1 {
state BACKUP ##主机为MASTER 备机为BACKUP
interface ens160 ##物理网卡名称
virtual_router_id 1##虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,而且这个虚拟ID还是虚拟MAC最后一段地址信息,取值范围0~255
priority 80 ##节点优先级,主 > 备
advert_int 1 ##主备间心跳检查时间间隔,单位:s
authentication { ##校验方式,主要有AUTH和PASS两种,主备通信时使用,通常使用PASS
auth_type PASS
auth_pass 123456 ##主备密码必须相同
}
virtual_ipaddress {
192.168.2.111 ##虚拟ip,主备必须相同
}
}

6、将keepalived加入系统服务

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/sbin/keepalived /etc/init.d/
##刷新系统进程
systemctl daemon-reload
##启动、终止、查看状态、重启
systemctl start keepalived.service
systemctl stop keepalived.service
systemctl status keepalived.service
systemctl restart keepalived.service

7、启动keepalived服务(主备都启)

 8、查看网卡ip

[root@data-anal keepalived]# ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:6e:9b:d2 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.34/24 brd 192.168.2.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet 192.168.2.111/32 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::716c:e679:1315:14/64 scope link noprefixroute
valid_lft forever preferred_lft forever

先在主服务器(192.168.2.34)上查看,可以看到我们配置的网卡上多出来一个虚拟ip:192.168.2.111,反观备服务器(192.168.2.24)上是没有的。

如果都有的话,可能是配置文件中的虚拟路由id(virtual_router_i)不相同,导致分成了两个虚拟路由

9、通过虚拟ip访问我们提前装好的nginx,我们安装好的两个nginx分别做了区分



  • 主服务器(192.168.2.34)nginx欢迎页



  •  备服务器(192.168.2.24)nginx欢迎页

10、通过我们的VIP(192.168.2.111)访问nginx,此时我们看到是主服务器(192.168.2.34)在响应。

 

11、我们关停主服务器keepalive服务,同时监控备服务器日志信息(默认在 /var/log/messages ),可以看到备服务器同步已经注册了虚拟ip(192.168.2.111),同时通过 ip addr 查看,发现主服务器的虚拟ip已经剔除。

systemctl stop keepalived.service

12、此时通过虚拟ip再进行访问,发现已经是备服务器(192.168.2.24)在响应,此时已经实现了keepAlived的高可用。高并发时备服务器可以有多个。

 13、keepalived的高可用为了保证其他服务的正常使用,如果keepalived可用,但应用服务不可用那就是个假象。所以检测其他服务的功能也是必备的,此处我们以检测nginx服务为例(两台服务器都做配置)



  • 在/etc/keepalived目录增加nginx检测脚本chk_nginx.sh,并赋权可执行 chmod +x chk_nginx.sh

#!/bin/bash
## 查看某个名称的进程个数 ps -C nginx --no-header |wc -l
A=`netstat -tnlp | grep 80 | grep nginx | wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `netstat -tnlp | grep 80 | grep nginx | wc -l` -eq 0 ];then
systemctl stop keepalived.service
fi
fi

  



  •  在keepalived.conf中增加检测。两点要求:vrr_script 在vrrp_instance 之前track_script 在virtual_ipaddress之前

vrrp_script chk_nginx {
script "/etc/keepalived/chk_nginx.sh"
interval 2
weight 2
}

vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.2.111
}
track_script {
chk_nginx
}

}

 14、重启keepalived服务,保证主备keepalived服务正常,此时34服务器为主,24服务器为备,且虚拟ip在34服务器上,此时关停主服务器nginx,再查进程时发现nginx依然服务正常且 PID 已变,说明已经被keepalived重新拉起

15、此处我们假设一下nginx拉不起来的场景,在脚本中注释拉起nginx的语句,此处不用重启keepalived。

 16、我们停掉nginx,同时我们在备服务器上可以看到,虚拟ip已经漂移至备服务器,同时主keepalived服务已经被停掉

/usr/local/nginx/sbin/nginx -s stop

停之前主keepalived进程

备服务日志

 

停止后keepalived进程

17、此时我们keepalived + Nginx高可用已经实现。

PS:实操过程中有几个要点:



  • 设置网卡时,使用 ip addr 查看绑定网卡信息 

  • 设置虚拟ip时,一定要设置当前网络环境没有被分配的ip,已经分配的ip,启动服务也不会报错,但访问不到。可以用局域网ip扫描工具扫描下。 

  • chk_nginx.sh中检测间隔时间(sleep 1)一定要比keepalived.conf中配置的检测间隔时间(interval 2)要短,不然会出现一直到不了停keepalived进程

 



推荐阅读
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ... [详细]
  • 三菱PLC SLMP协议报文详解
    本文详细解析了三菱PLC中使用的SLMP协议报文结构,包括其工作原理、通信流程及报文格式,旨在帮助工程师和技术人员更好地理解和运用这一协议。 ... [详细]
  • 如何配置DHCP服务器
    本文详细介绍了配置DHCP服务器的步骤,包括路由器设置和电脑端配置,确保设备能够自动获取IP地址并正常联网。 ... [详细]
  • 深入探讨智能布线管理系统的电子配线架应用
    本文详细介绍了电子配线架智能布线系统的核心优势,包括实时监测网络连接、提高操作准确性、图形化显示连接架构、自动识别网络拓扑、增强安全性等功能。该系统不仅提升了网络管理的效率和准确性,还为资产管理、报告生成以及与其他智能系统的集成提供了强大的支持。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ... [详细]
  • 本文详细介绍了Java Web应用程序中的过滤器(Filter)功能,包括其作用、实现方式及配置方法。过滤器可以在请求到达目标资源之前对其进行预处理,并在响应返回给客户端之前进行后处理。 ... [详细]
  • Python 异步编程:ASGI 服务器与框架详解
    自 Python 3.5 引入 async/await 语法以来,异步编程迅速崛起,吸引了大量开发者的关注。本文将深入探讨 ASGI(异步服务器网关接口)及其在现代 Python Web 开发中的应用,介绍主流的 ASGI 服务器和框架。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
author-avatar
萌星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有