本文目录导航:
nginx负载平衡的三种模式
nginx负载平衡的三种模式包含轮询(round robin)、IP哈希(IP hash)以及起码衔接(least connections)。
1. 轮询(Round Robin):这是nginx自动的负载平衡模式。
当恳求来到时,nginx依照主机列表的顺序,将恳求依次调配到各个主机上。
当一切主机都已接纳到恳求后,nginx再次回到列表的起始位置,启动下一轮的调配。
这种模式繁难明了,实用于主机性能相近,且恳求散布平均的场景。
例如,咱们有三台主机A、B、C。
第一个恳求调配给A,第二个恳求调配给B,第三个恳求调配给C,第四个恳求再次调配给A,以此类推。
2. IP哈希(IP Hash):这种模式中,nginx会依据恳求的IP地址启动哈希计算,而后依据计算结果将恳求调配到特定的主机上。
这种模式保障了同一IP的恳求会被调配到同一台主机上,实用于须要会话坚持的场景,如电商网站。
例如,用户甲的IP地址为192.168.1.1,经哈希计算后被调配到主机A;用户乙的IP地址为192.168.1.2,经哈希计算后被调配到主机B。
那么,只需用户甲的IP地址不变,他的一切恳求都将被调配到主机A。
3. 起码衔接(Least Connections):nginx会实时统计每台主机的衔接数,而后将新恳求调配给以后衔接数起码的主机。
这种模式尽或许地平衡了各个主机的负载,实用于恳求解决期间长短不一,且主机性能有所差异的场景。
例如,主机A、B、C以后的衔接数区分为10、5、15,那么下一个恳求将被调配到主机B,由于它以后的衔接数起码。
以上三种模式各有实用场景,可以依据实践须要启动选用性能。
同时,nginx也允许自定义负载平衡战略,可以依据业务需求启动共性化定制。
经常使用Nginx成功负载平衡
一、负载平衡的作用 1、转发性能 依照必定的算法【权重、轮询】,将客户端恳求转发到不同运行主机上,减轻单个主机压力,提高系统并发量。
2、缺点移除 经过心跳检测的模式,判别运行主机以后能否可以反常上班,假设主机期宕掉,智能将恳求发送到其余运行主机。
3、复原减少 如检测到出现缺点的运行主机恢停上班,智能将其减少四解决用户恳求队伍中。
二、Nginx成功负载平衡 1、源地址哈希法:依据失掉客户端的IP地址,经过哈希函数计算失掉一个数值,用该数值对主机列表的大小启动取模运算,失掉的结果便是客服端要访问主机的序号。
驳回源地址哈希法启动负载平衡,同一IP地址的客户端,当后端主机列表不变时,它每次都会映射到同一台后端主机启动访问。
2、轮询法:将恳求按顺序轮番地调配到后端主机上,它平衡地看待后端的每一台主机,而不关心主机实践的衔接数和以后的系统负载。
3、随机法:经过系统的随机算法,依据后端主机的列表大小值来随机选取其中的一台主机启动访问。
4、加权轮询法:不同的后端主机或许机器的性能和以后系统的负载并不相反,因此它们的抗压才干也不相反。
给性能高、负载低的机器性能更高的权重,让其解决更多的请;而性能低、负载高的机器,给其调配较低的权重,降落其系统负载,加权轮询能很好地解决这一疑问,并将恳求顺序且依照权重调配到后端。
5、加权随机法:与加权轮询法一样,加权随机法也依据后端机器的性能,系统的负载调配不同的权重。
不同的是,它是依照权重随机恳求后端主机,而非顺序。
6、最小衔接数法:由于后端主机的性能不尽相反,关于恳求的解决有快有慢,最小衔接数法依据后端主机以后的衔接状况,灵活地选取其中以后积压衔接数起码的一台主机来解决以后的恳求,尽或许地提高后端服务的应用效率,将担任正当地分流到每一台主机。
三、性能说明四、轮询五、权重六、iphash七、起码链接八、fair九、完整代码十、也可以经常使用域名
经常使用docker成功nginx负载平衡
Docker部署Nginx成功负载平衡试验环境:Centos7、Docker、Nginx。
应用宿主机和两个nginx容器来成功负载平衡,宿主机无任何内容。
只搭载一台nginx主机,并由此台主机将恳求转发给两个nginx容器来启动解决。
不知道什么是nginx负载平衡,请移步nginx负载平衡。
一、装置关系环境1.装置Docker(团体介绍性能阿里云源)\2.宿主机装置Nginx
封锁防火墙和selinux
[root@iZbp18vj2il5rgv6uy66xxZ~]#//Centos7封锁防火墙命令[root@iZbp18vj2il5rgv6uy66xxZ~]#setenforce0//暂时封锁SELinux//假设是宝塔装置,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#yuminstalldocker-y[root@iZbp18vj2il5rgv6uy66xxZ~]#wget~]#yuminstallnginx-y传送门:selinux是什么、centos7防火墙命令
用命令测试能否成功装置能否开启服务
//假设是宝塔装置,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#[root@iZbp18vj2il5rgv6uy66xxZ~]#7启动服务命令与6.x不同哦测试web页面能否显示成功
齐全ok没疑问!!!
咱们先删除掉nginx自动html,并创立一个空白繁难咱们性能成功后检查成果
pullnginx镜像
[root@iZbp18vj2il5rgv6uy66xxZwww]#dockerpullnginxUsingdefaulttag:latestlatest:Pullingfromlibrary//library/nginx:latestpull成功经常使用dockerimages命令检查
[root@iZbp18vj2il5rgv6uy66xxZwww]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatestf8f4ffc8092c7daysago133MBdockerrun创立容器
//容器名:nginx_web1映射容器8080端口到宿主机80端口上dockerrun-p8080:80--namenginx_web1-itnginx/bin/bash进入nginx_web1容器的nginx目录下创立一个
root@9f88cab79ac8:/#cd/usr/share/nginx/html/root@9f88cab79ac8:/usr/share/nginx/html#@9f88cab79ac8:/usr/share/nginx/html#@9f88cab79ac8:/usr/share/nginx/html#echohellonginx_web1ninetySeven>@9f88cab79ac8:/usr/share/nginx/html#exit上方创立多一个新的nginx容器
//容器名:nginx_web2映射容器8080端口到宿主机80端口上dockerrun-p8081:80--namenginx_web2-itnginx/bin/bash进入nginx_web2容器的nginx目录下创立一个
root@f1b7fcac2dad:/#cd/usr/share/nginx/html/root@f1b7fcac2dad:/usr/share/nginx/html#@f1b7fcac2dad:/usr/share/nginx/html#@f1b7fcac2dad:/usr/share/nginx/html#echohellonginx_web2ninetySeven>@f1b7fcac2dad:/usr/share/nginx/html#exit先检查容器
[root@iZbp18vj2il5rgv6uy66xxZwww]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf1b7fcac2dadnginx/docker-entrypoint.…4minutesagoUpaboutaminute0.0.0.0:8081->80/tcp,:::8081->80/tcpnginx_web29f88cab79ac8nginx/docker-entrypoint.…10minutesagoUp49seconds0.0.0.0:8080->80/tcp,:::8080->80/tcpnginx_web1exit分开后容器不运转先启动两个nginx容器再口头启动服务命令
//假设是宝塔装置,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#[root@iZbp18vj2il5rgv6uy66xxZ~]#7启动服务命令与6.x不同哦0三、性能宿主机nginx文件模式一:命令行操作(介绍)
//假设是宝塔装置,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#[root@iZbp18vj2il5rgv6uy66xxZ~]#7启动服务命令与6.x不同哦1模式二:关上宝塔面板找到nginx治理
在http段参与以下代码
//假设是宝塔装置,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#[root@iZbp18vj2il5rgv6uy66xxZ~]#7启动服务命令与6.x不同哦2保留性能偏重启宿主机Nginx或许宝塔面板nginx治理重启服务
//假设是宝塔装置,则省略[root@iZbp18vj2il5rgv6uy66xxZ~]#[root@iZbp18vj2il5rgv6uy66xxZ~]#7启动服务命令与6.x不同哦3检查Nginx容器运转形态
注:假设是线上主机,则须要在主机和宝塔界面开启端口
主机性能端口
宝塔性能端口
五、测试
再刷新几次?
web1web2看进去了吧?
以上基于docker成功nginx负载成功!!!