1、概述
决定负载均衡如何把请求分发给后端节点,这种分发的方式就是轮询算法
2、轮询算法
种类:rr、wrr、ip_hash、lc、wlc
算法 | 说明 |
---|---|
rr | rr轮询,默认的方法。Round robin |
wrr | 加权轮询,在轮询的基础上增加权重,在nginx的server中的weigh就是加权轮询 |
ip_hash | ip哈希,只要客户端ip一样,就会一直访问同一个后端节点(用户请求与web服务器绑定) 可以解决会话保持/会话共享 但,可能会导致负载不均 |
url_hash | url_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