3 集群部署
集群部署在单点部署基础上进行。
1 部署架构
本文采用Nginx+tomcat+MySQL作为Report产品集群部署的最佳实践方案。其中,Tomcat作为常用的Web应用服务器,MySQL作为产品的支撑数据库,在这里不做赘述。
2 集群环境准备
2.1 系统要求
操作系统 | 已验证版本 |
---|---|
Linux | CentOS 6.X、CentOS 7.X |
Windows | Windows 10 |
2.2 硬件配置要求
集群部署方案可以采用多个节点(>=2),本文以三节点为例,说明硬件配置要求。
2.2.1 服务器数量
对于部署三节点的集群,推荐准备三台服务器,如下表所示:
服务器类型 | 组件类型 |
---|---|
应用服务器1 | Web容器(Tomcat) |
应用服务器2 | Web容器(Tomcat) |
组件服务器 | 反向代理和负载均衡(Nginx)、数据库(MySQL) |
2.2.2 内存配置
服务器 | 系统内存 |
---|---|
应用服务器 | 建议16G以上 |
组件服务器 | 建议8G以上 |
2.2.3 磁盘空间
服务器 | 目录 | 配置 | 说明 |
---|---|---|---|
应用服务器1 | /usr/local | 保证至少有40G空余可用空间 | 安装Web应用,保存日志 |
应用服务器2 | /usr/local | 保证至少有40G空余可用空间 | 安装Web应用,保存日志 |
组件服务器 | /usr/local | 保证至少有100G空余可用空间 | 安装Nginx组件,安装MySQL数据库以及保存静态文件 |
2.2.4 端口准备
作用 | 组件 | 端口 | 备注 |
---|---|---|---|
负载均衡 | Nginx | 80 | 整个集群的入口端口,可修改nginx.conf自定义端口 |
Web容器 | Tomcat | 8080 | 每个Web应用的服务端口,可修改server.xml自定义端口 |
数据库服务 | MySQL | 3306 | 数据库服务的端口,可修改my.ini自定义端口 |
3 集群部署
3.1 Linux系统集群部署
搭建Nginx服务需要安装相关依赖,所以要求服务器必须可以联网。搭建服务之间需要关闭防火墙或者开放对应的端口,命令如下:
systemctl stop firewalld #关闭防火墙
firewall-cmd --zone=public --add-port=服务端口号/tcp --permanent #开放某端口
3.1.1 搭建Nginx服务
以CentOS 7.5为例,搭建单节点Nginx服务的步骤如下:
下载Nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz
安装相关依赖
yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl-devel
下载Linux版本的Nginx并解压
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -zxvf nginx-1.18.0.tar.gz
切换到nginx-1.18.0目录并执行如下命令
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --http-client-body-temp-path=/var/tmp/client \ --http-proxy-temp-path=/var/tmp/proxy \ --http-fastcgi-temp-path=/var/tmp/fastcgi \ --http-uwsgi-temp-path=/var/tmp/uwsgi \ --http-scgi-temp-path=/var/tmp/scgi \ --with-http_ssl_module \ --with-http_gzip_static_module
编译并安装,默认安装到/usr/local/nginx
make && make install
启动Nginx
/usr/local/nginx/sbin/nginx
浏览器访问该服务器IP地址或IP地址:80,结果如下图所示表示启动成功
4 Web集群运维
虽然使用命令行可以对Nginx进行各种操作,比如启动等,但是不太方便,下面介绍在 Linux 下如何设置其开机自启动。
4.1 Nginx开机自启动脚本
以CentOS7.X为例配置Nginx开机自启动脚本步骤如下:
在/lib/systemd/system/目录下创建 nginx.service文件:
vim /lib/systemd/system/nginx.service
在脚本中添加如下内容:
[Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/nginx/sbin/nginx ExecReload=/usr/nginx/sbin/nginx -s reload ExecStop=/usr/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
保存脚本文件后设置文件的执行权限:
chmod a+x /lib/systemd/system/nginx.service
配置完脚本以后,就可以使用以下命令设置开机自启动等操作了:
systemctl enable nginx.service #设置开机自启动 systemctl disable nginx.service #停止开机自启动 systemctl start nginx.service #启动 Nginx 服务 systemctl stop nginx.service #停止服务 systemctl status nginx.service #查看服务当前状态 systemctl list-units --type=service #查看所有已启动的服务
5 集群环境配置共享文件夹
UniEAP Report产品使用过程中会将报表实例对象缓存到磁盘,用于翻页、导出等操作,所以集群环境中可配置一个共享文件夹,用于放置缓存对象。
可以使用nfs或者samba配置共享文件夹,本文使用nfs为例做介绍
1.安装 NFS 服务器和客户端
# 安装 NFS 服务器
sudo yum install nfs-utils
# 安装 NFS 客户端(如果需要挂载共享目录)
sudo yum install nfs-utils
2.配置 NFS 共享目录
#创建共享目录
sudo mkdir -p /mnt/nfs_share
#设置目录权限,确保其他主机可以访问该目录
sudo chmod 777 /mnt/nfs_share
#指定哪些客户端可以访问该目录
sudo vi /etc/exports
#添加以下行,以允许 192.168.1.0/24 网络中的所有主机读写该目录
/mnt/share 192.168.1.0/24(rw,sync,no_subtree_check)
#rw:表示可读写。
#sync:表示同步写操作,保证数据一致性。
#no_subtree_check:禁用子目录检查,这通常能提高性能。
#重新导出共享目录
sudo exportfs -a
#启动并启用nfs
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
#如果开启防火墙请添加防火墙规则
# CentOS 7/8 使用 firewalld
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload
3.客户端挂载共享目录
#确保客户端机器安装nfs客户端
sudo yum install nfs-utils
# 创建挂载点
sudo mkdir -p /mnt/nfs_mount
# 挂载 NFS 共享目录
sudo mount -t nfs 192.168.1.100:/mnt/nfs_share /mnt/nfs_mount
4.测试
ls /mnt/nfs_mount 能否看到共享目录中的文件
6 Web集群下Report配置
Web集群下Report配置主要涉及到对共享文件夹的配置,任务调度配置。
6.1 共享文件夹设置
在report/WEB-INF/conf/unieap/report/report-engine-config.properties文件中,修改如下配置。
report_temp_file_path=<</home/share/temp/
6.2 将文件拷贝到共享文件夹中
将报表内置的模板与图片拷贝到共享文件夹中。
mv report/unieap/pages/report/temp/image /home/share/temp/
mv report/unieap/pages/report/temp/templates /home/share/temp/
6.3 配置任务调度模块
在report/WEB-INF/conf/unieap/newscheduler/dataviz-schedular.properties中修改如下配置。
org.quartz.jobStore.isClustered = true
这样可以避免同一个任务被执行多次。
6.4 Nginx相关配置
本文给出三节点的负载均衡配置,即一个节点配置Nginx服务用于负载均衡,另外两个节点配置Tomcat服务。示例节点的配置信息如下:
服务器IP | 作用 | 端口号 |
---|---|---|
10.4.53.105 | Nginx负载均衡 | 80 |
10.4.53.89 | Tomcat应用服务 | 8081 |
10.4.53.128 | Tomcat应用服务 | 8081 |
精简后的nginx.conf配置如下:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream report-service {
server 10.4.53.128:8081;
server 10.4.53.89:8081;
ip_hash;
}
server {
listen 80;
server_name 10.4.53.105;
location / {
proxy_pass http://report-service;
}
}
}
server表示一个Web服务,监听着80端口,用于接收用户请求,当用户输入 http://10.4.53.105/report 时,请求会被转发给Tomcat节点,其中 http://report-service 是自定义的域名,report-service和upstream中的report-service名称必须相同,这样才能把请求转发给128或89节点。