keepalived高可用,nginx+keepalived+apache架构的实现

2024-06-23 07:28

本文主要是介绍keepalived高可用,nginx+keepalived+apache架构的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目    录

一、概述:

二、实验架构图如图所示:

三、实验环境:

四、实现效果:

五、实验解析及步骤:

六、具体实现:

6.1 先关闭防火墙和核心防护:两条命令:

6.2 后端apache服务器的实现

6.3 nginx负载均衡和方向代理的配置

6.4 keepalived集群

6.5 测试

6.5.1 对keepalived的关闭和开启测试

6.5.2 对nginx的开启和关闭测试


一、概述:

        keepalived高可用集群,把多台服务器虚构出一台来提供服务,这与网络中VRRP的实现原理一样,也有主备之分。

        利用keepalived高可用集群,实现多台(这里使用两台)nginx服务器反向代理+负载均衡实验,设置两台apache服务器,提供web服务器。在nginx服务器上做负载均衡通过反向代理到两台web服务器上。

二、实验架构图如图所示:

三、实验环境:

nginx服务器:

        7-1:192.168.114.10

        7-2:192.168.114.20

keepalived,VIP(virtual IP,VIP),虚拟IP:192.168.114.188

apache服务器:

        7-3:192.168.114.30

        7-4:192.168.114.40
客户端:

        7-5:192.168.114.50

        访问测试:curl 192.168.114.188

四、实现效果:

        当客户端访问VIP时,主服务器提供代理服务,实现负载均衡,当主服务器7-1出现故障(如关闭keepalived,nginx等 其他故障不能正常提供服务),备服务器7-2接替7-1的正常工作,虚拟IP由备接替,实现高可用效果。

五、实验解析及步骤:

        1.搭建两台web服务器

        2.yum安装nginx并搭建nginx服务器实现负载均衡和反向代理:此时仅仅实现了一台nginx服务器的效果。(编译安装也可以,之前博客有写)

        3.安装keepalived,修改配置文件,实现两台nginx服务器虚拟成一台服务器地址提供服务:提供服务的是主(master)服务器,备(backup)作为备用服务器。

        4.客户端测试:实现访问VIP有两台web服务器提供服务,实际是nginx主服务器负载均衡和反向代理,把主服务器关闭认为使其出现故障,备服务器能够作为主服务器提供正常服务。

六、具体实现:

6.1 先关闭防火墙和核心防护:两条命令:

        除客户端其他四台必须关,最好都关闭

systemctl stop firewalld

setenforce 0

6.2 后端apache服务器的实现

yum安装httpd,写一个主页文件,开启服务

7-3 apache服务器

[root@Node3 ~]#:yum install -y httpd

[root@Node3 ~]#:echo "7-333" > /var/www/html/index.html

[root@Node3 ~]#:systemctl start httpd

7-4 apache服务器,同理

[root@Node4 ~]#:yum install -y httpd

[root@Node4 ~]#:echo "7-444" > /var/www/html/index.html

[root@Node4 ~]#:systemctl start httpd

使用客户端测试:

两台服务能够正常提供服务!

6.3 nginx负载均衡和方向代理的配置

7-1和7-2配置nginx

安装nginx需要epel源

[root@Node1 ~]#:yum install -y epel-release.noarch

[root@Node1 ~]#:yum install -y nginx

修改配置文件:主配置文件的位置:/etc/nginx

[root@Node1 ~]#:vim /etc/nginx/nginx.conf

在http模块中与server模块同级,添加web组:负载均衡。

在server模块中写入location。反向代理

7-2与7-1同理,可以在7-1上直接远程拷贝到7-2上去:

7-2先下载安装:

[root@Node2 ~]#:yum install -y epel-release.noarch

[root@Node2 ~]#:yum install -y nginx

7-1上远程拷贝过来:

[root@Node1 ~]#:scp /etc/nginx/nginx.conf 192.168.114.20:/etc/nginx/

输入yes:

输入密码:

root@192.168.114.20's password: 
nginx.conf                                                        100% 2449     1.6MB/s   00:00

可以发现7-2上的/etc/nginx/nginx.conf文件也与7-1相同了

两台启动:systemctl start nginx

在客户端访问两台nginx服务器能够实现反向代理和负载均衡。

7-5客户端测试:

nginx负载均衡和反向代理服务正常!

6.4 keepalived集群

keepalived将两台服务虚拟出一台服务器,一个虚拟IP地址:192.168.114.188(自定义的IP),但虚拟IP也是在真实nginx服务器上的,谁是主就在谁上面,当主服务器出现问题了不能正常工作了,备服务器接管虚拟IP,提供正常服务,实现高可用!

7-1上的演示:

先下载安装keepalived

[root@Node1 ~]#:yum install -y keepalived

[root@Node1 ~]#:cd /etc/keepalived/      #主配置文件

主配置文件在/etc/keepalived/下的keepalived.conf

修改以下内容:[root@Node1 keepalived]#:vim keepalived.conf

