当前位置: 首页 > 后端技术 > Java

Nginx挂了怎么办?如何实现高可用?

时间:2023-04-01 15:39:34 Java

作者:SimpleWu来源:https://www.cnblogs.com/Simpl...什么是高可用?高可用性HA(HighAvailability)是分布式系统架构设计中必须考虑的因素之一。通常是指通过设计减少系统不能提供服务的时间。如果一个系统可以一直提供服务,那么可用性就是100%,但是也有不可预知的事情。所以我们只能尽可能的减少服务失败。解决了问题?在生产环境中,经常使用Nginx作为反向代理对外提供服务,但是总有一天Nginx难免会遇到故障,比如服务器宕机。当Nginx宕机时,所有外部接口都将无法访问。虽然我们不能保证服务器100%可用,但是我们必须想办法避免这种悲剧发生。今天我们使用keepalived来实现Nginx的高可用。双机热备方案该方案是目前国内企业最为普遍的高可用方案。双机热备实际上就是一台服务器提供服务,另一台服务器为某项服务处于备用状态。当一台服务器不可用时,将其替换为另一台服务器。什么是保活?Keepalived软件最初是为LVS设计的负载均衡软件,用于管理和监控LVS集群系统中各个服务节点的状态,后来加入了VRRP(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议)可以实现高可用性的功能。因此,Keepalived除了可以管理LVS软件外,还可以作为其他服务(如:Nginx、Haproxy、MySQL等)的高可用解决方案。当Keepalived服务正常工作时,主Master节点会不断向备节点发送(组播)心跳消息,告诉备Backup节点它还活着。当主Master节点出现故障时,无法发送心跳消息。因此节点无法继续检测来自主节点的心跳,于是调用自己的接管程序接管主节点的IP资源和服务。而当主Master节点恢复时,备份Backup节点将释放其在主节点故障时接管的IP资源和服务,恢复到原来的备份角色。另外,Nginx系列面试题和答案都整理好了。微信搜索Java技术栈,后台发送:面试,网上可以看。实施过程准备192.168.16.128192.168.16.129两台虚拟机。安装Nginx安装Nginx更新yum源文件:rpm-ivhhttp://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmwget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo安装Nginx:yum-yinstallnginx运行命令:systemctlstartnginx;#启动Nginxsystemctlstopnginx;#停止Nginx安装keepalivedyum可以直接安装,此方法会自动安装依赖:yum-yinstallkeepalived修改主机(192.168.16.128)keepalived配置文件yum安装会在/etc/keepalived下产生配置文件:vikeepalived.confkeepalived。conf:#Detectionscriptvrrp_scriptchk_http_port{script"/usr/local/src/check_nginx_pid.sh"#心跳执行脚本检测nginx是否启动interval2#(检测脚本执行间隔,单位秒)weight2#weight}#vrrpinstancedefinitionpartvrrp_instanceVI_1{stateMASTER#指定keepalived的角色,MASTER是master,BACKUP是backupinterfaceens33#当前vrrp通信的网络接口卡(当前centos网卡)使用ifconfig查看你的详细网络cardvirtual_router_id66#虚拟路由号,master和slave必须始终优先级100#优先级,值越大,获取和处理请求的优先级越高advert_int1#检查间隔,默认1s(vrrp组播周期秒)#授权接入认证{auth_typePASS#设置认证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass1111}track_script{chk_http_port#(调用检测脚本)}virtual_ipaddress{192.168.16.130#定义虚拟ip(VIP),可以设置多个,每行一个}}virtual_ipaddress可以配置vip,通过vip在线访问服务接口需要根据服务器网卡进行设置。通常的查看方式是ipaddrauthentication配置授权访问备机。同样的配置也需要修改备机(192.168.16.129)keepalived配置文件keepalived.conf:#Detectionscriptvrrp_scriptchk_http_port{script"/usr/local/src/check_nginx_pid.sh"#heartbeat执行脚本检测nginx是否isstartedinterval2#(检测脚本执行间隔)weight2#weight}#vrrp实例定义部分vrrp_instanceVI_1{stateBACKUP#指定keepalived的作用,MASTER为主,BACKUP为备接口ens33#当前网卡用于vrrp通信(当前centos网卡)使用ifconfig查看你具体的网卡virtual_router_id66#虚拟路由器编号,master和slave必须始终优先级99#优先级,值越大,获取进程的优先级越高requestadvert_int1#检查间隔,默认1s(vrrp组播周期秒)#授权接入认证{auth_typePASS#设置认证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass1111}track_script{chk_http_port#(来电检测脚本)}virtual_ipaddress{192.168.16.130#定义虚拟ip(VIP),可以多假设,每行一个}}检测脚本:#!/bin/bash#Detectnginx是否启动A=`ps-Cnginx--no-header|wc-l`if[$A-eq0];then#如果nginx没有启动,则启动nginxsystemctlstartnginx#Restartnginxif[`ps-Cnginx--no-header|wc-l`-eq0];then#nginxrestart失败,则停止keepalived服务,执行VIP调用killallkeepalivedfifi脚本授权:chmod775check_nginx_pid.sh说明:脚本必须授权,否则无法访问,这里我们执行两台服务器,VIP(virtual_ipaddress:192.168.16.130),我们生产环境直接使用VIP访问服务模拟nginx故障:修改两台服务器默认访问的Nginxhtml页面作为差异。先访问192.168.16.130,通过vip访问,页面显示192.168.16.128;表示当前是主服务器提供的服务。此时192.168.16.128主服务器执行命令:systemctlstopnginx;#停止nginx,再次访问vip(192.168.16.130),发现此时页面显示:192.168.16.128,这是脚本中的自动重启。现在直接关闭192.168.16.128服务器,访问vip这里(192.168.16.130)现在发现页面显示192.168.16.129。这时候keepalived会自动进行failover,搭建一个企业级生产环境的高可用解决方案。keepalived还有很多其他的功能,比如:邮件提醒等,可以去官网看文档。另外,关注公众号Java技术栈,后台回复:面试,可以拿到我整理的Nginx系列面试题及答案,很全。近期热点文章推荐:1.1,000+Java面试题及答案(2021最新版)2.终于通过开源项目拿到了IntelliJIDEA激活码,太贴心了!3、阿里Mock工具正式开源,秒杀市面上所有Mock工具!4、SpringCloud2020.0.0正式发布,全新颠覆版本!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!