服務器
主:172.17.0.2 master
備:172.17.0.3 slave1
lvs虛擬IP:172.17.0.100
#nginx下載地址 http://nginx.org/download/
本地文件路徑
1.dockerfile構建nginx
FROM centos:7
ADD nginx-1.6.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
EXPOSE 80
2.#安裝nginx的shell腳本 nginx_install.sh
#! /bin/bash
yum install -y gcc -c++ make pcre pcre-devel zlib-devel
cd /usr/local/nginx-1.16.0
./configure --prefix=/usr/local/nginx && make && make install
3.構建鏡像
#master:
docker build -t mycentos:master-nginx .
#slave
docker build -t mycentos:slave1-nginx .
4.查看構建的鏡像
docker images
5.啓動容器
#master
docker run -itd --privileged=true -p 80:80 mycentos:master-nginx /usr/sbin/init
#slave1
docker run -itd --privileged=true -p 81:80 mycentos:slave1-nginx /usr/sbin/init
6.安裝 keepalived
#keepalived 下載地址
http://nginx.org/download/nginx-1.9.10.tar.gz
7.複製本地keepalived包到docker容器中
#master 容器ID:cf2efc79462d /usr/local/:複製到容器對應的路徑下
docker cp keepalived-1.2.18.tar.gz cf2efc79462d:/usr/local/
#slave1 容器ID: bf0ef0ead87c /usr/local/:複製到容器對應的路徑下
docker cp keepalived-1.2.18.tar.gz bf0ef0ead87c:/usr/local/
8.分別進入master slave1容器中
1.進入master slave1 容器中
#master
docker exec -it cf2efc79462d /bin/bash
#slave1
docker exec -it bf0ef0ead87c /bin/bash
2.master slave1分別執行以下操作
2.1解壓安裝:
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/
2.2下載插件openssl
yum install -y openssl openssl-devel
2.3開始編譯keepalived
cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived
2.4進入keepalived-1.2.18目錄 make一下
make && make install
9.keepalived安裝成Linux系統服務
將keepalived安裝成Linux系統服務,因爲沒有使用keepalived的默認安裝路徑(默認路徑:/usr/local)
創建文件夾,將keepalived配置文件進行復制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
複製keepalived腳本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
#如果提示文件已經存在先做rm操作 時入sbin目錄
rm -rf keepalived
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
10.配置keepalived
# maser cat keepalived.conf
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER #指定master
interface eth0 #網卡信息 進入相應的容器 輸入命令ip a 可以查看相應的網卡信息
virtual_router_id 100 #所有服務器指定一致
mcast_src_ip 172.17.0.2 #容器Ip地址 輸入命令ip a 可以查看相應IP地址
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress { #設置LVS 虛擬VIP
172.17.0.100
}
}
#cat nginx_check.sh 重啓nginx腳本
#!/bin/bash
A=`ps -C nginx ?Cno-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #啓動Nginx命令
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
########################################################################
# slave1 cat keepalived.conf
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP #指定BACKUP
interface eth0 #網卡信息 進入相應的容器 輸入命令ip a 可以查看相應的網卡信息
virtual_router_id 100 #所有服務器指定一致
mcast_src_ip 172.17.0.3 #容器Ip地址 輸入命令ip a 可以查看相應IP地址
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress { #設置LVS 虛擬VIP
172.17.0.100
}
}
#cat nginx_check.sh 重啓nginx腳本
#!/bin/bash
A=`ps -C nginx ?Cno-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx #啓動Nginx命令
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
##############################################################
#分別將這些宿主機的配置文件複製到相應的docker容器中
#master
docker cp keepalived.conf cf2efc79462d:/etc/keepalived
docker cp nginx_check.sh cf2efc79462d:/etc/keepalived
#slave1
docker cp keepalived.conf bf0ef0ead87c:/etc/keepalived
docker cp nginx_check.sh bf0ef0ead87c:/etc/keepalived
11.分別啓動master,slave1 中keepalived
#啓動
service keepalived start
#關閉
service keepalived stop
12進入容器中nginx中修改 /nginx/html/index.html
進入master 容器 ip a
進入slave1 容器 ip a
13測試
#進入master slave1容器中輸入
curl 172.17.0.100
master:
slave1:
正常情況下只會訪問master服務器 -- master 掛掉的情況下才會訪問slave1 服務器
master容器中執行
#模擬掛掉
service keepalived stop
請求轉移到slave1 服務器中 (curl 172.17.0.100)
slave1 容中執行 ip a
重啓master
#模擬重啓
service keepalived start
進入master 輸入 ip a
輸入curl 172.17.0.100
slave1容中 輸入ip a
slave1容器中輸入 curl 172.17.0.100