• nginx教程<二>(高可用)


    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>
    
  • 相关阅读:
    numpy百题冲关,pandas百题冲关
    mapreduce过程以及相关类总结
    mapreduce,数据结构和类型介绍
    精确度、召回率、混淆矩阵的关系
    小程序点击图片放大效果 单张图片 多张图片
    小程序动态添加class及调接口传递多个参数
    小程序for循环嵌套
    小程序富文本转换
    jquery函数加载及生成随机数
    微信小程序 swiper 显示图片计数 当前/总数
  • 原文地址:https://www.cnblogs.com/lovelywcc/p/14271610.html
Copyright © 2020-2023  润新知