栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Keepalived实现Nginx(Docker)高可用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/888279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号