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

猜你喜欢

转载自www.cnblogs.com/zhhx/p/12656813.html
今日推荐