nginx实践

Nginx负载均衡实践

本次实践是为了体验在目前分布式集群的环境部署的条件下,使用nginx实现负载均衡配置,体验服务器集群处理请求操作的过程。

一、服务器环境搭建

本次实践使用了两台AWS服务器,每台机器上部署了相同的服务,并且在其中一台机器上搭建了nginx,进行负载均衡。

1.创建虚拟机

本次实验选择的虚拟机的操作系统是ubuntu 16.04 LTS,创建虚拟机的操作比较简单,但是AWS默认使用的是密钥登陆,对新手用户不是很友好,尤其容易让人忘记需要下载密钥文件到本地保存,并设置使用权限为400。
服务器列表:

AWS默认用户名为: ubuntu
AWS密码为: *****************

连接示例:

将密钥登陆修改为密码登陆:设置AWS服务器为密码登陆

2.安装nginx

使用命令:

sudo apt-get install nginx

完成安装之后,ubuntu会默认启动nginx,在浏览器中输入对应AWS服务器端外网IP计科访问到nginx的主页。

3.安装Java

此次实践的服务是使用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是否安装成功

二、部署应用

1.克隆代码

本次实验的代码我已经上传到Github,代码仓库的地址为:

git@github.com:JimmyU1/turing_robot.git

使用命令

git clone git@github.com:JimmyU1/turing_robot.git

即可将代码克隆到本地进行修改。

2.打包代码

代码进行修改之后需要将代码重新打包,使用maven工具进行打包
打包命令:

mvn clean
mvn package -D skipTests

然后会在代码目录下生成一个target文件夹,里面由一个jar文件即为本项目的可执行文件

3.上传代码

在服务器上的/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

4.启动服务

进入到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

你可能感兴趣的:(Java,Ubuntu)