#全局配置块

global_defs {
   ....
   smtp_server 127.0.0.1        #修改邮箱地址,也可以默认
   ....
   router_id LVS_01                #修改名称,每个服务器唯一,唯一标识
   ....
   #vrrp_strict                    #注释掉,取消VRRP规则严格模式
}

#添加一个与nginx相关块

vrrp_script check_down {
    script "/etc/keepalived/ng.sh"  #指明脚本的位置。这里还需要写一个脚本ng.sh
    interval 1                                #每隔1s,执行一次检测
    weight -30                                #如果脚本执行失败自动减少优先级30
    fall 3                                    #3次不成功才标注为失败
    rise 2                                    #nginx重新起来后检测两次成功,才真的成功
    timeout 2                                #超时时间2s
}

#虚拟路由设置:

vrrp_instance VI_1 {
    state MASTER                #主
    interface ens33                #网卡
    ......
    priority 100                #优先级
    virtual_ipaddress {
        192.168.114.188            #虚拟IP,做一个就留一个IP
   }

#添加该子模块
   track_script {
        check_down
   }
}

#下面的模块是lvs的相关模块,我们做nginx的,下面可以直接删掉了,不需要。

#编写一个执行脚本:

[root@Node1 keepalived]#:vim ng.sh

killall -0 nginx

#加一个可执行权限:脚本需要执行权限

[root@Node1 keepalived]#:chmod +x ng.sh

启动:[root@Node1 keepalived]#:systemctl start keepalived

7-2同理:安装keepalived

[root@Node2 ~]#:yum install -y keepalived

[root@Node2 ~]#:cd /etc/keepalived/

#7-2较7-1修改以下配置:也可以通过远程拷贝的方式拷贝过来,修改三个地方:服务器唯一标识router_id,主备state,优先级priority

[root@Node2 keepalived]#:vim keepalived.conf

全局块中:

global_defs {

        router_id LVS_02

}

#虚拟路由设置:

vrrp_instance VI_1 {

        state BACKUP        #备
        priority 80                #优先级

}

#编写一个执行脚本:

[root@Node2 keepalived]#:vim ng.sh

killall -0 nginx

#加一个可执行权限:

[root@Node2 keepalived]#:chmod +x ng.sh

启动:[root@Node2 keepalived]#:systemctl start keepalived

6.5 测试

6.5.1 对keepalived的关闭和开启测试

通过以上步骤的配置,测试是否配置成功,先看虚拟IP是否在主服务器7-1上,通过ip a查看:

ip a查看,通过管道过滤出ens33,-C 2是查出ens33显示上下两行内容。

通过查看IP发现虚拟IP在7-1主服务器上,不在7-2上。

使用客户端访问虚拟IP:

通过抓包发现是7-1在向组播地址224.0.0.18发送报文,告诉备自己还活着。

把主服务器的keepalived关闭掉,看虚拟IP是否到了备服务器

[root@Node1 ~]#:systemctl stop keepalived

此时主服务器由于关闭了keepalived无法提供服务,虚拟IP也就不在7-1上了:

-A 4是向下显示4行,-B是向上显示

看7-2上是否有虚拟IP:

客户端访问虚拟IP地址。此时是备7-2在提供服务

在客户端一直抓包,发现由7-1变成了7-2在向组播地址发包。验证正确

在7-1上重新开启keepalived看IP是否回来:

[root@Node1 ~]#:systemctl start keepalived

同理观察7-1的ip a | grep -A 3 ens33,看是否回来

客户端访问虚拟IP也同样能够正常访问,此时就是7-1在提供服务。又回来了

抓包:明显看到由7-2发的包转为7-1向组播地址发包:
 

6.5.2 对nginx的开启和关闭测试

关闭nginx测试呢?

[root@Node1 ~]#:systemctl stop nginx

在7-2上:

抓包:发现由7-1转到了7-2

7-1再开启nginx,发现虚拟IP又回来了

抓包:从7-2又回到了7-1上

再次回到7-1上。

实验成功!

----end----

这篇关于keepalived高可用,nginx+keepalived+apache架构的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1086506

相关文章

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

SpringBoot集成EasyPoi实现Excel模板导出成PDF文件

《SpringBoot集成EasyPoi实现Excel模板导出成PDF文件》在日常工作中,我们经常需要将数据导出成Excel表格或PDF文件,本文将介绍如何在SpringBoot项目中集成EasyPo... 目录前言摘要简介源代码解析应用场景案例优缺点分析类代码方法介绍测试用例小结前言在日常工作中,我们经

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现中文文本处理与分析程序的示例详解

《Python实现中文文本处理与分析程序的示例详解》在当今信息爆炸的时代,文本数据的处理与分析成为了数据科学领域的重要课题,本文将使用Python开发一款基于Python的中文文本处理与分析程序,希望... 目录一、程序概述二、主要功能解析2.1 文件操作2.2 基础分析2.3 高级分析2.4 可视化2.5

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