乐趣区

关于docker:Dockercompose负载均衡

一、什么是负载平衡

负载平衡(Load Balance),意思是将负载(工作工作,拜访申请)进行均衡、摊派到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(程度伸缩)的终极解决方案
不应用负载平衡 应用负载平衡

二、负载平衡作用

  • 解决并发压力,进步利用解决性能(减少吞吐量,增强网络解决能力)
  • 提供故障转移,实现高可用
  • 通过增加或缩小服务器数量,提供网站伸缩性
  • 平安防护;(负载平衡设施上做一些过滤,黑白名单等解决)

三、罕用负载平衡软件

  • LVS
  • Ngnix
  • HAProxy

    除了软件能够实现负载平衡外,也能够应用硬件的形式实现负载平衡,个别是独自的负载平衡服务器,价格昂贵,个别土豪级公司能够思考,业界当先的有两款,F5 和 A10。

四、Ngnix

4.1、什么是 Nginx

Nginx 是一款轻量级的 Web 服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器。

4.2、Nginx 的特点

  • 高并发连贯:官网测试 Nginx 可能撑持 5 万并发连贯,理论测试可达到 3 万左右,每天能够解决亿次访问量
  • 内存耗费小
  • Nginx 反对负载平衡
  • Nginx 反对反向代理
  • 老本低廉

4.3、正向代理 / 反向代理

正向代理代理的是客户端;反向代理代理的是服务器
正向代理 反向代理
是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器获得内容,客户端向代理发送一个申请并指定指标(原始服务器),而后代理向原始服务器转交申请并将取得的内容返回给客户端。客户端必须要进行一些特地的设置能力应用正向代理。 客户端发送申请给反向代理服务器,然而代理服务器上没有客户端须要的资源,代理服务器会判断转发到原始服务器取得资源,并把资源返回给客户端;在整个过程,客户端不晓得本人拜访的是一个代理服务器,而是一个原始服务器

4.4、Nginx 负载平衡算法

  1. Round-Robin:轮询调度算法,当配置未指明的时候,默认就是轮询算法
  2. least-connected:下一次链接将被链接到沉闷链接起码的机器上
  3. ip-hash:利用 IP 地址哈希进行调配
  4. weight-balancing:依照权重调配

    也能够多种算法一起进行应用

    4.5、NginX 装置(以下依赖包都要装置)

  5. gcc 环境装置:c++ 环境
  6. openssl 装置
  7. pcre 装置
  8. zlib 装置
  9. Nginx 装置

4.5.1、gcc 环境装置

# 装置 c ++ 编译环境
yum install gcc-c++
# 验证环境是否编译胜利, 能查看到 gcc 的版本即可
gcc -v

4.5.2、openssl 装置

OpenSSL 是一个弱小的安全套接字层明码库,囊括次要的明码算法、罕用的密钥和证书封装治理性能及 SSL 协定,并提供丰盛的应用程序供
测试或其它目标应用。nginx 不仅反对 http 协定,还反对 https(即在 ssl 协定上传输 http),所以须要在 linux 装置 openssl 库
# 装置 openssl
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

4.5.3、pcre 装置

PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包含 perl 兼容的正则表达式库。ginx 的 http 模块应用 pcre 来解析正则表达式,所以须要在 linux 上装置 pcre 库。pcre-devel 是应用 pcre 开发的一个二次开发库。nginx 也须要此库
# 装置 pcre
yum install -y pcre pcre-devel

4.5.4、zlib 装置

zlib 库提供了很多种压缩和解压缩的形式,nginx 应用 zlib 对 http 包的内容进行 gzip,所以须要在 linux 上装置 zlib 库。
# 装置 zlib
yum install -y zlib zlib-devel

4.5.5、Nginx 装置

  1. 下载
# http://nginx.org/en/download.html
Mainline version:Mainline 是 Nginx 目前主力在做的版本,能够说是开发版
Stable version:最新稳定版,生产环境上倡议应用的版本(在学习过程中应用该版本)Legacy versions:遗留的老版本的稳定版
  1. 将下载好的包上传到虚拟机
# 1. 在 home 目录下创立 Ngnix
# 2. 上传 ngnix-1.18.0.tar.gz 到该目录,并解压
  1. 执行装置
# 1. 进入解压后 nginx-1.18.0 目录
cd nginx-1.18.0
# 2. 执行装置
./configure && make && make install
  1. 启动 nginx
# 1. 查看 nginx 装置默认地位并进入该目录
whereis nginx
cd /usr/local/nginx
# 2. 启动 nginx
/sbin/nginx
# 3. 查看 nginx 启动
ps -aux|grep nginx
# 默认端口 8080

留神:启动之前查看端口占用状况,如果 8080 端口被占用,则杀死占用的过程,而后重新启动

  1. 本地拜访 nginx
{"nginx 服务器 IP 地址"}:80

4.6、Nginx 根本命令

  • 启动

    ./{"nginx 装置目录"}/sbin/nginx
  • 进行 / 重启

    ./{"nginx 装置目录"}/sbin/nginx -s stop #进行
    ./{"nginx 装置目录"}/sbin/nginx -s reload #重启
  • 命令帮忙

    ./{"nginx 装置目录"}/sbin/nginx -h # 查看帮忙
  • 验证配置文件

    ./{"nginx 装置目录"}/sbin/nginx -t # 验证配置文件

4.7、Nginx 根本配置

4.7.1、配置虚拟主机

在一台服务器启动多个网站服务

次要有以下两种形式:

  • 形式一:端口不同
  • 形式二:域名不同

4.7.2、虚拟机根底配置

  • nginx 配置文件的地位:{“nginx 装置目录 ”}/conf/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
    accept_mutex on; #设置网路连贯序列化,避免惊群景象产生,默认为 on
    multi_accept on; #设置一个过程是否同时承受多个网络连接,默认为 off
    worker_connections 1024; #设置最大连接数,默认为 1024
}
http {
    include mime.types; #文件扩展名与文件类型映射表
    default_type application/octet-stream; #默认文件类型,默认为 text/plain
    sendfile on;
    #tcp_nopush on;
    keepalive_timeout 65; # 放弃连贯超时时长 65s
    server {
        # 一个 Server 节点就是一个虚拟主机
        listen 80;
        # 监听的端口号
        server_name localhost;
        # 拜访域名
        location / {
            root html;
        # 我的项目默认拜访目录
            index index.html index.htm;
        # 默认拜访主页
            }
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {root html;}
退出移动版