Nginx+keepalived Docker高可用部署

420 阅读1分钟

1.Nginx高可用原理

image.png

2.版本与信息

Nginx:1.23.1

keepalived osixia/keepalived:2.0.20

机器资源:192.168.50.22 与192.168.50.251

3.部署详情

3.1 Nignx部署

两台机器执行如下命令

docker run   --restart unless-stopped --net=host --name nginx \
-v /home/nginx/conf.d:/etc/nginx/conf.d \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/html:/home/nginx/html \
-v /home/nginx/logs:/var/log/nginx -d \
nginx:1.23.1

可以将自己的nginx.conf放置在宿主机的/home/nginx/conf目录下。

3.2 keepalived部署

  • 修改配置文件 keepalived.conf内容如下:
global_defs {
  
}

vrrp_script check_LVS {
  script "/container/service/keepalived/assets/check_nginx.sh"
  interval 5
  timeout 2
  weight 50
  rise 3
  fall 3
  user  root
}

vrrp_instance VI_1 {
  interface em2

  state MASTER
  virtual_router_id 51
  priority 100
  nopreempt

  unicast_peer {
    192.168.50.9
    192.168.50.18
  }

  virtual_ipaddress {
    192.168.50.127
  }

  authentication {
    auth_type PASS
    auth_pass 3er4#ER$
  }
  track_script {
        check_LVS
    }

  notify "/container/service/keepalived/assets/notify.sh"
}

需要修的配置信息:interface 网卡信息,state 状态(MASTER、BACKUP),virtual_route_id 进行同网段vip隔离,priority 优先级(Master要大于BACKUP),unicast_peer 机器真实ip,virtual_ipaddress 虚拟的vip。

关于网卡信息,可以通过ip addr找到

image.png

check_nginx.sh脚本如下

#!/bin/bash
http_status=`curl -sIL -w "%{http_code}\n" -o /dev/null http://127.0.0.1:7800`
if [ ${http_status} != 200 ];then   #判断变量里的值如果等于0
	kill  1
fi

可以根据自己想需要调整访问的Nginx的端口或路径。

  • 启动容器
    将keepalived.conf与check_nginx.sh放置在/home/keepalived路径下,执行如下命令:
docker run -d --net=host  --cap-add=NET_ADMIN \
--name keepalived \
-v /etc/localtime:/etc/localtime \
-v /home/keepalived/keepalived.conf:/container/service/keepalived/assets/keepalived.conf  \
-v /home/keepalived/check_nginx.sh:/container/service/keepalived/assets/check_nginx.sh \
--privileged=true \
osixia/keepalived:2.0.20   --copy-service

最后可以ping的方式,看看vip是否生效。

4.最后说明

如果要卸载vip,执行如下命令

ip addr del 192.168.50.127/32 dev em2