安装docker
准备nginx(nginx:v3)和keepalived镜像(osixia/keepalived)
生成热备配置文件(docker-compose.yml Dockerfile nxinx.conf keepalived.conf check_nginx.conf)
version: '2'
services:
keepalived:
build: ./
image: keepalived:v1 #构建出来的新镜像的名称
depends_on:
- nginx
container_name: keepalived #容器名称
network_mode: "host"
cap_drop:
- NET_ADMIN
privileged: true
volumes:
- "/root/test/nginx_check.sh:/etc/keepalived/nginx_check.sh"
restart: always
nginx:
image: nginx:v3
privileged: true #root权限
container_name: nginx #容器名称
ports:
- "8443:80" #本机:容器
volumes:
- "/root/test/nginx.conf:/usr/local/nginx/conf/nginx.conf"
restart: always
FROM osixia/keepalived
ADD ./nginx_check.sh /etc/keepalived/nginx_check.sh
RUN chmod +x /etc/keepalived/nginx_check.sh
ADD ./keepalived.conf /container/service/keepalived/assets/keepalived.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
tcp {
upstream health {
server 192.168.214.101:6443;
server 192.168.214.102:6443;
server 192.168.214.103:6443;
check interval=3000 rise=2 fall=1 timeout=1000;
}
server {
listen 80;
proxy_pass health;
so_keepalive on; #心跳检测
tcp_nodelay on; #禁用了Nagle算法,允许小包的发送
}
}
! Configuration File for keepalived
global_defs {
script_user root
enable_script_security
router_id LVS_k8s
}
vrrp_script CheckK8sMaster {
script "/etc/keepalived/nginx_check.sh"
interval 3
timeout 9
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass agree123
}
virtual_ipaddress {
192.168.214.100
}
track_script {
CheckK8sMaster
}
}
#!/bin/bash
A=`netstat -ntlp | grep :8443 | wc -l`
if [ $A -eq 0 ];then
pkill keepalived
fi
安装docker-compose
docker-compose安装keepalived和nginx
docker-compose up
#docker-compose up --build #如果修改文件,重新构建