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