通过 docker-compose 搭建高可用 nginx + keepalived 集群

这篇具有很好参考价值的文章主要介绍了通过 docker-compose 搭建高可用 nginx + keepalived 集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、搭建环境

两台虚拟机 CentOS Linux release 7.9.2009 (Core)
Docker version 23.0.1
Docker-compose version 1.25.0-rc4

2、Keepalived介绍

Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。

Keepalived 以 VRRP 协议为实现基础。 VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议, 它将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常就是 MASTER,或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能,其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。

当主机失效时, BACKUP 将接管原先 MASTER 的网络功能。VRRP 协议使用多播数据来传输 VRRP 数据, VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身网卡的 MAC 地址, VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP(组), BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。

3、搭建步骤

两台主机配置文件目录:

/home/docker/nginx/conf

在此目录创建了如下文件:

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络
每台主机的 nginx 和 keepalived 都是docker 容器。上述配置都是为了配置容器!

  • html 文件夹与 nginx.conf 用于数据卷挂载到 nginx 容器
  • Dockerfile 用于构建keepalived镜像,采取Dockerfile的目的是直接将 keepalived.conf 和 nginx_check.sh(脚本赋予权限) 传入 keepalived 容器
  • docker-compose.yml 用于拉镜像起容器

(1)nginx.conf 配置:

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络
需要注意上图箭头的位置,将 nginx.conf 挂载到 nginx 容器中后,要从箭头位置获取 nginx 展示的 html,这里我是自己配置了一下html,为了两台主机的nginx展示的页面不一样!

后续在docker-compose.yml 中,我配置了将宿主机的 /home/docker/nginx/conf/html 挂载到容器中的 /usr/share/nginx/html。

(2)html/index.html 配置:

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

(3)nginx_check.sh 配置

该脚本被 keepalived 用来检测nginx是否在运行,若 nginx 停止则 keepalived 也停止,就再选出一个 Master。这个脚本在传入容器中需要赋予执行脚本的权限。

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

(4)keepalived.conf 配置

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络
补充: 少配置了一行用来通知主机Master的切换:
notify “/container/service/keepalived/assets/notify.sh”

上述配置中 nopreempt 设置为了非抢占式,即不会按照优先级而切换Master,只有当当前主机宕机后,才切换,如果当前主机是好的,即使有另外一优先级更高的主机,也不会切换。

注意上述配置中 nginx_check.sh 需要在 keepalived 容器中的位置。

(5)Dockerfile 配置:

基于docker库中的 keepalived 镜像构建镜像,将检查 nginx 的脚本和keepalived.conf 配置文件添加进镜像。

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

其实这里也可以不用Dockerfile,也可以采用 docker-compose 的形式,区别在于采用Dockerfile的话,nginx_check.sh 和 keepalived.conf 就直接保存在镜像中了。起的容器也自带这俩文件。而docker-compose 是采用挂载的方式,可采用command指令来赋予脚本权限:“chmod +x /etc/keepalived/nginx_check.sh”,每次起容器都需要挂载文件。

(6)docker-compose 配置

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

(7)执行 docker-compose.yml

docker-compose up -d

我先在 192.168.182.136 执行 docker-compose
查看 keepalived容器 日志

docker logs 容器id -f  // -f 实时跟踪日志输出

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络
执行 ip a
可以看到虚拟 ip 192.168.182.138 已经绑定到了当前主机。当前主机是master!

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

然后在 192.168.182.135 启动 docker-compose

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络
由于 master 已存在,他现在为默认的 backup。

测试展示页面:

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

将当前master主机 192.168.182.136 宕机

// 停止和删除由docker-compose up命令启动的所有容器、网络、卷和镜像。
docker-compose down 

然后去 192.168.182.135 查看 keepalived 容器日志:

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络
发现他已经成为新的 master。
执行 ip a

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络

测试展示页面:

通过 docker-compose 搭建高可用 nginx + keepalived 集群,docker,nginx,网络文章来源地址https://www.toymoban.com/news/detail-755884.html

