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

目 录

一、概述:

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

三、实验环境:

四、实现效果:

五、实验解析及步骤:

六、具体实现:

[6.1 先关闭防火墙和核心防护:两条命令:](#6.1 先关闭防火墙和核心防护:两条命令:)

[6.2 后端apache服务器的实现](#6.2 后端apache服务器的实现)

[6.3 nginx负载均衡和方向代理的配置](#6.3 nginx负载均衡和方向代理的配置)

[6.4 keepalived集群](#6.4 keepalived集群)

[6.5 测试](#6.5 测试)

[6.5.1 对keepalived的关闭和开启测试](#6.5.1 对keepalived的关闭和开启测试)

[6.5.2 对nginx的开启和关闭测试](#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

[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: 输入密码: [email protected]'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上了: ![](https://img-blog.csdnimg.cn/direct/ea2ae8c1dff34251b9c93c7db2f71a23.png) -A 4是向下显示4行,-B是向上显示 看7-2上是否有虚拟IP: ![](https://img-blog.csdnimg.cn/direct/28ede3a229b34807a094b5eb86ff95bf.png) 客户端访问虚拟IP地址。此时是备7-2在提供服务 ![](https://img-blog.csdnimg.cn/direct/dd63f56587ef4149836731eab954d668.png) 在客户端一直抓包,发现由7-1变成了7-2在向组播地址发包。验证正确 ![](https://img-blog.csdnimg.cn/direct/cb0fa741ae674f5e969662ef7e7a36b6.png) 在7-1上重新开启keepalived看IP是否回来: \[root@Node1 \~\]#:systemctl start keepalived 同理观察7-1的ip a \| grep -A 3 ens33,看是否回来 客户端访问虚拟IP也同样能够正常访问,此时就是7-1在提供服务。又回来了 抓包:明显看到由7-2发的包转为7-1向组播地址发包: ![](https://img-blog.csdnimg.cn/direct/9007260b5b7249ccbc3d9bdb40dfb2a0.png) #### 6.5.2 对nginx的开启和关闭测试 关闭nginx测试呢? \[root@Node1 \~\]#:systemctl stop nginx ![](https://img-blog.csdnimg.cn/direct/fd3d6beb64074890bae16f5f7def06e6.png) 在7-2上: ![](https://img-blog.csdnimg.cn/direct/950a987a45be43a5b3e374d5104c1fd5.png) 抓包:发现由7-1转到了7-2 ![](https://img-blog.csdnimg.cn/direct/bc64b8f0004345b8a82884f862dc53e6.png) **7-1再开启nginx,发现虚拟IP又回来了** ![](https://img-blog.csdnimg.cn/direct/bbe0f81a6db0482193ee8e6ffb5a32ca.png) 抓包:从7-2又回到了7-1上 ![](https://img-blog.csdnimg.cn/direct/87f1b7a68c354baf9e9a888be9f1d72e.png) 再次回到7-1上。 实验成功! **----end----**

相关推荐
跑得动22 分钟前
头歌 | WPS文档基本操作
运维·服务器·wps
闭关苦炼内功1 小时前
linux 使用 usermod 授权 普通用户 属组权限
linux·运维
大大大大肉包2 小时前
私有化部署DeepSeek
linux·运维·服务器
xyd陈宇阳2 小时前
Linux 入门五:Makefile—— 从手动编译到工程自动化的蜕变
linux·运维·服务器·makefile
冰滚水3 小时前
网络建设与运维神州数码DCN sFlow网络流量信息协议
运维·网络·sflow·网络建设与运维·网络搭建·神州数码
三天不学习3 小时前
NginxWebUI:可视化 Nginx 配置管理工具,告别繁琐命令行!
运维·nginx
穷儒公羊4 小时前
第一部分——Docker篇 第六章 容器监控
运维·后端·学习·docker·云原生·容器
krack716x5 小时前
服务器信息收集
运维·服务器
Brandon汐5 小时前
Linux文件传输:让数据飞起来!
linux·运维·网络