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. vue中携带token以及发送ajax

    在项目中基本登录都会存在token,而我们也就需要在每次发送ajax的时候就必须携带他.从而最有效的办法,就是在设置请求头携带token,这样设置一次后面的每一次都会携带着这个token. 一:设置请 ...

  2. PHP curl爬取数据 加入cookie值

    public function get_cookie(){ header("Content-type:text/html;Charset=utf8"); $ch =curl_ini ...

  3. Flutter 基础组件:单选框和复选框

    前言 Material组件库中提供了Material风格的单选开关Switch和复选框Checkbox,虽然它们都是继承自StatefulWidget,但它们本身不会保存当前选中状态,选中状态都是由父 ...

  4. (二)数据源处理2-xlrd操作excel

    import xlrd3workbook = xlrd3.open_workbook('test_data.xlsx')sheet =workbook.sheet_by_name('Sheet1')p ...

  5. springboot 和 mongdb连接问题 Exception in thread "main" com.mongodb.MongoSecurityException:

    1 Exception in thread "main" com.mongodb.MongoSecurityException: Exception authenticating ...

  6. 内存性能测试 Memtester+mbw

    Memtester简单介绍 Memtester主要是捕获内存错误和一直处于很高或者很低的坏位, 其测试的主要项目有随机值,异或比较,减法,乘法,除法,与或运算等等. 通过给定测试内存的大小和次数, 可 ...

  7. 【ASM】查看ASM磁盘组剩余容量和总容量

    col total_size for a10; col free_size for a20; select name,total_mb/1024 || 'G' as total_size , free ...

  8. URL重定向 - Pikachu

    概述: 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能 ...

  9. 关于安装版JDK1.8 1.7更改多个JDK环境变量 不生效

    配置maven(apache-maven-3.3.9)时提示异常:'mvn' 不是内部或外部命令,上网查找得知 它不支持jdk1.8,所以重新安装jdk1.7,后来就出现下面的问题 现象: 当使用安装 ...

  10. 使用Gulp里面的浏览器同步插件browser-sync的注意事项

    使用Gulp里面的浏览器同步插件browser-sync的注意事项 第一步:打开你的开发者工具, 编写前端代码!图如下! 第二步:打开你当前工作目录的命令行窗口 第三步:输入浏览器同步执行的代码! b ...