负载均衡集群——Nginx

目录

1.Nginx反向代理实战

2.Nginx 反向代理和负载均衡实践

实验操作步骤

步骤 1 Nginx1 和 Nginx2 配置

步骤2 测试资源是否可用

步骤 3 安装和配置 Nginx 代理

步骤 4 代理服务器配置检测

步骤 5 在 Nginx1 和 Nginx2 配置虚拟主机

步骤 6 将虚拟主机添加入后端主机组中

步骤 7 IP Hash 算法实践

步骤 8 Random 算法实践

步骤 9 算法选项配置实践


1.Nginx反向代理实战

 

1 、什么是代理服务器
        代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送 给客户机。
2 、为什么要使用代理服务器
        提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度。
        防火墙作用 :由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可在代理服务器上设限,过滤某些不安全信息。通过代理服务器访问不能访问的目标站点
互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站
3 、反向代理 VS 正向代理
正向代理
        正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet 的连接请求,客户机必须指定代理服务器, 并将本来要直接发送到 Web 服务器上的 http 请求发送到代理服务器中。

 

反向代理
        反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet 上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

2.Nginx 反向代理和负载均衡实践

本实验将使用四台虚拟机,其中两台 Nginx 服务器和客户端与《LVS 集群》复用,充当代理服务器的 Nginx 可以新建,也可以清理《LVS 集群》中 LVS 服务器的配置后复用。

实验操作步骤

步骤 1 Nginx1 和 Nginx2 配置

[root@Nginx2 ~]# yum install nginx -y
[root@Nginx2 ~]# systemctl start nginx
[root@Nginx2 ~]# mkdir -p /data/nginx
[root@Nginx2 ~]# touch  /data/nginx/index.html
[root@Nginx1 ~]# cat /etc/nginx/conf.d/vhost.conf 
server{
 listen 80;
 server_name www.test.com;
 root /data/nginx;
 index index.html;

}
[root@Nginx1 ~]# curl 192.168.186.102
hello,nginx2
[root@Nginx2 ~]# curl 192.168.186.101
hello,nginx1

在 LVS 虚拟机上开启路由转发功能,具体参考命令如下:
 sed -i "s/ip_forward=0/ip_forward=1/g" /etc/sysctl.conf
  sysctl -p | grep net.ipv4.ip_forward
  sysctl -a | grep net.ipv4.ip_forward
配置完成后,测试是否能够正常访问 Nginx1 和 Nginx2,具体如下:
[root@LVS ~]# curl 192.168.186.101
hello,nginx1
[root@LVS ~]# curl 192.168.186.102
hello,nginx2

步骤2 测试资源是否可用

在客户端 ping 代理服务器的 10 网段地址,保证二者之间网络可达,如下图所示:

 在代理服务器*问两台 Nginx 服务器,保证 Nginx 服务器可用,如下图所示:

步骤 3 安装和配置 Nginx 代理

[root@Cluster ~]# yum install -y nginx
在代理服务器 Nginx 子配置文件目录中创建代理和负载均衡配置文件,并在文件中添加以下配置:
[root@Cluster ~]# systemctl start nginx
[root@Cluster ~]# vim /etc/nginx/conf.d/lb.conf
upstream 192.168.186.100{
        server 192.168.186.101:80;
        server 192.168.186.102:80;
}

server {
        listen 80;
        server_name localhost;
        location /{
                proxy_pass http://192.168.186.100;
        }
}
完成配置后,使用命令“nginx -s reload”重新加载 Nginx 服务。

步骤 4 代理服务器配置检测

在客户端访问 192.168.186.100,查看是否能够达到效果,如果配置正确,现象如下图所示:

步骤 5 在 Nginx1 和 Nginx2 配置虚拟主机

