目录

  • 一、nginx作为负载均衡服务的调度算法
  • 二、lz虚拟机说明
  • 三、ip_hash调度算法演示
  • 1、配置192.168.3.11虚拟机(即模拟三台虚拟机应用服务器)
  • 2、配置192.168.3.10虚拟机(即负载均衡服务器)
  • 四、ip_hash调度算法缺点


一、nginx作为负载均衡服务的调度算法

调度算法

作用

轮询(默认)

按时间顺序逐一分配到不同的后端服务器

加权轮询

weight值越大,分配到的访问几率越高

ip_hash

每个请求按访问IP的hash结果分配,这样来自同一个Ip访问一个后端服务器

url_hash

按照访问的URL的hash结果来分配请求,使每个URL定向到同一个后端服务器

least_coon

最少连接数,哪个后端服务器连接数少就分发到哪个后端服务器

hash关键数值

hash自定义的key

二、lz虚拟机说明

ip

说明

192.168.3.10(已安装nginx)

此虚拟机作为负载均衡服务器

192.168.3.11(已安装nginx)

此虚拟机通过nginx配置三个端口访问三个不同的页面(模拟三台虚拟机应用)

三、ip_hash调度算法演示

1、配置192.168.3.11虚拟机(即模拟三台虚拟机应用服务器)

(1)、分别在/opt/app/code1、code2、code3目录下创建index.html页面(模拟三台服务器分别对应的index页面)

  • /opt/app/code1/目录下创建index.html页面,内容如下:
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>server1</title>
	</head>

	<body style="background-color:red;">
		<h1>server1</h1>
	</body>
</html>
  • /opt/app/code2/目录下创建index.html页面,内容如下:
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>server2</title>
	</head>

	<body style="background-color:yellow;">
		<h1>server2</h1>
	</body>
</html>
  • /opt/app/code3/目录下创建index.html页面,内容如下:
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>server3</title>
	</head>

	<body style="background-color:blue;">
		<h1>server3</h1>
	</body>
</html>

(2)、编辑 nginx.conf 配置文件可以看到在/etc/nginx/conf.d/目录下可以创建子配置文件,如下图:

nginx ip_hash修改配置 nginx ip_hash 分配不均_nginx

(3)、在/etc/nginx/conf.d/目录下分别创建server1.conf、server2.conf和server3.conf三个配置文件(模拟三台服务器通过不同的端口访问对应目录下的index页面,即模拟三台服务三个不同的应用)

  • server1.conf配置文件内容如下:
server {
        listen       8001; #8001端口
        server_name  localhost; #ip地址
	
	location / {
	root /opt/app/code1;#指定code1目录下的文件
	index index.html index.htm;
	}	
	
			
	error_page 404 /404.html;
	location = /404.html {
	}

	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
	}
}
  • server2.conf配置文件内容如下:
server {
        listen       8002; #8002端口
        server_name  localhost; #ip地址
	
	location / {
	root /opt/app/code2;#指定code2目录下的文件
	index index.html index.htm;
	}	
	
			
	error_page 404 /404.html;
	location = /404.html {
	}

	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
	}
}
  • server3.conf配置文件内容如下:
server {
        listen       8003; #8003端口
        server_name  localhost; #ip地址
	
	location / {
	root /opt/app/code3;#指定code3目录下的文件
	index index.html index.htm;
	}	
	
			
	error_page 404 /404.html;
	location = /404.html {
	}

	error_page 500 502 503 504 /50x.html;
	location = /50x.html {
	}
}

(4)、启动nginx服务并从新加载配置文件

  • 启动nginx服务
[root@localhost conf.d]# systemctl start nginx.service
  • 检查配置修改的配置文件是否正确,返回successful表示配置文件修改无错
[root@localhost nginx]# nginx -t -c /etc/nginx/nginx.conf

nginx ip_hash修改配置 nginx ip_hash 分配不均_配置文件_02

  • 重新加载nginx配置文件,并查看
[root@localhost conf.d]# nginx -s reload -c /etc/nginx/nginx.conf
  • 查看本机启用nginx的端口
[root@localhost conf.d]# netstat -luntp|grep nginx

nginx ip_hash修改配置 nginx ip_hash 分配不均_nginx_03

(5)、浏览器分别输入地址,访问模拟的三台服务器分别对应的index页面(即模拟三台服务三个不同的应用)

2、配置192.168.3.10虚拟机(即负载均衡服务器)

(1)、编辑 nginx.conf 配置文件可以看到在/etc/nginx/conf.d/目录下可以创建子配置文件,如下图:

nginx ip_hash修改配置 nginx ip_hash 分配不均_nginx

(2)、在/etc/nginx/conf.d/目录下创建upstream_server.conf配置文件,内容如下:

upstream blance {#配置服务器的分别对应的应用ip和的端口
   ip_hash;#每个请求按访问IP的hash结果分配
   server 192.168.3.11:8001; 
   server 192.168.3.11:8002;
   server 192.168.3.11:8003;
}
server {
	listen       80; #80端口
	server_name  localhost; #ip地址
	
	location / {#配置代理,名称与upstream后面追加的名称相同
		proxy_pass http://blance;
	}	
	
			
	error_page 404 /404.html;
		location = /404.html {
	}

	error_page 500 502 503 504 /50x.html;
		location = /50x.html {
	}
}

nginx ip_hash修改配置 nginx ip_hash 分配不均_nginx ip_hash修改配置_05

(3)、启动nginx服务并从新加载配置文件

  • 启动nginx服务
[root@localhost conf.d]# systemctl start nginx.service
  • 检查配置修改的配置文件是否正确,返回successful表示配置文件修改无错
[root@localhost nginx]# nginx -t -c /etc/nginx/nginx.conf

nginx ip_hash修改配置 nginx ip_hash 分配不均_配置文件_02

  • 重新加载nginx配置文件,并查看
[root@localhost conf.d]# nginx -s reload -c /etc/nginx/nginx.conf
  • 查看本机启用nginx的端口
[root@localhost conf.d]# netstat -luntp|grep nginx

nginx ip_hash修改配置 nginx ip_hash 分配不均_html_07

(4)、浏览器输入代理服务的访问地址http://192.168.3.10/,因为负载均衡服务器的端口为80可以直接省略,依次刷新服务器,可以看到同一台电脑每次都在访问同一个后端服务器的页面,如下图:

  • 如下图lz不管访问多少次,只能访问端口为8002的server2应用服务页面。

四、ip_hash调度算法缺点

  • 如果ip为192.168.3.10的负载均衡服务器前面在加一层代理的话,那我们获取到的ip就不是用户真实的ip,这样就无法基于用户真实的ip做轮询。
  • 因为获取的始终是代理服务器的ip,永远会访问同一个后端服务器。