Docker下配置KeepAlive支持nginx高可用

案例子任务一、安装配置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高可用的更多相关文章
- 配置keepalived支持nginx高可用
实验环境 序号 主机名 IP地址 1 nginx1 192.168.204.11 2 nginx2 192.168.204.12 安装nginx 安装nginx yum install -y epel ...
- docker下用keepalived+Haproxy实现高可用负载均衡集群
启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING () bytes of data. F ...
- Keepalived保证Nginx高可用配置
Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...
- 001/Nginx高可用模式下的负载均衡与动静分离(笔记)
Nginx高可用模式下的负载均衡与动静分离 Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,并发能力强特点. 1.处理静态文件.索引文件以及自动索引:打开文件描述符缓 ...
- linux中keepalived实现nginx高可用配置
linux中keepalived实现nginx高可用配置 安装keepalived 运行如下命令即可 tar -zxvf keepalived-2.0.8.tar.gz -C /usr/src cd ...
- 面试中的nginx高可用高并发!
本文转自:91博客:原文地址:http://www.9191boke.com/439923471.html 面试题: nginx高可用?nginx 是如何实现并发的?为什么nginx不使用多线程?ng ...
- RabbitMQ高级指南:从配置、使用到高可用集群搭建
本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...
- MySQL数据库的优化(下)MySQL数据库的高可用架构方案
MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQ ...
- Nginx(四):Keepalived+Nginx 高可用集群
Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...
随机推荐
- ES6简单理解基本使用
let const 原来的var声明标识符:可以重复声明,编译不报错. let,const声明标识符:不能重复声明,再声明编译报错. var声明的标识符作用域是当前函数,let和const是当前{块} ...
- jenkins.war
一准备工作 首先你得打开SSH 二将jenkins.war转移到jenkins.war /usr/local/tomcat/apache-tomcat-7.0.63/webapps/中 然后启动tom ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的windowIcon属性
windowIcon对象为部件对象的属性,但只有窗口对象有效,其他派生对象如pushButtong对象无效. 在windowIcon对象上有如下子属性设置: 这几个子属性实际上是QIcon类中继承的. ...
- 攻防世界 ctf web进阶区 unserialize
进入到题目的界面,看到以下源码 构造payload=?code=O:4:"xctf":1:{s:4:"flag";s:3:"111";} 结 ...
- 查询时间倒退一天-项目中惊现神秘BUG-JsonFormat使用采坑记
一.问题由来 前一天下午正在写代码的时候,领导突然走过来跟我说,让我去看一个神秘的BUG,说是在数据库中查询时的一个日期 返回到页面后,查询时间倒退了一天.一听到这个BUG,我就感觉很奇怪,还有这样的 ...
- CSS基础-背景
CSS背景 background 纯色背景 {background-colcor:gray; padding:20px} 为元素设置背景色,并设置了内边距,使得元素中的文本向外少有延伸. 用rgba设 ...
- v-clickoutsides
//点击目标元素外侧触发特定事件 使用 v-clickoutsides="clickHandler" import Vue from 'vue' Vue.directive('cl ...
- golang omitempty 总结
golang omitempty 总结 在使用Golang的时候,不免会使用Json和结构体的相互转换,这时候常用的就是 json.Marshal和json.Unmarshal两个函数. 这时候在定义 ...
- sudo rm -rf /*含义
sudo ----- 管理员权限 rm ------ remove 移除 rf ------ recursive递归 force强制 /* ------ 目录下所有文档
- js中数组、字符串、日期、数学API方法一览
以下内容摘选自 http://www.w3school.com.cn/jsref/jsref_obj_array.asp 点击方法新窗口打开详解 数组: 方法 描述 concat() 连接两个或更多的 ...