在/data/nginx/中创建 index80.html、index81.html 和 index82.html 文件,分别将使用的端口添加到内容中,
[root@Nginx1 ~]# touch /data/nginx/index80.html
[root@Nginx1 ~]# touch /data/nginx/index81.html
[root@Nginx1 ~]# touch /data/nginx/index82.html
[root@Nginx1 ~]# ls /data/nginx/
index80.html  index81.html  index82.html  
[root@Nginx1 ~]# echo "hello,192.168.186.101:80" > /data/nginx/index80.html 
[root@Nginx1 ~]# echo "hello,192.168.186.101:81" > /data/nginx/index81.html 
[root@Nginx1 ~]# echo "hello,192.168.186.101:82" > /data/nginx/index82.html
为了使后续的算法体现更加明显,在两台 Nginx 服务器中,添加虚拟主机,具体配置如下:
[root@Nginx1 ~]# vim /etc/nginx/conf.d/vhost.conf
server{
 listen 0.0.0.0:80;
 server_name localhost;
 root /data/nginx;
 index index80.html;
}
server{
 listen 0.0.0.0:81;
 root /data/nginx;
 server_name localhost;
 index index81.html;
}
server{
 listen 0.0.0.0:82;
 root /data/nginx;
 server_name localhost;
 index index82.html;
}
[root@Nginx2 ~]# vim /etc/nginx/conf.d/vhost.conf
server{
 listen 0.0.0.0:80;
 server_name localhost;
 root /data/nginx;
 index index80.html;
}
server{
 listen 0.0.0.0:81;
 root /data/nginx;
 server_name localhost;
 index index81.html;
}
server{
 listen 0.0.0.0:82;
 root /data/nginx;
 server_name localhost;
 index index82.html;
}
[root@Nginx2 ~]# touch /data/nginx/index80.html
[root@Nginx2 ~]# touch /data/nginx/index81.html
[root@Nginx2 ~]# touch /data/nginx/index82.html
[root@Nginx2 ~]# echo "hello,192.168.186.102:80" > /data/nginx/index80.html
[root@Nginx2 ~]# echo "hello,192.168.186.102:81" > /data/nginx/index81.html
[root@Nginx2 ~]# echo "hello,192.168.186.102:82" > /data/nginx/index82.html

步骤 6 将虚拟主机添加入后端主机组中

[root@Cluster ~]# vim /etc/nginx/conf.d/lb.conf
upstream 192.168.186.100{
server 192.168.186.101:80;
server 192.168.186.101:81;
server 192.168.186.101:82;
server 192.168.186.102:80;
server 192.168.186.102:81;
server 192.168.186.102:82;
}
server {
listen 80;
server_name localhost;
location /{
proxy_pass http://192.168.186.100;
}
}
配置完成后重新加载 Nginx 配置文件

步骤 7 IP Hash 算法实践

将代理服务器中相关配置文件中添加配置,修改算法为 IP Hash,具体如下:

[root@Cluster ~]# vim /etc/nginx/conf.d/lb.conf
upstream 192.168.186.100{
        ip_hash;
        server 192.168.186.101:80;
        server 192.168.186.101:81;
        server 192.168.186.101:82;

        server 192.168.186.102:80;
        server 192.168.186.102:81;
        server 192.168.186.102:82;

}

server {
        listen 80;
        server_name localhost;
        location /{
                proxy_pass http://192.168.186.100;
        }
}

 

步骤 8 Random 算法实践

将负载均衡配置修改为 Random 算法,具体如下:
重新加载 Nginx 配置后,进行测试,具体现象为:

步骤 9 算法选项配置实践

修改代理主机配置文件,将 Nginx2 的全部虚拟主机设置为 backup,同时将 Nginx1 上的虚拟主机设置一定的权重,具体配置如下图所示:

重新加载 Nginx 配置后,然后在客户端进行测试,具体现象如下:

手动将 Nginx1 上的服务停止,如下图所示:

 

 再次在客户端进行测试,具体显现个如下:

修改代理服务器上的配置文件,将 Nginx2 的部分虚拟主机修改为“down”,具体如下:

 

重新加载 Nginx 服务配置,再次在客户端进行测试,具体现象如下:
上一篇:如何在PostgreSQL中使用CTE(公共表表达式)来简化复杂的查询逻辑?-解决方案


下一篇:3D抓取算法的优点及缺点