架构之旅-集群与管理-服务

简述

本文中,将使用nginx+docker来搭建iarc-service的集群。

源代码

iarc-service

环境

IDE: IntelliJ IDEA
JDK: 1.8.0_u162
Build: Maven 3.0.5
Framework: Spring Boot
WebServer: Nginx
Container: Docker

开发

以下步骤在CentOS7中完成

创建Dockerfile

在iarc-service根目录下新建文件’Dockerfile’,内容如下:

1
2
3
FROM frolvlad/alpine-oraclejdk8:slim
ADD ./target/iarc-service-0.0.1-SNAPSHOT.war app.war
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.war"]

构建docker镜像

docker build -t iarc/iarc-service .

运行2个docker容器

1
2
$ docker run -it -p 8003:8080 --rm --name iarc-service-1 iarc/iarc-service
$ docker run -it -p 8004:8080 --rm --name iarc-service-2 iarc/iarc-service

配置负载均衡

配置文件路径是 /etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
http {
upstream iarc_service {
server 127.0.0.1:8003;
server 127.0.0.1:8004;
}

server {
listen 8081;
location / {
proxy_pass http://iarc_service;
}
}
...
}

开放8081端口

1
2
$ firewall-cmd --zone=public --add-port=8081/tcp --permanent
$ firewall-cmd --reload

调试

访问

本地使用curl localhost:8081/user/getUser/123来验证,外部使用http://192.168.56.102:8081/user/getUser/123来访问

问题

由于SELinux的限制,启动nginx时报错[emerg] bind() to 0.0.0.0:8081 failed (13: Permission denied)
解决方案:

1
2
3
4
5
1、临时关闭selinux
setenforce 0
2、永久关闭selinux,需要重启
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled

部署

参考