君衍.
- 一、编译安装Nginx
- 二、轮询算法实现负载均衡
- 三、加权轮询算法实现负载均衡
- 四、ip_hash实现负载均衡
一、编译安装Nginx
这里我们先将环境准备好,我使用的是Ubuntu22.04操作系统:
这个是我刚安装好的,所以首先我们进行保存快照防止安装过程出错,同时我已经讲镜像源进行了更新。
好的,下面我们首先开始安装Nginx:
1、安装依赖
sudo apt install libgd-dev
2、下载nginx
wget http://nginx.org/download/nginx-1.22.1.tar.gz
3、解压nginx
tar -zvxf nginx-1.22.1.tar.gz
4、安装GCC
sudo apt install gcc
5、安装pcre库
PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块需要靠它来解析正则表达式。另外,pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。
sudo apt install libpcre3 libpcre3-dev
6、安装SSL库
如果服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么需要拥有OpenSSL。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。
sudo apt-get install openssl libssl-dev
7、编译安装
编译
cd nginx-1.22.1
编译并指定安装位置,执行安装之后会创建指定文件夹/www/env/nginx
./configure --prefix=/www/env/nginx \
--with-pcre \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_image_filter_module \
--with-http_slice_module \
--with-mail \
--with-threads \
--with-file-aio \
--with-stream \
--with-mail_ssl_module \
--with-stream_ssl_module
安装
make && make install
至此,等待半分钟安装成功。
到这里我们在Ubuntu22.04下安装Nginx已经安装成功,这里我补充下,由于使用用户安装时,出现了权限不够的错误,所以我后面使用root登录重新进行安装了(其实只要在前面sudo加上就行)。
我们打开nginx,并检验nginx状态,查看防火墙并将其关闭。
systemctl status nginx
systemctl status ufw
systemctl stop ufw
systemctl status ufw
然后查看自身IP地址并进行访问:
这里使用浏览器访问查看nginx是否成功开启:
这里我们模拟Nginx的负载均衡效果,我这里又克隆了两台Ubuntu来方便查看。
二、轮询算法实现负载均衡
首先这里环境如下:
客户端 | 本机 |
---|---|
代理服务器 | 192.168.217.152 |
后端服务器1 | 192.168.217.153 |
后端服务器2 | 192.168.217.154 |
所以主机都已安装Nginx。
首先要启用负载均衡,就需要在Nginx配置文件中定义后端服务器列表。同时指定负载均衡的代理服务器。
好的,下面我们进行配置:
192.168.217.152代理服务器
- 1、找到
/etc/nginx/sites-available/default
文件进行配置
upstream nginx_web{server 192.168.217.153;server 192.168.217.154;
}
# 并在location部分加入:
server {location / {root html;index index.html index.htm index.jsp index.ftl;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://nginx_web;}
}
然后我们保存并退出。
- 2、重新加载配置文件
nginx -s reload
- 3、192.168.217.153后端服务器配置
找到/var/www/html/index.nginx-debian.html
文件进行修改,由于我是克隆了之前的Ubuntu,所以这里使用的中间件是Nginx,然后我们进行修改。
同理,另一台后端服务器也进行界面修改,方面我们之后查看轮询算法。到这里我们即可配置完毕,下面我们来查看效果:
至此我们可以看到轮询算法即为每个请求按时间顺序逐一分配到不同的后端服务器上,如果某台服务器死机,自动提出故障系统,使用户访问不受影响。
三、加权轮询算法实现负载均衡
我们在之前复现轮询算法实现负载均衡上进行操作,所以我们这下只需修改主配置文件的upstream部分即可。
代理服务器:
192.168.217.152
upstream nginx_web{server 192.168.217.153 weight=1;server 192.168.217.154 weight=2;
}
同样的,重新加载:nginx -s reload
继续进行测试,这里我们会发现一轮以内两次访问192.168.217.154,一次访问192.168.217.153。
至此,我们加权轮询算法复现完毕,加权轮询算法即为:weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
四、ip_hash实现负载均衡
同样的,我们在之前复现加权轮询算法实现负载均衡上进行操作,所以我们这下只需修改主配置文件的upstream部分即可。
代理服务器:
192.168.217.152
upstream nginx_web{ip_hash;server 192.168.217.153:80;server 192.168.217.154:80;
}
同样的,重新加载:nginx -s reload
继续进行测试,我们会发现它固定访问了192.168.217.153这台服务器。
至此,ip_hash实现负载均衡实现完毕,每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。