1、概述

决定负载均衡如何把请求分发给后端节点,这种分发的方式就是轮询算法

2、轮询算法

种类:rr、wrr、ip_hash、lc、wlc

算法说明
rrrr轮询,默认的方法。Round robin
wrr加权轮询,在轮询的基础上增加权重,在nginx的server中的weigh就是加权轮询
ip_haship哈希,只要客户端ip一样,就会一直访问同一个后端节点(用户请求与web服务器绑定) 可以解决会话保持/会话共享 但,可能会导致负载不均
url_hashurl_hash,只要用户访问的url相同,就访问相同的web服务器 缓存服务器:静态资源缓存
least_conn最小连接数,lc算法,也可以配合上权重weight,wlc权重的最小连接数
一致性hash算法

配置案例:

ip_hash:

upstream lb_pools {
  ip_hash;
  server 192.168.10.7:80 weight=1 max_fails=3 fail_timeout=30s;
  server 192.168.10.8:80 weight=1 max_fails=3 fail_timeout=30s;
}

url_hash:

hash $request_uri;

2、负载均衡状态检查模块

监控nginx负载均衡与后端节点的模块:ngx_http_upstream_check_module

默认情况下没有安装。

需要编译安装添加这个模块。由于lb01服务器已经安装了nginx,所以找另一台服务器编译,然后把编译后的命令发送到lb01服务器替换掉原来的nginx命令即可(替换前要备份nginx命令)

这里在web03上编译tengine。

tengine官网:http://tengine.taobao.org/

2.1 下载tengine源码包

[root@web03 ~]#wget http://tengine.taobao.org/download/tengine-2.3.3.tar.gz

2.2 安装依赖

[root@web03 ~]#yum install -y pcre-devel openssl-devel

2.3 编译安装

编译安装步骤:

./configure 配置(生成Makefile),指定各种位置,否则就会被安装到/usr/local/
make  编译(根据Makefile进行编译--->生成对应的命令)
make  install  创建目录、复制文件...

编译安装tengine

编译的选项,使用yum安装nginx的默认选项,使用nginx -V 查看。

[root@web03 ~]#tar xf tengine-2.3.3.tar.gz 
[root@web03 ~]#cd tengine-2.3.3/
[root@web03 ~/tengine-2.3.3]#./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=modules/ngx_http_upstream_check_module --add-module=modules/ngx_http_upstream_session_sticky_module/

[root@web03 ~/tengine-2.3.3]#make -j 2  #-j 指定cpu核心数进行编译,默认是1
#检查编译的结果:
[root@web03 ~/tengine-2.3.3]#./objs/nginx -V
[root@web03 ~/tengine-2.3.3]#make install  #这步如果不是正式编译安装,可以不执行

部分选项解析:

--prefix=:指定安装目录
--add-module=:添加模块,第三方模块
例如:
--add-module=modules/ngx_http_upstream_check_module    
--add-module=modules/ngx_http_upstream_session_sticky_module/

备份lb01原有的nginx命令

[root@lb01 ~]#mv /sbin/nginx /sbin/nginx-1.24.0

把./objs/nginx命令发送到lb01上

[root@web03 ~/tengine-2.3.3]#scp ./objs/nginx  root@192.168.10.5:/sbin/

lb01重启nginx(tengine)

[root@lb01 ~]#systemctl restart nginx

查看一下:

[root@lb01 ~]#curl -v 192.168.10.5
......
< HTTP/1.1 200 OK
< Server: Tengine/2.3.3
< Date: Sat, 01 Jul 2023 02:30:22 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive

lb01的nginx已经替换成tengine