Keepalived实现Nginx(Docker)高可用

Keepalived实现Nginx(Docker)高可用

1、在两台服务器上准备Docker的Nginx容器
随便拉一个版本的nginx
docker pull nginx:1.12.2
创建nginx容器
docker run -d --name nginx:1.12.2
创建/mydata/nginx/conf目录,并将nginx容器中的nginx.conf文件拷贝到该路径下,修改目录权限
mkdir -p /mydata/nginx/conf
docker cp nginx:/etc/nginx/nginx.conf /mydata/nginx/conf
chmod 777 /mydata/nginx
停止并删除nginx容器
docker stop nginx
docker rm nginx
创建nginx容器,并将容器中的文件挂载出来
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-d nginx:1.12.2

关闭服务器防火墙或者开放80端口

2、安装Keepalived

keepalived安装在服务器上,不要用docker安装

yum安装keepalived
yum install -y keepalived
验证是否安装成功
rpm -q -a keepalived
编辑/etc/keepalived/keepalived.conf配置文件
! Configuration File for keepalived

# 公共配置
global_defs {
  notification_email {
    acassen@firewall.loc
    failover@firewall.loc
    sysadmin@firewall.loc
  }
  notification_email_from Alexandre.Cassen@firewall.loc
  smtp_server 192.168.56.101 # 服务器ip
  smtp_connect_timeout 30
  router_id LVS_DEVEL
}

# 检查nginx状态的脚本,健康监测脚本
vrrp_script chk_http_port {
  script "/usr/local/src/nginx_check.sh"  # 脚本路径
  interval 2 # 脚本执行间隔时间,单位秒,每隔2秒执行一次健康监测脚本
  weight 2
}

vrrp_instance VI_1 {
  state MASTER  # 主机使用: MASTER  备机使用: BACKUP
  interface eth1 # 实例绑定的网卡, 用ip a命令查看网卡编号
  virtual_router_id 51 # 虚拟路由标识,主、备服务器ID必须一样
  priority 100 # 优先级,备份服务上将100改为小于100,可配置成90
  advert_int 1 # 主备之间同步检查的时间间隔单位秒
  authentication { # 验证类型和密码
    auth_type PASS # 验证类型有两种 PASS和HA
    auth_pass 1111 # 验证密码,在一个实例中主备密码保持一样
  }
  virtual_ipaddress { # 虚拟IP地址,可以有多个,每行一个,不需要指定端口,端口使用的是Nginx容器的端口
    192.168.56.50 # VRRP H 虚拟地址
  }
  track_script {         # 调用上边的脚本
    chk_http_port
  }
}
编辑/usr/local/src/nginx_check.sh健康监测脚本
#!/bin/bash
#version 0.0.1
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then # eq 0 表示nginx服务未启动
     docker restart nginx     # 判断nginx是否能重启
     sleep 2
     if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        systemctl stop keepalived # 停止服务器上的keepalived,启用备用服务器
     fi 
fi
启动keepalived
systemctl start keepalived.service
3、验证nginx高可用

1、访问http://192.168.56.50/,可以访问到nginx主页

2、停止主服务器上的nginx容器docker stop nginx,2秒之后再查看docker运行的容器docker ps,发现nginx容器还在运行,是因为keepalived发现nginx停止运行后,重启了nginx容器

3、停止主服务器上的keepalivedsystemctl stop keepalived.service,使用ps -ef | grep keepalived 命令确认是否已停止,访问http://192.168.56.50/,发现还可以访问到,是因为备用服务器被启用

参考博文:http://t.zoukankan.com/peterzhang123-p-14691762.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值