keepalived+nginx高可用环境搭建

 前言

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

1.准备工作

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

 

2.下载centos7.6基础镜像

docker  pull  centos:7.6.1810

 

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

docker安装nginx linux docker安装nginx+keepalive_高可用

 

3.在centos7.6中安装keepalived和nginx 以及其他软件

启动容器:

docker run -it  f1cb7c7d58b7 /bin/bash

 

 

 

docker安装nginx linux docker安装nginx+keepalive_docker安装nginx linux_02

使用 ip和 ifconfig命令需要安装 下面两个

yum install iproute

yum  install  net-tools

 

 

4.使用yum 安装 keepalived

yum install keepalived

 

docker安装nginx linux docker安装nginx+keepalive_高可用_03

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

docker安装nginx linux docker安装nginx+keepalive_高可用_04

 

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

 

 

docker安装nginx linux docker安装nginx+keepalive_nginx_05

查看 本机

ip a

 

docker安装nginx linux docker安装nginx+keepalive_keepalived_06

Keepalived配置 

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

docker安装nginx linux docker安装nginx+keepalive_高可用_07

 

增加检测脚本

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

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

docker安装nginx linux docker安装nginx+keepalive_nginx_08

 

5.使用yum安装nginx


yum install yum-utils

 

docker安装nginx linux docker安装nginx+keepalive_nginx_09

添加源

到 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

 

 

docker安装nginx linux docker安装nginx+keepalive_高可用_10

yum install nginx

 

docker安装nginx linux docker安装nginx+keepalive_docker_11

安装完成

docker安装nginx linux docker安装nginx+keepalive_docker安装nginx linux_12

启动查看是否成功

nginx

 

curl localhost:80

 

 

docker安装nginx linux docker安装nginx+keepalive_keepalived_13

6.退出 ,制作 镜像

docker ps  -a

 

找到 刚才 的容器

docker安装nginx linux docker安装nginx+keepalive_keepalived_14

 

docker commit 5f781fbe483e keepavled_nginx:v1

 

docker安装nginx linux docker安装nginx+keepalive_nginx_15

 

7.启动主备keepalived容器

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

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

 

docker安装nginx linux docker安装nginx+keepalive_docker_16

docker安装nginx linux docker安装nginx+keepalive_keepalived_17

 

8.进入容器

docker ps

 

找到 启动 的容器

docker安装nginx linux docker安装nginx+keepalive_keepalived_18

分别 进入容器

主 :172.17.0.7

备:172.17.0.6

docker安装nginx linux docker安装nginx+keepalive_docker安装nginx linux_19

备 keepalived修改 配置 

docker安装nginx linux docker安装nginx+keepalive_docker_20

9.验证keepalived

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

docker安装nginx linux docker安装nginx+keepalive_docker安装nginx linux_21

systemctl status keepalived

 

查看启动状态

docker安装nginx linux docker安装nginx+keepalive_高可用_22

备keepalived启动,虚IP没有绑定

docker安装nginx linux docker安装nginx+keepalive_nginx_23

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

docker安装nginx linux docker安装nginx+keepalive_高可用_24

 

docker安装nginx linux docker安装nginx+keepalive_高可用_25

重新查看 备,发现 绑定了VIP

 

docker安装nginx linux docker安装nginx+keepalive_高可用_26

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

 

验证

掉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

 

docker安装nginx linux docker安装nginx+keepalive_nginx_27

 

docker安装nginx linux docker安装nginx+keepalive_docker安装nginx linux_28

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

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

docker安装nginx linux docker安装nginx+keepalive_nginx_29

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

docker安装nginx linux docker安装nginx+keepalive_nginx_30

 

11.遇到的几个 问题

VIP无法访问的问题:

注释掉

在一个网段

 

Check_nginx.sh脚本 问题:

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

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