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

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配