案例子任务一、安装配置keepalived

步骤1:使用nginx镜像生成nginx-keep镜像

1) 启动nginx容器并进入

docker run -d --privileged  nginx /usr/sbin/init

2)在nginx容器中使用yum方式安装keepalived

yum -y install keepalived

安装完成后,检查!

3)保存容器为镜像

docker commit 容器ID nginx-keep

步骤2:使用nginx-keep镜像启动nginx1和nginx2两个容器

1)#docker network create --subnet=172.18.0.0/16 cluster //创建docker网络

此网络在之前的案例中已有说明,请自行查阅!

2)#docker network ls  //查看宿主机上的docker网络类型种类

3)启动容器nginx1,设定地址为172.18.0.11

docker run -d --privileged --net cluster --ip 172.18.0.11 --name nginx1 nginx-keep  /usr/sbin/init

4)启动容器nginx2,设定地址为172.18.0.12

docker run -d --privileged --net cluster --ip 172.18.0.12 --name nginx2 nginx-keep  /usr/sbin/init

5)配置容器nginx1的web服务,编辑首页内容为“nginx1”,在宿主机访问,nginx2亦是如此。

此时,两个容器的nginx配置基本完成!

步骤3:在nginx1和nginx2两个容器配置keepalived 

注意:docker容器下配置高可用,需要在宿主机安装keepalived服务并启动,否则容器keepalived不能启动

1) 在nginx1编辑 /etc/keepalived/keepalived.conf ,启动keepalived服务

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.18.0.1
smtp_connect_timeout 30
router_id nginx1    #ID唯一标识,名称不可重复
vrrp_skip_check_adv_addr
#vrrp_strict  #此行需要注释掉,否则会导致宿主机无法访问VIP,严格执行vrrp协议
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER  #主为master
interface eth0  #所属网络
virtual_router_id 51  #虚拟ID,默认即可
priority 100  #权重
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.0.10  #vip地址
}
}

完事后启动。

2)在nginx2编辑 /etc/keepalived/keepalived.conf ,启动keepalived服务

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.18.0.1
smtp_connect_timeout 30
router_id nginx1    #ID唯一标识,名称不可重复
vrrp_skip_check_adv_addr
#vrrp_strict  #此行需要注释掉,否则会导致宿主机无法访问VIP,严格执行vrrp协议
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP  #从为backup
interface eth0  #所属网络
virtual_router_id 51  #虚拟ID,默认即可
priority 90  #权重
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.0.10  #vip地址
}
}

完事后重启

3)在宿主机ping 172.18.0.10,使用arp -a 查看缓存

4)#curl http:// 172.18.0.10在宿主机访问虚拟地址

5)#ifconfig eth0 down在nginx1上当掉网卡,在宿主机使用arp -a 查看缓存

可以观察到MAC发生了变化!

6)#curl http:// 172.18.0.10在宿主机使用浏览器访问虚拟地址

案例子任务二、配置keepalived 支持nginx高可用

步骤1:编写 Nginx 状态检测脚本

1) 在nginx1上编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh

#!/bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]  #用于查看当前nginx运行状况
then
systemctl start nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ]
then
kill keepalived
fi
fi

2)赋予/etc/keepalived/nginx_check.sh执行权限,并测试脚本

步骤2:配置keepalived 支持nginx高可用

1)在nginx1上编辑/etc/keepalived/keepalived.conf

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 172.18.0.1
smtp_connect_timeout 30
router_id nginx1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"  #执行脚本
interval 2
weight -20  #降低nginx1的权重
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx  #执行
}
virtual_ipaddress {
172.18.0.10
}
}

2)重新启动keepalived,在主机使用浏览器访问虚拟地址

3)在nginx1停止nginx服务,在主机使用浏览器访问虚拟地址

由此,我们就实现了简单的高可用配置!

Docker下配置KeepAlive支持nginx高可用的更多相关文章

  1. 配置keepalived支持nginx高可用

    实验环境 序号 主机名 IP地址 1 nginx1 192.168.204.11 2 nginx2 192.168.204.12 安装nginx 安装nginx yum install -y epel ...

  2. docker下用keepalived+Haproxy实现高可用负载均衡集群

    启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING () bytes of data. F ...

  3. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

  4. 001/Nginx高可用模式下的负载均衡与动静分离(笔记)

    Nginx高可用模式下的负载均衡与动静分离 Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,并发能力强特点. 1.处理静态文件.索引文件以及自动索引:打开文件描述符缓 ...

  5. linux中keepalived实现nginx高可用配置

    linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...

  6. 面试中的nginx高可用高并发!

    本文转自:91博客:原文地址:http://www.9191boke.com/439923471.html 面试题: nginx高可用?nginx 是如何实现并发的?为什么nginx不使用多线程?ng ...

  7. RabbitMQ高级指南:从配置、使用到高可用集群搭建

    本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...

  8. MySQL数据库的优化(下)MySQL数据库的高可用架构方案

    MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...

  9. Nginx(四):Keepalived+Nginx 高可用集群

    Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...

随机推荐

  1. 【五校联考1day2】JZOJ2020年8月12日提高组T1 对你的爱深不见底

    [五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y ...

  2. Elasticsearch基本CURD操作语法讲解

    当我们的ES集群搭建完成以后,我怎么能看到集群中各个节点状态以及主节点和健康情况呢,如下讲解使用curl命令来与ES集群进行交互.分别有查询主节点情况.集群状态.以及创建索引查看索引.查看分片以及对E ...

  3. Spring Cloud 学习 (九) Spring Security, OAuth2

    Spring Security Spring Security 是 Spring Resource 社区的一个安全组件.在安全方面,有两个主要的领域,一是"认证",即你是谁:二是& ...

  4. PyQt(Python+Qt)学习随笔:QMdiArea多文档界面部件的subWindowActivated信号

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 QMdiArea的subWindowActivated在一个窗口激活( ...

  5. PyQt(Python+Qt)学习随笔:树型部件QTreeWidget提供的currentItem当前项操作访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 当前项是指当前鼠标和键盘焦点所在项,在项可以进行选择操作时,当前项可以是选中状态,也可以是未选中状态 ...

  6. ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

    ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...

  7. 一种使用 Redis 深度驱动的,为构建轻量级分布式应用程序(Microservices)的工程方案

    Hydra 是一个轻量级的 NodeJS 库,用于构建分布式计算应用程序,比如微服务.我们对轻量级的定义是:轻处理外部复杂性和基础设施依赖 -- 而不是有限的轻处理. Hydra 声称对基础设施的依赖 ...

  8. 【运行机制】 JavaScript的事件循环机制总结 eventLoop

    0.从个例子开始 //code-01 console.log(1) setTimeout(() => { console.log(2); }); console.log(3); 稍微有点前端经验 ...

  9. STL-Vector容量问题:

    1.clear,erase ,pop_back() 函数只删除对象,并没有释放vec中的内存,若对象是指针还需要delete:2.在erase,clear,pop_back()删除对象的后,size改 ...

  10. AcWing 326. XOR和路径

    大型补档计划 题目链接 如果整体来做,发现既有加法,也有整体异或,这样不容易搞. 考虑异或,各个位置互不干扰,按位考虑一下. 枚举每一位 \(k\) 发现如果设 \(f[u]\) 为这一位的期望结果还 ...