集群部署
集群部署在单点部署基础上进行。
1 部署架构
集群架构可简单概括为负载均衡+缓存中间件+应用服务器+文件存储服务+数据库,本文选择了目前Web集群架构中最为流行的解决方案Nginx+Redis+Tomcat+MinIO+MySQL作为DataViz产品集群部署的最佳实践方案。其中,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)、缓存服务器(Redis)、文件存储服务器(MinIO)、数据库(MySQL) |
2.2.2 内存配置
服务器 | 系统内存 |
---|---|
应用服务器 | 建议16G以上 |
组件服务器 | 建议8G以上 |
2.2.3 磁盘空间
服务器 | 目录 | 配置 | 说明 |
---|---|---|---|
应用服务器1 | /usr/local | 保证至少有40G空余可用空间 | 安装Web应用,保存日志 |
应用服务器2 | /usr/local | 保证至少有40G空余可用空间 | 安装Web应用,保存日志 |
组件服务器 | /usr/local | 保证至少有100G空余可用空间 | 安装Nginx、Redis、MinIO等组件,安装MySQL数据库以及保存静态文件 |
2.2.4 端口准备
作用 | 组件 | 端口 | 备注 |
---|---|---|---|
负载均衡 | Nginx | 80 | 整个集群的入口端口,可修改nginx.conf自定义端口 |
Web容器 | Tomcat | 8080 | 每个Web应用的服务端口,可修改server.xml自定义端口 |
缓存服务 | Redis | 6379 | 缓存服务的端口,可修改redis.conf自定义端口 |
数据库服务 | MySQL | 3306 | 数据库服务的端口,可修改my.ini自定义端口 |
文件存储服务 | MinIO | 9000 | 文件存储服务的端口,可在启动命令行中自定义端口 |
3 集群部署
3.1 Linux系统集群部署
搭建Nginx服务和Redis需要安装相关依赖,所以要求服务器必须可以联网。搭建服务之间需要关闭防火墙或者开放对应的端口,命令如下:
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,结果如下图所示表示启动成功
3.1.2 搭建Redis服务
搭建单节点Redis服务的步骤如下:
执行以下命令下载redis
cd /usr/local wget http://download.redis.io/releases/redis-6.2.6.tar.gz
也可以到官网下载,然后上传到/usr/local/
安装依赖
yum install gcc-c++
解压并安装
tar -zxvf redis-6.2.6.tar.gz
cd redis-6.2.6
make
出现如下信息表示安装完成
启动服务,
src/redis-server
出现如下信息表示启动成功
根据上图中的PID,结束进程
kill -9 57577
修改redis.conf配置文件,让服务允许远程访问,并可以后台运行
vi redis.conf
修改以下配置,这里给出的知识最简单的配置方式,可以根据需要进行配置
daemonize yes # 运行后台启动 bind 0.0.0.0 #允许远程IP访问 requirepass root #密码为root protected-mode no #允许远程客户端访问
启动服务,服务后台运行
src/redis-server ./redis.conf
3.1.3 搭建MinIO服务
搭建单节点MinIO的步骤如下:
下载MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/minio
创建MinIO数据存储目录
mkdir /usr/local/minio/data -p
启动MinIO
./minio server /usr/local/minio/data
看到如下信息表示启动成功,红色部分表示启动的账号密码是默认的
3.2 Windows系统集群部署
由于Nginx、Redis以及MinIO对Windows系统的支持不够完善,所以在Windows系统中无法搭建集群,只能搭建单节点服务。所以如果想使用集群服务的话,建议使用Linux系统搭建集群服务。
3.2.1 搭建Nginx服务
搭建单节点Nginx服务的步骤如下:
下载Nginx,转至官方页面进行下载:http://nginx.org/
安装Nginx,将下载好的Nginx压缩包解压至指定目录,目录结构如下:
启动Nginx,进入Nginx目录,并使用Windows+R 输入cmd进行以下操作命令:
start nginx #启动 nginx nginx -s reload #重启 nginx nginx -s stop #快速停止 nginx nginx -s quit #完整有序地停止 nginx
在浏览器的地址栏输入"http://ip:port",例如:http://localhost:80,出现如下界面即为安装成功。
3.2.2 搭建Redis服务
搭建单节点Redis服务的步骤如下:
下载Redis,在 GitHub上可以下载 Windows 系统对应版本,下载地址:https://github.com/MicrosoftArchive/redis/releases ,可以选择最新的版本下载,mis 文件是微软安装版、zip 文件是解压版,这里我们下载 zip 包,解压即可使用。如果不能上 GitHub 的用户,也可以联系产品团队l-rui@neusoft.com获取。
安装Redis,在 D 盘新建个文件夹,例如D:\Redis,将 Redis-x64-3.2.100.zip 里的文件解压到该文件夹。
修改配置文件,编辑配置文件redis.windows.conf,修改以下内容:
bind 127.0.0.1 ---> # bind 127.0.0.1 protected-mode yes ---> protected-mode no # requirepass foobared ---> requirepass 123456 #123456为密码可任意替换 port 6379 ---> port 7379 # 将端口改为7379,端口可任意设置
启动Redis,cmd 进入 Redis 目录>进入redis-server.exe redis.windows.conf 下,出现以下内容,则代表启动成功:
3.2.3 搭建MinIO服务
搭建单节点MinIO服务的步骤如下:
下载MinIO,下载地址是https://dl.min.io/server/minio/release/windows-amd64/minio.exe
在指定路径比如D盘创建MinIO的文件目录minio-data
编写启动脚本run.bat,启动MINIO_ACCESS_KEY和MINIO_SECRET_KEY分别是用户名和密码
set MINIO_ACCESS_KEY=用户名 set MINIO_SECRET_KEY=密码 minio.exe server --address :9000 D:\minio-data
在MinIO文件所在目录下打开命令行,执行run.bat
如果界面出现以下信息,表示启动成功:
4 Web集群运维
虽然使用命令行可以对Nginx、Redis、MinIO进行各种操作,比如启动等,但是不太方便,下面介绍在 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 #查看所有已启动的服务
4.2 Redis开机自启动脚本
以CentOS7.X为例配置Redis开机自启动脚本步骤如下:
在/lib/systemd/system/目录下创建redis.service文件
在脚本中添加如下内容:
[Unit] Description=The redis-server Process Manager After=syslog.target network.target [Service] Type=forking PIDFile=/var/run/redis_6379.pid ExecStart=/usr/local/bin/redis-server /usr/local/redis/conf/redis.conf ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID [Install] WantedBy=multi-user.target
设置文件的执行权限:
chmod a+x /lib/systemd/system/redis.service
配置完脚本以后,就可以使用以下命令设置开机自启动等操作了:
systemctl enable redis.service #设置开机自启动 systemctl disable redis.service #停止开机自启动 systemctl start redis.service #启动 Redis 服务 systemctl stop redis.service #停止服务 systemctl status redis.service #查看服务当前状态 systemctl list-units --type=service #查看所有已启动的服务
4.3 MinIO开机自启动脚本
以CentOS7.X为例配置Redis开机自启动脚本步骤如下:
在/lib/systemd/system/目录下创建minio.service文件
在脚本中添加如下内容:
[Unit] Description=The minio-server Process Manager After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/minio/minio server /minio_data ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID [Install] WantedBy=multi-user.target
设置文件的执行权限:
chmod a+x /lib/systemd/system/minio.service
配置完脚本以后,就可以使用以下命令设置开机自启动等操作了:
systemctl enable minio.service #设置开机自启动 systemctl disable minio.service #停止开机自启动 systemctl start minio.service #启动 Redis 服务 systemctl stop minio.service #停止服务 systemctl status minio.service #查看服务当前状态 systemctl list-units --type=service #查看所有已启动的服务
5 Web集群下DataViz配置
Web集群下DataViz配置主要涉及到对Redis和MinIO的配置,其中对Redis的配置包含对单节点Redis、Redis哨兵模式、Redis集群模式下的配置,对MinIO的配置无论是单节点还是集群模式下都只有一种。下面分别对Redis和MinIO的配置做详细介绍。
5.1 Redis相关配置
redis相关的配置在web.xml、applicationContext-security.xml、redis.properties文件中。
添加或者解开web.xml的注释(相关配置以注释的形式存在)以下内容:
<filter> <filter-name>springSessionRepositoryFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
applicationContext-security.xml 文件添加或者解开注释(相关配置以注释的形式存在)以下内容:
<beans:bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" />
redis.properties修改如下内容(注意 redis.mode 应与redis部署模式相匹配,以下为单点模式配置):
# 模式 0: disabled, 1: single, 2: sentinel, 3: cluster redis.mode=1 #==================redis单点模式配置================ #redis服务IP redisSingle.hostName=localhost #redis服务端口号 redisSingle.port=6379 #redis服务密码 redisSingle.password=root
5.2 MinIO相关配置
MinIO的配置比较简单,配置信息存在于internalConfig.properties文件中,MinIO的相关配置如下:
#minio相关配置
#是否启用minio
internal.minio.enabled=true
#minio服务ip
internal.minio.host=10.4.53.105
#minio服务端口
internal.minio.port=9000
#minio服务用户名
internal.minio.accessKey=minioadmin
#minio服务密码
internal.minio.secretKey=minioadmin
#自定义一个桶,可以理解为一个文件夹,用于存储图片等文件
internal.minio.bucketName=dataviz-file
5.3 后台缓存相关配置
DataViz后台使用了ehcache缓存了DataViz中的一些模型数据,集群模式下,需要让各个节点的缓存进行通信,可以通过修改配置实现。
修改dataviz-service\WEB-INF\conf\ehcache.xml文件,把其中注释掉的内容全部解除注释即可,如下图:
其中230.0.0.1不必是真实存在的一台服务器的IP地址,也可以是任意一个230开头的IP地址,4446端口也可以修改为其他端口,但要确保网络不禁止UDP协议。
5.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 dataviz-service {
server 10.4.53.128:8081;
server 10.4.53.89:8081;
}
server {
listen 80;
server_name 10.4.53.105;
location / {
proxy_pass http://dataviz-service;
}
}
}
server表示一个Web服务,监听着80端口,用于接收用户请求,当用户输入 http://10.4.53.105/dataviz-web/src/index.html 时,请求会被转发给Tomcat节点,其中 http://dataviz-service 是自定义的域名,dataviz-service和upstream中的dataviz-service名称必须相同,这样才能把请求转发给128或89节点。