到了这里,关于通过 docker-compose 搭建高可用 nginx + keepalived 集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • keepalived+haproxy 搭建高可用高负载高性能rabbitmq集群

    一、环境准备 1. 我这里准备了三台centos7 虚拟机 主机名 主机地址 软件 node-01 192.168.157.133 rabbitmq、erlang、haproxy、keepalived node-02 192.168.157.134 rabbitmq、erlang、haproxy、keepalived node-03 192.168.157.135 rabbitmq、erlang 2. 关闭三台机器的防火墙 3. 三台主机的host和hostname配置 4. erlang与rabbitmq版

    2024年02月11日
    浏览(41)
  • 通过keepalived+nginx实现 k8s apiserver节点高可用

    K8s 主机配置: 配置: 4Gib 内存/4vCPU/60G 硬盘 网络:机器相互可以通信 k8s 实验环境网络规划: podSubnet(pod 网段) 10.244.0.0/16 serviceSubnet(service 网段): 10.96.0.0/12 物理机网段:192.168.1.0/24 2个控制节点2个工作节点 K8S集群角色 IP地址 主机名 安装的组件 控制节点 192.168.1.63 xueg

    2024年02月03日
    浏览(28)
  • Nginx 教程- 基于Docker keepalived 搭高可用

    目录 一、系统高可用 二、Nginx 的高可用 1、概念 1.1、KeepAlived 1.2、VRRP协议 1.3、Nginx Master-Slave多进程模型 1.4、双机备热、多点集群 Nginx+keepalived 双机主从模式: Nginx+keepalived 双机主主模式: Nginx+keepalived 多点模式: 1.5、总结: 2、实战 1、实践思路 1.1、自定义镜像 1.2、使用

    2023年04月12日
    浏览(14)
  • docker-compose deploy 高可用 elasticsearch TLS

    测试 修改 docker-compose.yaml 重启 清理容器卷 参考: Running the Elastic Stack on Docker Encrypting communications in an Elasticsearch Docker Containere

    2024年02月08日
    浏览(37)
  • Docker搭建Nginx+keepalived高可用负载均衡服务器

    一、背景 1.nginx高可用 在生产环境下,Nginx作为流量的入口,如果Nginx不能正常工作或服务器宕机,将导致整个微服务架构的不可用。所以负责负载均衡、反向代理的服务(Nginx)为了提高处理性能,高可用,也需要集群部署。本期咋们采用 keepalived 和 Nginx实现高可用。 2.Kee

    2024年04月22日
    浏览(39)
  • 【docker-compose】【nginx】动态配置

    需求:部署前端镜像时需要动态修改nginx反向代理的后端服务的ip地址 原.conf配置调整,改为嵌入变量的文件模版 Dockerfile 修改,通过envsubst将换将变量注入模版后再运行nginx docker-compose配置,通过environment动态修改变量 动态变量: ${MY_IP} 如果有多个变量可用逗号隔开, envsu

    2024年02月10日
    浏览(38)
  • 使用docker-compose做nginx服务

    目录 Docker Compose 可以轻松、高效的管理容器, 它是一个用于定义和运行多容器 Docker 的应用程序工具. 除了docker Compose还有一个技术k8s也能实现快速的部署。 可以一键启动,一键停止,非常方便 一.上传nginx配置文件 二.docker-compose安装与配置 1.上传文件 2.添加可执行权限 3.创建

    2024年02月10日
    浏览(31)
  • docker+docker-compose+nginx前后端分离项目部署

    安装yum-utils 从国内服务器上下载docker 安装docker 验证是否成功 安装需要的包 安装依赖包 添加 Docker 的官方 GPG 密钥 设置远程仓库 安装 Docker-CE 验证是否成功 国内镜像中心常用的为阿里云与网易云, 选择其中一个加速器进行配置即可 。在本地 Docker 中指定要使用的国内加速器

    2023年04月09日
    浏览(40)
  • docker-compose部署django+nginx+minio

    总体文件结构   docker-compose.yml文件    Dockerfile文件   start.sh文件   uwsgi.ini文件   nginx配置文件  

    2024年02月08日
    浏览(83)
  • docker/docker-compose 部署 nginx+mysql+wordpress 实战

    MariaDB 作为后面的关系型数据库,端口号是 3306; WordPress 是中间的应用服务器,使用 MariaDB 来存储数据,它的端口是 80; Nginx 是前面的反向代理,它对外暴露 80 端口,然后把请求转发给 WordPress 。 先来运行 MariaDB 。根据说明文档,需要配置 MARIADB_DATABASE 等几个环境变量,用

    2024年02月10日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包