zoukankan      html  css  js  c++  java
  • docker 搭建keepalived+nginx高可用

     前言

      最近工作 中 有用到keepalived,就想着 在 本地 搭建一套环境验证一下相关的功能。因为创建虚拟机比较麻烦,就借助  docker来搭建这样 一套 环境 ,顺带学习 巩固下docker的相关 命令;

    1.准备工作

      本地 安装好docker环境,我本地 使用的win10,已经安装好了docker环境;

    2.下载centos7.6基础镜像

    docker  pull  centos:7.6.1810

    我已经安装好了,所以执行结果 如下

    3.centos7.6中安装keepalivednginx 以及其他软件

    启动容器:

    docker run -it  f1cb7c7d58b7 /bin/bash

    使用 ipifconfig命令需要安装 下面两个

    yum install iproute
    
    yum  install  net-tools

    4.使用yum 安装 keepalived

    yum install keepalived

    一直确认 y即可,安装完成 

    Keepalived检测nginx的脚本

    /etc/keepalived 中 新建 check_nginx.sh

    脚本 如下 注意grep nginx: 冒号 ,因为执行的 时候脚本 的名字中也有nginx,会导致计算出来 的 数量不对 ,所以要 用nginx:

    #!/bin/bash
    
    A=$(ps -ef  | grep nginx: | grep -v  grep |  wc  -l)
    
    if [ $A -eq 0 ];then
    
      nginx
    
      echo  "restart nginx, sleep 2 s"
    
      sleep  2
    
      num=$(ps -ef  | grep  nginx:  |  grep -v grep | wc  -l)
    
      if [ $num -eq  0  ];then
    
        ps -ef | grep keepalived  |  grep  -v grep  | awk '{print $2}'| xargs kill -9
    
        echo  "start nginx failed,kill keepalived"
    
      fi
    
    else
    
      echo  "nginx not  dead"
    
    fi

     

    查看 本机 IP 

    ip a

    Keepalived配置 

    注释vrrp_strict  否则会导致 VIP 无法访问

    增加检测脚本

    添加VIP,注意 VIP 和本机IP在 同一个 网段内,否则也 无法访问

    本机172.17.0.6/16 IP设置 为172.17.0.8/16

    5.使用yum安装nginx

    参考链接:https://www.cnblogs.com/opsprobe/p/10773582.html

    yum install yum-utils

    添加源

     cd /etc/yum.repos.d/ 目录下

    新建 

    vim nginx.repo

     文件

    输入以下信息

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    
     

     

    yum install nginx

    安装完成

    启动查看是否成功

    nginx
    curl localhost:80

    6.退出 ,制作 镜像

    docker ps  -a

    找到 刚才 的容器

    docker commit 5f781fbe483e keepavled_nginx:v1

    7.启动主备keepalived容器

    docker  run --privileged  -it --name keepalived_master  8dfe8c83bfae /usr/sbin/init
    
    docker  run --privileged  -it --name keepalived_salve  8dfe8c83bfae /usr/sbin/init

    8.进入容器

    docker ps

      找到 启动 的容器

    分别 进入容器

    172.17.0.7

    备:172.17.0.6

    keepalived修改 配置 

    9.验证keepalived

    启动主keepalived,发现虚IP 已经绑定

    systemctl status keepalived

     查看启动状态

    keepalived启动,IP没有绑定

    Kill 掉主的keepalived进程 后,主不再绑定VIP

    重新查看 ,发现 绑定了VIP

    再启动主keepalived,会发现VIP重新绑定在 主keepalived服务器

     10.验证 nginx

      Kill nginx进程之后,再次查看 会发现nginx被重新 启动,因为 keepalived检测 脚本 会 自动检查 ,没有 进程 会自动重启,启动不成功则把keepalived kill掉。

      见脚本check_nginx.sh

      注意:check_nginx.sh必须要 加 权限 ,否则 不会执行;

      chmod  +x  check_nginx.sh

    VIP访问nginx测试

    先分别修改主备 nginx的页面并重启

    vi /usr/share/nginx/html/index.html

    主备分别启动keepalived,此时 VIP绑定在主服务器 ;

    访问nginx: curl 172.17.0.8:80,此时访问的是主服务器

    把主服务器 keepalived kill掉 之后验证 ,此时VIP绑定在备服务器,访问 的备服务器 的nginx

    11.遇到的几个 问题

    VIP无法访问的问题:

      Vrrp_strict 注释掉

      VIP在一个网段

    Check_nginx.sh脚本 问题:

       grep  nginx: 冒号要加上否则执行过程中会grep 到脚本名称导致判断进程数量一直不为0;

       脚本必须加权限,否则无法执行

    参考链接:

    https://www.cnblogs.com/jinjiangongzuoshi/p/9313438.html

  • 相关阅读:
    Qt Installer Framework翻译(7-0)
    Qt Installer Framework翻译(4)
    Qt Installer Framework翻译(6-0)
    Qt Installer Framework翻译(5-4)
    Qt Installer Framework翻译(5-3)
    Qt Installer Framework翻译(5-2)
    Qt Installer Framework翻译(5-1)
    Qt Installer Framework翻译(5-0)
    Qt Installer Framework翻译(3-5)
    angularjs1.X进阶笔记(3)——如何重构controller
  • 原文地址:https://www.cnblogs.com/zhhx/p/12656813.html
Copyright © 2011-2022 走看看