本次实践是为了体验在目前分布式集群的环境部署的条件下,使用nginx实现负载均衡配置,体验服务器集群处理请求操作的过程。
本次实践使用了两台AWS服务器,每台机器上部署了相同的服务,并且在其中一台机器上搭建了nginx,进行负载均衡。
本次实验选择的虚拟机的操作系统是ubuntu 16.04 LTS,创建虚拟机的操作比较简单,但是AWS默认使用的是密钥登陆,对新手用户不是很友好,尤其容易让人忘记需要下载密钥文件到本地保存,并设置使用权限为400。
服务器列表:
AWS默认用户名为: ubuntu
AWS密码为: *****************
连接示例:
将密钥登陆修改为密码登陆:设置AWS服务器为密码登陆
使用命令:
sudo apt-get install nginx
完成安装之后,ubuntu会默认启动nginx,在浏览器中输入对应AWS服务器端外网IP计科访问到nginx的主页。
此次实践的服务是使用Java语言开发的,因此运行需要Java的环境。
安装步骤请参考:ubuntu环境下Java Web环境搭建
安装命令如下:
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
安装完成之后使用命令:
java -version
检查java是否安装成功
本次实验的代码我已经上传到Github,代码仓库的地址为:
git@github.com:JimmyU1/turing_robot.git
使用命令
git clone git@github.com:JimmyU1/turing_robot.git
即可将代码克隆到本地进行修改。
代码进行修改之后需要将代码重新打包,使用maven工具进行打包
打包命令:
mvn clean
mvn package -D skipTests
然后会在代码目录下生成一个target
文件夹,里面由一个jar
文件即为本项目的可执行文件
在服务器上的/home/ubuntu
路径下新建一个文件夹命名webroot
用于存储代码文件。使用命令:
sudo mkdir webroot
sudo chmod 777 webroot
创建好目录之后把打包好的jar
文件上传至服务器。使用命令(文件名、目录名和服务器地址请自行替换):
sudo scp robot-0.0.1-SNAPSHOT.jar ubuntu@52.36.73.236:/home/ubuntu/webroot
进入到webroot
目录,使用nohup
从后台启动程序:
nohup java -jar robot-0.0.1-SNAPSHOT.jar &
本服务默认使用端口号是11200,之后的nginx配置将对11200端口的服务进行负责均衡。
负载均衡的配置是通过修改nginx配置文件来实现的。
nginx的默认配置文件路径为/etc/nginx/conf.d/
。
在其中一台服务器上配置nginx来进行负载均衡,在/etc/nginx/conf.d/
目录下创建一个配置文件,命名turing_robot.conf
,具体内容如下:
upstream turingrobot{
server 127.0.0.1:11200;
server 52.36.73.236:11200;
}
server{
listen 8700;
location / {
proxy_pass http://turingrobot;
}
}
备注:
1. upstream用于配置同样服务的多个服务器,不要带有http或者https的协议头。
2. upstream的里面配置多个server,是是提供服务的服务器地址和端口号。
3. server结构中,listen接口表示的是nginx对外服务的端口号。是服务访问的实际入口。
4. proxy_pass 用于表示该服务代理的是upstream中配置的对应实际服务地址。
最后重新加载nginx的配置文件即可完成配置,使用命令:
sudo nginx -s reload
我们在代码中会获取服务器的IP(内网IP,暴露外网IP存在安全隐患),并返回给了前端,然后前端会在每次请求返回只有在页面上展示对应的服务器IP。下图中两次返回的IP地址并不一样,表示我们两次请求分别是由不同的服务器来处理的。
展示效果:
1
1