本文主要介绍Nginx构建的负载均衡集群的实现。通过示例代码进行了非常详细的介绍,对大家的学习或者工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。
(1)。实验环境
192.168.5.101负载平衡器
192.168.5.102主机1
192.168.5.103主机2
(2)。Nginx负载均衡策略
nginx的负载均衡用于从上游模板定义的后端服务器列表中选择一个服务器来接收用户的请求。基本的上游模块如下:
upstream[服务器组名称]{ server[IP地址]:[端口号]; server[IP地址]:[端口号]; .... }上游模块配置完成后,指定的访问应该反向代理到服务器列表,格式如下:
location~.*${ indexindex.jspindex.html; proxy_passhttp://[服务器组名称]; }扩展:nginx的位置配置规则:https://www.jb51.net/article/182472.htm
这样就完成了最基本的负载均衡,但是无法满足实际需求。目前Nginx的上游模块支持六种负载均衡策略(算法):轮询(默认模式)、权重(权重模式)、ip_hash(根据ip分配模式)、最少连接模式(最少连接模式)、公平(第三方提供的响应时间模式)和url_hash(根据第三方采用的url分配模式)。
1)轮询
最基本的配置方式是上游模块默认的负载均衡策略。每个请求按照时间顺序平均分布到不同的后端服务器。有以下参数:
注:1。标记为1.down的服务器将被自动拒绝;2.默认为轮询;3.这种策略适用于无状态的服务器配置和短的平面块服务。
重量
权重方法,它根据轮询策略指定轮询的概率。也可以考虑在轮询的基础上增加一个权重参数。该参数指定轮询的概率,其值为number。上游模块配置模板如下:
upstream[服务器组名称]{ server[IP地址]:[端口号]weight=2; server[IP地址]:[端口号]; .... }本例中,无权重参数的服务器默认为1,权重的值与访问率成正比,所有权重值之和为一个循环单位,服务器本身的权重值为循环单位中的轮询次数。
注:1。权重越高,分配的请求越多;2.该策略可以与least_conn策略和iphash策略结合使用;3.这种策略更适合服务器硬件配置差距较大的情况。
3)ip_hash
根据ip分配方法,根据客户端IP分配方法分配负载平衡器。这种方法确保相同的客户端请求被一致地发送到相同的服务器,以确保会话会话。这样,每个访问者都有一个固定的访问后端服务器的权限,可以解决会话不能跨服务器的问题。上游模块配置模板如下:
upstream[服务器组名称]{ ip_hash; server[IP地址]:[端口号]weight=2; server[IP地址]:[端口号]; .... }注:1。1.nginx1.3.1之前的版本不能使用权重);在ip_hash中;2.IP_hash不能与backup同时使用;3.这种策略适合于有状态服务的程序,比如session;4.当需要移除服务器时,必须手动将其关闭。
4)最小连接
使用最少的连接方法,将请求发送到链接最少的后端服务器。轮询是将请求平均分配给所有后端,使它们的负载大致相同。但是,有些请求需要很长时间,这会导致很高的后端负载。在这种情况下,least_conn可以达到更好的负载均衡效果。上游模块配置模板如下:
upstream[服务器组名称]{ least_conn; server[IP地址]:[端口号]weight=2; server[IP地址]:[端口号]; .... }注意:这种策略适用于不同请求处理时间导致的服务器过载。
公平的,公正的
响应时间模式:根据服务器的响应时间分配请求,响应时间短的优先。上游模块配置模板如下:
upstream[服务器组名称]{ server[IP地址]:[端口号]weight=2; server[IP地址]:[端口号]; .... fair; }注意:需要安装第三方插件。
6)url_hash
Url分配方法:根据被访问url的哈希结果分配请求,使每个url都被定向到同一个后端服务器,要配合缓存命中使用。对同一资源的多个请求可能到达不同的服务器,导致不必要的多次下载、低缓存命中率和一些资源时间的浪费。通过使用url_hash,相同的url(即相同的资源请求)将到达相同的服务器。一旦资源被缓存并且再次接收到请求,就可以在缓存中读取它。上游模块配置模板如下:
upstream[服务器组名称]{ hash$request_uri; server[IP地址]:[端口号]weight=2; server[IP地址]:[端口号]; .... }注:1。需要安装第三方插件;2.uri,也就是I,不是小写的l。
(3)。实验
1)在负载均衡器youxi1上编译并安装nginx
为nginx安装依赖包
[root@youxi1~]#yum-yinstallgccgcc-c++autoconfautomakezlibzlib-developensslopenssl-develpcrepcre-devel上传nginx源码包nginx-1.14.1.tar.gz,解压安装。
[root@youxi1~]#tarxfnginx-1.14.1.tar.gz-C/usr/local/src/ [root@youxi1~]#cd/usr/local/src/nginx-1.14.1/ [root@youxi1nginx-1.14.1]#./configure--prefix=/usr/local/nginx--with-http_dav_module--with-http_stub_status_module--with-http_addition_module--with-http_sub_module--with-http_flv_module--with-http_mp4_module [root@youxi1nginx-1.14.1]#make&&makeinstall [root@youxi1nginx-1.14.1]#echo$? 0参数描述:
-用-http_dav_module,启用ngx_http_dav_module支持(addPUT,DELETE,MKCOL:createcollection,COPY,MOVE方法),默认关闭,需要编译打开;
-配合-http_stub_status_module,启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态);
-with-http_addition_module,启用ngx_http_addition_module支持(作为输出过滤器,支持不完全缓冲,分部分响应请求);
-with-http_sub_module,启用ngx_http_sub_module支持(允许nginx响应中的一些文本被其他一些文本替换);
-with-http_flv_module,启用ngx_http_flv_module支持(提供基于时间的偏移量文件,用于查找内存使用情况);
-with-http_mp4_module,启用对mp4文件的支持(提供基于时间的偏移文件,寻求内存使用)。
生成nginx用户
[root@youxi1nginx-1.14.1]#useradd-M-s/sbin/nologinnginx启动并添加引导自启动。
[root@youxi1nginx-1.14.1]#/usr/local/nginx/sbin/nginx [root@youxi1nginx-1.14.1]#echo/usr/local/nginx/sbin/nginx>>/etc/rc.local [root@youxi1nginx-1.14.1]#chmod+x/etc/rc.d/rc.local如果防火墙是打开的,记得添加端口号。
[root@youxi1nginx-1.14.1]#firewall-cmd--permanent--zone=public--add-port=80/tcp&&firewall-cmd--reload success success检查以下界面,看看nginx是否安装正常。
测试结束后,修改nginx的配置文件,最后重启nginx。
[root@youxi1nginx-1.14.1]#cp/usr/local/nginx/conf/nginx.conf{,.bak} [root@youxi1nginx-1.14.1]#vim/usr/local/nginx/conf/nginx.conf usernginx; //第2行 location/{ //第43行起 roothtml; indexindex.htmlindex.htm; if($request_uri~*\.html$){ proxy_passhttp://htmlservers; } if($request_uri~*\.php$){ proxy_passhttp://phpservers; } proxy_passhttp://picservers; } upstreamhtmlservers{ //在http模块下,server模块平级处添加 server192.168.5.102:80; server192.168.5.103:80; } upstreamphpservers{ server192.168.5.102:80; server192.168.5.103:80; } upstreampicservers{ server192.168.5.102:80; server192.168.5.103:80; } [root@youxi1nginx-1.14.1]#/usr/local/nginx/sbin/nginx-sreload2)在youxi2和youxi3上布局web程序
[root@youxi2~]#yum-yinstallhttpd [root@youxi2~]#echoyouxi2>/var/www/html/index.html [root@youxi2~]#echoyouxi2.php>/var/www/html/index.php [root@youxi2~]#echoyouxi2.other>/var/www/html/index.jsp [root@youxi2~]#systemctlstarthttpd.service [root@youxi3~]#yum-yinstallhttpd [root@youxi3~]#echoyouxi3>/var/www/html/index.html [root@youxi3~]#echoyouxi3.php>/var/www/html/index.php [root@youxi3~]#echoyouxi3.other>/var/www/html/index.jsp [root@youxi3~]#systemctlstarthttpd.service如果防火墙是打开的,记得添加端口号。
[root@youxi2~]#firewall-cmd--permanent--zone=public--add-port=80/tcp&&firewall-cmd--reload success success [root@youxi3~]#firewall-cmd--permanent--zone=public--add-port=80/tcp&&firewall-cmd--reload success success3)测试
首先测试html页面
然后测试php页面。
最后,测试其他页面
参考:https://www.cnblogs.com/1214804270hacker/p/9325150.html
就是这样。本文介绍了Nginx负载均衡集群的实现。有关Nginx负载平衡集群的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)