1.nginx集群

对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡。

而如果实现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请求进行分发,这台服务器即反向代理。

由于反向代理服务器是网站的入口,其负载压力大且易遭到攻击,存在单点故障的风险,所以我们需要一个高可用的方案来实现当一台反向代理服务器宕机的时候,

另一台服务器会自动接管服务。基于以上要求,我们使用HAProxy,KeepAlived来构建高可用的反向代理系统。



所有的请求发给nginx,这种关键的关节性的节点如果故障了,整个系统就瘫痪了,这种就叫做单点故障,可以使用集群的策略去解决。

nginx做集群就得前面的节点去将路由请求到不同ip的nginx,就有了下面2种技术:

准备keepalived,监听nginx的健康情况,当主节点挂掉,自动用上备胎

准备haproxy,提供一个虚拟的路径,统一的去接收用户的请求,要不两个nginx的话,用户不知道去请求哪个去进行分发请求

集群搭建

一共需要这8个文件:

#先准备好以下文件放入/opt/docker_nginx_cluster目录中
#然后启动容器 注意确保80、8081和8082端口未被占用(或者修改docker-compose.yml中的端口)
docker-compose up -d #然后我们访问8081端口可以看到master,访问8082端口可以看到slave
#因为我们设置了81端口的master优先级未200比82端口的slave优先级100高,所以我们访问80端口看到的是master
#现在我们模仿8081端口的nginx宕机了
#docker stop 8081端口nginx容器的ID
#这时我们再去访问80端口看到的就是slave了

Dockerfile文件:

FROM nginx:1.13.5-alpine

RUN apk update && apk upgrade

RUN apk add --no-cache bash curl ipvsadm iproute2 openrc keepalived

COPY entrypoint.sh /entrypoint.sh

RUN chmod +x /entrypoint.sh

CMD ["/entrypoint.sh"]

entrypoint.sh

#!/bin/sh

#/usr/sbin/keepalvined -n -l -D -f /etc/keepalived/keepalived.conf --dont-fork --log-console &
/usr/sbin/keepalvined -D -f /etc/keepalived/keepalived.conf nginx -g "daemon off;"

docker-compose.yml

version: "3.1"
services:
nginx_master:
build:
context: ./
dockerfile: ./Dockerfile
ports:
-8081:80
volumes:
- ./index-master.html:/usr/share/nnginx/html/index.html
- ./favicon.ico:/usr/share/nnginx/html/favicon.ico
- ./keepalived-master.conf:/etv/keepalived/keepalived.conf
networks:
static-network:
ipv4_address:172.20.128.2
cap_add:
- NET_ADMIN
nginx_slave:
build:
context: ./
dockerfile: ./Dockerfile
ports:
-8082:80
volumes:
- ./index-slave.html:/usr/share/nnginx/html/index.html
- ./favicon.ico:/usr/share/nnginx/html/favicon.ico
- ./keepalived-slave.conf:/etv/keepalived/keepalived.conf
networks:
static-network:
ipv4_address:172.20.128.3
cap_add:
- NET_ADMIN
proxy:
image: haproxy:1.7-apline
ports:
- 80:6301
volumes:
- ./happroxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
networks:
- static-network
networks:
static-network:
ipam:
config:
- subnet: 172.20.0.0/16

keepalived-master.conf

vrrp_script chk_nginx {
script "pidof nginx"
interval 2
} vrrp_instance VI_1 {
state MASTER
interface etch0 #容器内部的网卡名称
virtual_router_id 33
priority 200 #优先级
advert_int 1 autheentication {
auth_type PASS
auth_pass letmein
} virtual_ipaddress {
172.20.128.50 #虚拟路径
} track_script {
chk_nginx
}
}

keepalived-slave.conf

vrrp_script chk_nginx {
script "pidof nginx"
interval 2
} vrrp_instance VI_1 {
state BACKUP
interface etch0 #容器内部的网卡名称
virtual_router_id 33
priority 100 #优先级
advert_int 1 autheentication {
auth_type PASS
auth_pass letmein
} virtual_ipaddress {
172.20.128.50 #虚拟路径
} track_script {
chk_nginx
}
}

haproxy.cfg

