Docker-compose负载均衡

一、什么是负载均衡

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、
分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),
扩展性(水平伸缩)的终极解决方案
不使用负载均衡 使用负载均衡
image.png image.png

二、负载均衡作用

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

三、常用负载均衡软件

  • 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到该目录,并解压

image.png

  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

image.png

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;
    }

你可能感兴趣的:(Docker-compose负载均衡)