docker部署Nginx+keepalive实现高可用

本文介绍了如何使用Docker在三台服务器上部署Nginx和Keepalived以实现高可用性。通过Keepalived的VRRP协议,当主服务器故障时,服务能够自动切换到备用服务器,保持对外服务不间断。详细步骤包括Docker镜像拉取、Nginx和Keepalived配置、容器启动以及故障切换测试。
摘要由CSDN通过智能技术生成


docker部署Nginx+keepalive实现高可用

服务器环境说明
服务器三台:192.168.56.121,192.168.56.122,192.168.56.123
vip虚拟IP:192.168.56.111对外提供

1.流程说明

1)直观流程图

在这里插入图片描述

2)部署效果

我这边演示只到nginx的界面,具体nginx要代理到哪里,看业务需求

访问http://192.168.56.111:9000/index.html

情况一:三台服务正确启动Nginx和keepalive

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FmO9OLWF-1610076070331)(C:\Users\libingwei\AppData\Roaming\Typora\typora-user-images\image-20210108105757765.png)]

情况二:三台服务中,关闭192.169.56.123的服务Nginx和keepalive

自动切换到192.168.56.122,实现高可用

### [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5pftWBLb-1610076070332)(C:\Users\libingwei\AppData\Roaming\Typora\typora-user-images\image-20210108105851608.png)]

3)Keepalived说明

Keepalived是用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础结构提供负载均衡和高可用性的简单而强大的功能。 负载平衡框架依赖于提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器(IPVS)内核模块。Keepalived实现了一组检查器,以根据其运行状况动态,自适应地维护和管理负载平衡的服务器池。另一方面,VRRP可实现高可用性 协议。VRRP是路由器故障转移的基础砖。此外,Keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。为了提供最快的网络故障检测,Keepalived实施BFD协议。VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以单独使用,也可以一起使用以提供弹性基础架构。来自官网

1.Keepalived高可用软件

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。
keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

2.Keepalived高可用故障切换转移原理

Keepalived高可用服务对之间的故障切换转移,是通过VRRP来实现的。在keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。当主节点发生故障时,就无法发送心跳的消息了,备节点也因此无法继续检测到来自主节点的心跳了。于是就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。

2.开始部署环境

2.1 nginx

1)拉取镜像
docker pull nginx:1.19.6
2)配置文件

创建目录:mkdir -p /usr/local/docker/nginx/conf
新增文件:vi nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}
3)访问界面

创建目录: mkdir -p /usr/local/docker/nginx/html
创建html文件:vi index.html

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>192.168.56.121</p>
</body>
</html>
4)然后把写好的配置,复制到其他两台机器上

在另外两台机器创建目录:

mkdir -p /usr/local/docker/nginx/conf
mkdir -p /usr/local/docker/nginx/html

复制文件到其他机器:

scp -r /usr/local/docker/nginx root(用户名)@192.168.56.122(服务器IP):/usr/local/docker
scp -r /usr/local/docker/nginx roott(用户名)@192.168.56.123(服务器IP):/usr/local/docker
5)启动容器脚本

三台服务的--name nginx-1可以修改一下

docker run -d  \
--name nginx-1 \
-v /usr/local/docker/nginx/html:/usr/share/nginx/html \
-v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-p 9000:80 \
nginx:1.19.6
6)测试访问界面

http://192.168.56.121:9000/index.html

http://192.168.56.122:9000/index.html

http://192.168.56.123:9000/index.html

2.1 keepalived

1)拉取镜像
docker pull osixia/keepalived:2.0.20
2)配置文件不需要
3)启动容器脚本,三台服务都一样就行
docker run -d --net=host --cap-add=NET_ADMIN \
--name keepalived \
-v /etc/localtime:/etc/localtime \
-e KEEPALIVED_INTERFACE=enp0s8 \
-e KEEPALIVED_VIRTUAL_IPS="#PYTHON2BASH:['192.168.56.111']" \
-e KEEPALIVED_UNICAST_PEERS="#PYTHON2BASH:['192.168.56.121','192.168.56.122','192.168.56.123']" \
-e KEEPALIVED_PASSWORD=hello \
osixia/keepalived:2.0.20
4)测试就按照部署效果来操作就可以了

结束

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

binggoling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值