global
log 127.0.0.1 local0
maxconn 4096
daemon
nbproc 4 defaults
log 127.0.0.1 local3
mode http
option dontlognull
option redispatch
retries 2
maxconn 2000
balance roundrobin
timeout connect 5000ms
timeout client 5000ms
timeout server 5000ms frontend main
bind *:6301
default_backend webserver backend webserveer
server nginx_master 127.20.127.50:80 check inter 2000 rise 2 fall 5

index-master.html

<h1>master!</h1>

index-slave.html

<h1>slave!</h1>

nginx教程<二>(高可用)的更多相关文章

  1. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  2. 基于nginx+xxl-job+springboot高可用分布式任务调度系统

    技术.原理讲解: <分布式任务调度平台XXL-JOB--源码解析一:项目介绍> <分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和execut ...

  3. 如何实现Nginx+Keepalived中Nginx进程的高可用

    此架构我简单说明下: 一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了Keepalived的VIP地址的两个端口80.443,通过Juniper SSG550防火墙映射出去,外网DNS ...

  4. Nginx+Tomcat+memcached高可用会话保持

    Nginx+Tomcat+memcached高可用会话保持 文章来源dyc2005   一.概述 之前文章已经描述了企业高可用负载相关的架构及实现,其中常用的nginx或haproxy,LVS结合ke ...

  5. Keepalived+Nginx+Tomcat 实现高可用Web集群

    https://www.jianshu.com/p/bc34f9101c5e Keepalived+Nginx+Tomcat 实现高可用Web集群 0.3912018.01.08 20:28:59字数 ...

  6. Nginx教程(二) Nginx虚拟主机配置

    Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...

  7. 搭建 Keepalived + Nginx + Tomcat 的高可用负载均衡架构

    1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...

  8. Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建

    Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建 Nginx 是一个高性能的 HTTP反向代理服务器 Keepalived 是一个基于VRRP协议来实现的LVS服务高可 ...

  9. JAVAEE——宜立方商城03:Nginx负载均衡高可用、Keepalived+Nginx实现主备

    1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...

随机推荐

  1. linux 下socket编程

    原理 类unix系统中, 一切皆文件, 诸如磁盘文件, 显卡, 内核驱动, 网络协议栈等 socket就是linux中提供的用于网络通信的文件接口, 两台机器之间可以读写消息 在使用socket真正的 ...

  2. spark的 structStreaming 一些介绍

    转发 https://www.toutiao.com/a6696339998905467403/?tt_from=mobile_qq&utm_campaign=client_share& ...

  3. 壁球小游戏详解(附有源码.cpp)

    1.在python中安装pygame 2.将下列源码复制过去,运行. #引用 import pygame, sys #初始化 pygame.init() size = width, height = ...

  4. SqlLoad的简单使用

    sqlload的简单使用: 能实现: 快速导入大量数据 1.先安装oracle 客户端机器.有点大,600M+, 2.安装时选择管理员安装(1.1g) 3.第三步的时候我的出错了.说是环境变量校验不通 ...

  5. LeetCode 二分查找模板 I

    模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...

  6. ansible 安装和使用

                                ansible 安装和使用   ## 安装epel 源: rpm -ivh https://dl.fedoraproject.org/pub/e ...

  7. 【Docker】Docker启动停止重启 Redirecting to /bin/systemctl start docker.service

    [root@liuawen local]# docker -v Docker version 1.13.1, build cccb291/1.13.1 [root@liuawen local]# 启动 ...

  8. 【数据结构与算法】Java制作一个简单数组类

    bobo老师的玩转算法系列–玩转数据结构 简单记录 文章目录 不要小瞧数组 - 制作一个数组类 1 .使用Java中的数组 数组基础 简单使用 2.二次封装属于我们自己的数组 数组基础 制作属于我们自 ...

  9. 【老孟Flutter】源码分析系列之InheritedWidget

    老孟导读:这是2021年源码系列的第一篇文章,其实源码系列的文章不是特别受欢迎,一个原因是原理性的知识非常枯燥,我自己看源码的时候特别有感触,二是想把源码分析讲的通俗易懂非常困难,自己明白 和 让别人 ...

  10. XSS - Pikachu

    概述: Cross-Site Scripting 简称为"CSS",为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS.一般XSS可以分为如下几种常见类型 ...