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 查看状态 ...
随机推荐
- Spring Boot 内置定时任务
启用定时任务 @SpringBootApplication @EnableScheduling // 启动类添加 @EnableScheduling 注解 public class ScheduleD ...
- Synchronized和ReentTrantLock二者区别
写在前面 Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock.这两种锁以及后面提到 ...
- 区块链学习5:智能合约Smart contract原理及发展历程科普知识
☞ ░ 前往老猿Python博文目录 ░ 一.智能合约的定义 通俗来说,智能合约就是一种在计算机系统上,当一定条件满足的情况下可被自动执行的合约,智能合约体现为一段代码及其运行环境.例如银行信用卡的自 ...
- 第6.3节 Python动态执行之动态编译的compile函数
Python支持动态代码主要三个函数,分别是compile.eval和exec.本节介绍compile函数的语法和相关使用.compile函数用来编译一段字符串的源码,将其编译为字节码或者AST(抽像 ...
- LeetCode初级算法之数组:122 买卖股票的最佳时机 II
买卖股票的最佳时机 II 题目地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组,它的第 i ...
- kubernetes 中的证书工作机制
一文带你彻底厘清 Kubernetes 中的证书工作机制 搬砖者: 张首富 时 间: 2020-05-26 w x: y18163201 原文地址:https://zhaohuabing.com/po ...
- 第 2 篇 Scrum 冲刺博客
一.站立式会议 1.站立式会议照片 2.昨天已完成的工作 ①大部分同学成功用java连接数据库 ②前端和后台的成员成功讨论并了解具体需求 3.今天计划完成的工作 ①帮助不会的同学连接数据库 ②登录识别 ...
- 测试window安装的客户端
1.win10 安装了客户端,测试一下,
- elastic-job分布式调度与zookeeper的简单应用
一.对分布式调度的理解 调度->定时任务,分布式调度->在分布式集群环境下定时任务这件事 Elastic-job(当当⽹开源的分布式调度框架) 1 定时任务的场景 定时任务形式:每隔⼀定时 ...
- socket ThreadingTCPServer学习笔记
文件上传#服务端 while True: conn,address = sk.accept() conn.sendall(bytes('欢迎你小sb',encoding='utf-8')) str_s ...