nginx+keepalived高可用架构

nginx+keepalived高可用架构安装步骤

1 安装keepalived
1.1 keepalived原理简述

使用keepalived需要在局域网中多申请一个虚拟IP。

keepalived是运行在LVS(Linux Virtual Server)之上,专门用来监控集群系统中各个服务节点的状态。它是基于VRRP协议进行主、备机器间的通信:主的服务器会一直发送VRRP广播包,告诉备服务器它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会进行主备切换。

选举出来的主节点,会告诉路由器对请求到“虚拟IP地址”的请求转发到主节点的mac地址上(即响应对虚拟IP地址的ARP请求)。

1.2 安装keepalived

详见本博主的《nginx+keepalived高可用架构----安装keepalived》

1.3 keepalived配置修改

本例子下的master、backup目录分别存放了主节点和备节点的keepalived配置,其中的vrrp_script配置如下:

vrrp_script nginx_check {
        script "/usr/local/keepalived/sbin/nginx_check.sh" #如果返回状态码为0,就认为服务正常,如果返回状态码为1,则认为服务故障
        interval 2   # 检测脚本执行的间隔
        #weight 为正时,脚本检测成功时此weight会加到priority上,检测失败时不加。(成功weight值增加后,当失败时会恢复到原值)
        #weight 为负时,脚本检测成功时此weight不影响priority,检测失败时priority – abs(weight)(失败weight值减少后,当成功时会恢复到原值)
        weight  -100
        fall 1  #如果请求连续失败一次,认为失败
        rise 1 #表示如果请求一次成功,就认为此节点资源恢复正常。
}

其中的script配置的脚本为"nginx_check.sh"文件,用来检测本机器的nginx服务是否正常,如果不正常则降低当前节点的优先级(weight -100),当主节点的优先级小于备节点的优先级时,会进行主备的切换,对虚拟ip的请求都会发送到该节点。

备注:nginx_check.sh在发现名字为proxyNginx的镜像没有启动时,会执行docker start proxyNginx命令。

2 启动nginx

nginx的作用是用来做服务的负载均衡;我们使用Docker启动nginx,故比较方便。

2.1 配置nginx.config文件

下面nginx.config的片段配置了把请求到80端口的请求转发到15.193.199.8、15.193.199.9的17001端口;本例子负载均衡策略是使用的backup模式,其他模式请查看nginx的文档。

upstream lb_disposition {
  server 15.193.199.8:17001;
  server 15.193.199.9:17001 backup;
}


server { # simple load balancing
  listen          80;
  server_name     localhost;
  access_log      /var/log/nginx/lb_wisdom.access.log main;

  location / {
    proxy_pass      http://lb_disposition;
  }
}
2.2 执行start.sh启动nginx

该脚本会使用nginx:1.23.4镜像,并把和start.sh同级的nginx.conf挂在到容器内;同时把18001映射到容器的80端口。详见start.sh脚本。

2.3 执行stop.sh停止nginx
2.4 查看nginx的日志

docker logs -f --tail 100 proxyNginx

start.sh脚本

#!/bin/bash
docker inspect -f '{{.State.Running}}' "proxyNginx" >> /dev/null 2>&1

if  [ $? -eq 0 ] &&  [ "$(docker inspect -f '{{.State.Running}}' 'proxyNginx')" = "true" ] ;then
  echo "名字为proxyNginx的容器已经启动,无需再次启动。如需重启请执行:docker restart proxyNginx "
  exit 0;
fi
docker restart proxyNginx >> /dev/null 2>&1
if [ $? -eq 0 ] ;then
  echo "名字为proxyNginx的容器存在,执行重启操作成功。"
  exit 0;
fi

docker run --name proxyNginx --restart=always -p 18001:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro  -v $(pwd)/logs/:/var/log/nginx/ -d nginx:1.23.4
if [ $? -eq 1 ] ;then
  echo "名字为proxyNginx的容器启动失败,请查看容器日志"
  exit 1;
fi
echo "名字为proxyNginx的容器启动成功"

stop.sh脚本

#!/bin/bash
docker inspect -f '{{.State.Running}}' "proxyNginx" >> /dev/null 2>&1

if  [ $? -eq 0 ] &&  [ "$(docker inspect -f '{{.State.Running}}' 'proxyNginx')" = "true" ] ;then
  echo "名字为proxyNginx的容器正在运行,接下来执行停止操作"
else
  echo "名字为proxyNginx的容器未运行,无需执行停止操作"
  exit 0;
fi
 docker rm -f proxyNginx > /dev/null
 if [ $? -eq 0 ] ;then
   echo "成功停止名字为proxyNginx的容器"
   exit 0;
 fi
 echo "停止名字为proxyNginx的容器失败!请检查"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值