热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

centosnginx重启_【实战演练】Linux操作系统14keepalived实现Nginx服务器高可用

#本文欢迎转载,转载请注明出处和作者。理论部分,在之前的文章已经说明过了,详见:繁星亮与鲍包包:【理论研究】业

#本文欢迎转载,转载请注明出处和作者。

理论部分,在之前的文章已经说明过了,详见:

繁星亮与鲍包包:【理论研究】业务系统高可用及负载均衡​zhuanlan.zhihu.com
6e02cf4b0c5065bb555187ab73a4749c.png

上一篇已经讲述通过单台Nginx服务器对2/多台Apache服务器做负载均衡,但是Nginx本身却存在单点故障隐患。

繁星亮与鲍包包:【实战演练】Linux操作系统13-Nginx实现WEB服务器负载均衡​zhuanlan.zhihu.com

如前面理论所述,解决上述问题,本篇介绍通过安装keepalive,对Nginx服务器做高可用HA。

ba2207d6c1e1d31e37d341991d698d4e.png

1、Keepalived简介

Linux有很多开源的HA软件,keepalived是其中的一款,用keepalived可以用来解决很多应用程序的高可用问题。(如本篇的Nginx,以后后面对LVS、Mysql都可以用Keepalived来做高可用配置)

2、LVS、Keepalived、Nginx区别

LVS是用来做4层的负载均衡的,只能通过IP五元组进行流量分发。

Keepalived是用来做HA的,可以对任意的程序(需要写脚本)进行检测,然后对该软件做HA,例如可以对LVS、Nginx、Mysql等来做HA。

Keepalived内嵌LVS模块的,提供VIP的功能。所以如果用了Keepalived,就不需要额外做LVS的Director配置了,但是Realserver的配置还是需要。

Nginx,是可以做7层的负载均衡。LVS只能对IP五元组进行流量分发,而Nginx可以做到应用级别,例如动静分离(图片、视频)等。

3、安装Keepalived

3.1 安装

yum install keepalived -y

3.2 修改配置文件

cd /etc/keepalived
rm keepalived.conf
#原有的配置文件
vi keepalived.conf
#创建新的配置文件

注意配置文件只有一些关键参数必须修改,其他都是默认的。

Master(主)服务器配置

global_defs {notification_email {xxx@xxx.com}notification_email_from sns-lvs@gmail.comsmtp_server xxx.xxx.xxx.xxxsmtp_connection_timeout 30router_id LVS_MASTER # 设置lvs的id,在一个网络应该是唯一的
}vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行interval 2 #(检测脚本执行的间隔,单位是秒)weight 2
}vrrp_instance VI_1 {state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备interface eth1 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),注意如果网卡是eth1,要对应修改。virtual_router_id 66 # 虚拟路由编号,主从要一直priority 100 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port #(调用检测脚本)}virtual_ipaddress {10.1.30.31 # 定义虚拟ip(VIP),可多设,每行一个}
}

注意上面配置中vrrp_script后面定义了一个叫chk_http_port的脚本,而真正脚本实际的路径是/usr/local/src/下面的check_nginx_pid.sh。这个是要后面实际添加的,也就是需要写一个脚本检测nginx服务运行状况。

下面的tracks_cript设置检测脚本为上面定义的chk_http_port,keepalived启动后会自动按照设置好的时间间隔,周期性调用检测脚本。

Slave(从)服务器配置

global_defs {notification_email {xxx@xxx.com}notification_email_from sns-lvs@gmail.comsmtp_server xxx.xxx.xxx.xxxsmtp_connection_timeout 30router_id LVS_BACKUP # 设置lvs的id,在一个网络应该是唯一的
}vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行interval 2 #(检测脚本执行的间隔,单位是秒)weight 2
}vrrp_instance VI_1 {state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备
interface eth1 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡),注意如果网卡是eth1,要对应修改。
virtual_router_id 66 # 虚拟路由编号,主从要一致priority 99 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port #(调用检测脚本)}virtual_ipaddress {10.1.30.31 # 定义虚拟ip(VIP),可多设,每行一个}
}

3.3 编写检测脚本

编写nginx检测脚本,注意路径与名称要和上面keepalivce.conf中的保持一致。

vi /usr/local/src/check_nginx_pid.sh
# vi /usr/local/src/check_nginx_pid.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginx #重启nginxif [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移killall keepalivedfi
fi

增加脚本执行权限

chmod +x /usr/local/src/check_nginx_pid.sh

3.4 启动keepalived服务

service keepalived start

3.4 测试

3.4.1 手动停止Nginx

启动进程后,在30.40输入ip a s查看虚拟IP是否成功挂载。

4e86a231fb5ab1cd362a531a2939e878.png

ping 虚拟IP测试

4e86a231fb5ab1cd362a531a2939e878.png

连续通过VIP(10.1.30.31)访问网站,不断刷新测试,发现访问流量已经在两个Apache01与Apache02之间分发。

然后对Nginx主机手动停止Nginx服务。

service nginx stop

然后继续通过VIP(10.1.30.31)访问网站,发现网站依然能够正常访问。

eef57d9f066fd3087638e105fa3d8970.png
8b3209f020bba0e78619a473c02cd3fa.png

通过ip a s查看,发现30.31还是在nginx01上面。

4e86a231fb5ab1cd362a531a2939e878.png

原因是这样的:我们设置了一个脚本(check_nginx_pid.sh),利用keepalived周期性自动运行,脚本检测nginx进程是否存活,如果进程异常退出/没有运行,脚本会重新启动nginx进程。

因此,上面手动停止nginx服务,keepalived并不会将VIP从主Nginx服务器切换到备Nginx服务器,而是通过脚本重启将nginx启动,。因此通过VIP访问网站,由于3秒内nginx已经重启启动了,业务仍然能够正常访问。

3.4.2 手动停止keepalived

主Nginx服务器手动停止Keepalived

service keepalived stop

通过ip a s发现VIP已经自动切换到备Nginx服务器了。

9e62f85bfd061e6681cccdc06d0ed90e.png

通过VIP访问网站,发现业务正常访问。

eef57d9f066fd3087638e105fa3d8970.png
8b3209f020bba0e78619a473c02cd3fa.png

当前,2台Nginx服务器通过keepalived以及nginx检测脚本,实现了HA。但是用户通过VIP访问业务的时候,正常情况下只有1台Nginx负载用户的访问。

为了让2台Nginx服务器都能承载业务负载,下一篇通过keeaplived自带的LVS模块功能,实现2台Nginx服务器的负载均衡。



推荐阅读
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 阿里云服务器搭建详解——Ubuntu
    由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器。听朋友说,学生买的话是非常便宜 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 一、Tomcat安装后本身提供了一个server,端口配置默认是8080,对应目录为:..\Tomcat8.0\webapps二、Tomcat8.0配置多个端口,其实也就是给T ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
author-avatar
mobiledu2502880383
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有