集群部署

集群部署在单点部署基础上进行。

1 部署架构

集群架构可简单概括为负载均衡+缓存中间件+应用服务器+文件存储服务+数据库,本文选择了目前Web集群架构中最为流行的解决方案Nginx+Redis+Tomcat+MinIO+MySQL作为DataViz产品集群部署的最佳实践方案。其中,Tomcat作为常用的Web应用服务器,MySQL作为常用的数据库,在这里不做赘述。其服务架构图如下:

000

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服务的步骤如下:

  1. 下载Nginx

    wget http://nginx.org/download/nginx-1.18.0.tar.gz
    
  2. 安装相关依赖

    yum install gcc
    yum install pcre-devel
    yum install zlib zlib-devel
    yum install openssl openssl-devel
    
  3. 下载Linux版本的Nginx并解压

    wget http://nginx.org/download/nginx-1.18.0.tar.gz
    
    tar -zxvf nginx-1.18.0.tar.gz
    
  4. 切换到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
    
  5. 编译并安装,默认安装到/usr/local/nginx

    make && make install
    
  6. 启动Nginx

    /usr/local/nginx/sbin/nginx
    
  7. 浏览器访问该服务器IP地址或IP地址:80,结果如下图所示表示启动成功

    000

    3.1.2 搭建Redis服务

​ 搭建单节点Redis服务的步骤如下:

  1. 执行以下命令下载redis

    cd /usr/local
    wget http://download.redis.io/releases/redis-6.2.6.tar.gz
    

    也可以到官网下载,然后上传到/usr/local/

  2. 安装依赖

    yum install gcc-c++
    
  3. 解压并安装

    tar -zxvf redis-6.2.6.tar.gz
    
    cd redis-6.2.6
    
    make
    

    出现如下信息表示安装完成 000

  4. 启动服务,

    src/redis-server
    

    出现如下信息表示启动成功 000

    根据上图中的PID,结束进程

    kill -9 57577
    
  5. 修改redis.conf配置文件,让服务允许远程访问,并可以后台运行

    vi redis.conf
    

    修改以下配置,这里给出的知识最简单的配置方式,可以根据需要进行配置

    daemonize yes # 运行后台启动
    bind 0.0.0.0 #允许远程IP访问
    requirepass root #密码为root
    protected-mode no #允许远程客户端访问
    
  6. 启动服务,服务后台运行

    src/redis-server ./redis.conf
    

3.1.3 搭建MinIO服务

搭建单节点MinIO的步骤如下:

  1. 下载MinIO

    wget https://dl.min.io/server/minio/release/linux-amd64/minio
    
  2. 创建MinIO数据存储目录

    mkdir /usr/local/minio/data -p
    
  3. 启动MinIO

    ./minio server /usr/local/minio/data
    
  4. 看到如下信息表示启动成功,红色部分表示启动的账号密码是默认的

    000

3.2 Windows系统集群部署

由于Nginx、Redis以及MinIO对Windows系统的支持不够完善,所以在Windows系统中无法搭建集群,只能搭建单节点服务。所以如果想使用集群服务的话,建议使用Linux系统搭建集群服务。

3.2.1 搭建Nginx服务

搭建单节点Nginx服务的步骤如下:

  1. 下载Nginx,转至官方页面进行下载:http://nginx.org/

  2. 安装Nginx,将下载好的Nginx压缩包解压至指定目录,目录结构如下:

    000

  3. 启动Nginx,进入Nginx目录,并使用Windows+R 输入cmd进行以下操作命令:

    start nginx       #启动 nginx
    nginx -s reload   #重启 nginx
    nginx -s stop     #快速停止 nginx
    nginx -s quit     #完整有序地停止 nginx
    
  4. 在浏览器的地址栏输入"http://ip:port",例如:http://localhost:80,出现如下界面即为安装成功。

    000

3.2.2 搭建Redis服务

搭建单节点Redis服务的步骤如下:

  1. 下载Redis,在 GitHub上可以下载 Windows 系统对应版本,下载地址:https://github.com/MicrosoftArchive/redis/releases ,可以选择最新的版本下载,mis 文件是微软安装版、zip 文件是解压版,这里我们下载 zip 包,解压即可使用。如果不能上 GitHub 的用户,也可以联系产品团队l-rui@neusoft.com获取。

  2. 安装Redis,在 D 盘新建个文件夹,例如D:\Redis,将 Redis-x64-3.2.100.zip 里的文件解压到该文件夹。

  3. 修改配置文件,编辑配置文件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,端口可任意设置
    
  4. 启动Redis,cmd 进入 Redis 目录>进入redis-server.exe redis.windows.conf 下,出现以下内容,则代表启动成功:

    000

3.2.3 搭建MinIO服务

搭建单节点MinIO服务的步骤如下:

  1. 下载MinIO,下载地址是https://dl.min.io/server/minio/release/windows-amd64/minio.exe

  2. 在指定路径比如D盘创建MinIO的文件目录minio-data

  3. 编写启动脚本run.bat,启动MINIO_ACCESS_KEY和MINIO_SECRET_KEY分别是用户名和密码

    set MINIO_ACCESS_KEY=用户名
    set MINIO_SECRET_KEY=密码
    minio.exe server --address :9000 D:\minio-data
    
  4. 在MinIO文件所在目录下打开命令行,执行run.bat

  5. 如果界面出现以下信息,表示启动成功:

    000

4 Web集群运维

虽然使用命令行可以对Nginx、Redis、MinIO进行各种操作,比如启动等,但是不太方便,下面介绍在 Linux 下如何设置其开机自启动。

4.1 Nginx开机自启动脚本

以CentOS7.X为例配置Nginx开机自启动脚本步骤如下:

  1. 在/lib/systemd/system/目录下创建 nginx.service文件:

    vim /lib/systemd/system/nginx.service
    
  2. 在脚本中添加如下内容:

    [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
    
  3. 保存脚本文件后设置文件的执行权限:

    chmod a+x /lib/systemd/system/nginx.service
    
  4. 配置完脚本以后,就可以使用以下命令设置开机自启动等操作了:

    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开机自启动脚本步骤如下:

  1. 在/lib/systemd/system/目录下创建redis.service文件

  2. 在脚本中添加如下内容:

    [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
    
  3. 设置文件的执行权限:

    chmod a+x /lib/systemd/system/redis.service
    
  4. 配置完脚本以后,就可以使用以下命令设置开机自启动等操作了:

    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开机自启动脚本步骤如下:

  1. 在/lib/systemd/system/目录下创建minio.service文件

  2. 在脚本中添加如下内容:

    [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
    
  3. 设置文件的执行权限:

    chmod a+x /lib/systemd/system/minio.service
    
  4. 配置完脚本以后,就可以使用以下命令设置开机自启动等操作了:

    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文件,把其中注释掉的内容全部解除注释即可,如下图: 8

其中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节点。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""