前言
最近工作 中 有用到keepalived,就想着 在 本地 搭建一套環境驗證一下相關的功能。因為創建虛擬機比較麻煩,就借助 docker來搭建這樣 一套 環境 ,順帶學習 鞏固下docker的相關 命令;
1.准備工作
本地 安裝好docker環境,我本地 使用的win10,已經安裝好了docker環境;
2.下載centos7.6基礎鏡像
docker pull centos:7.6.1810
我已經安裝好了,所以執行結果 如下
3.在centos7.6中安裝keepalived和nginx 以及其他軟件
啟動容器:
docker run -it f1cb7c7d58b7 /bin/bash
使用 ip和 ifconfig命令需要安裝 下面兩個
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