一、什么是负载平衡
负载平衡(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负载平衡算法
- Round-Robin:轮询调度算法,当配置未指明的时候,默认就是轮询算法
- least-connected:下一次链接将被链接到沉闷链接起码的机器上
- ip-hash:利用IP地址哈希进行调配
weight-balancing:依照权重调配
也能够多种算法一起进行应用
4.5、NginX装置(以下依赖包都要装置)
- gcc环境装置:c++环境
- openssl装置
- pcre装置
- zlib装置
- 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库
# 装置opensslyum -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也须要此库
# 装置pcreyum install -y pcre pcre-devel
4.5.4、zlib装置
zlib库提供了很多种压缩和解压缩的形式,nginx应用zlib对http包的内容进行gzip,所以须要在linux上装置zlib库。
# 装置zlibyum install -y zlib zlib-devel
4.5.5、Nginx装置
- 下载
# http://nginx.org/en/download.htmlMainline version:Mainline 是 Nginx 目前主力在做的版本,能够说是开发版Stable version:最新稳定版,生产环境上倡议应用的版本(在学习过程中应用该版本)Legacy versions:遗留的老版本的稳定版
- 将下载好的包上传到虚拟机
# 1.在home目录下创立Ngnix# 2.上传ngnix-1.18.0.tar.gz到该目录,并解压
- 执行装置
# 1.进入解压后nginx-1.18.0目录cd nginx-1.18.0# 2.执行装置./configure && make && make install
- 启动nginx
# 1.查看nginx装置默认地位并进入该目录whereis nginxcd /usr/local/nginx# 2.启动nginx/sbin/nginx# 3.查看nginx启动ps -aux|grep nginx# 默认端口8080
留神:启动之前查看端口占用状况,如果8080端口被占用,则杀死占用的过程,而后重新启动
- 本地拜访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; }