# 中间件部署及常见问题

本文档部署环境为Centos7,提供了两种部署中间件方法分别为离线包部署和docker部署,可根据实际情况选择对应的部署方式。

# 问题指引

redis安装时make编译报错 项目启动报错es权限不足
es最大同时打开文件数太少 es最大线程个数太少

# 文档指引

离线包部署 docker部署

# 版本说明

中间件 版本号 是否必装 下载地址
Redis 5.0.4 点击下载
JDK 1.8.0_341 点击下载
ElasticSearch 6.8.11 点击下载
Kibana 6.8.11 点击下载
PostgreSQL 11.12 点击下载

# 离线包部署

# 部署Redis

  1. 上传离线包至服务器/usr/local目录下。

  2. 使用cd /usr/local命令进入该目录,使用tar -xzvf redis-5.0.4.tar.gz命令进行解压,解压完成之后会生成redis-5.0.4文件夹。

  3. 安装相应编译器及开发包

  yum -y install gcc-c++
  yum install zlib-devel
  yum -y install readline-devel
  1. 安装Redis
   cd ./redis-5.0.4
   make
   #PREFIX参数表示指定安装路径
   make install PREFIX=/usr/local/redis 
  1. 将原有的配置文件复制一份到新目录
cp /usr/local/redis-5.0.4/redis.conf /usr/local/redis/bin/
  1. 修改redis.config文件 修改以下参数:
#注释掉,只允许来自指定网卡的Redis请求。如果没有指定,就说明可以接受来自任意一个网卡的Redis请求
bind 127.0.0.1 --> 改成 #bind 127.0.0.1
#是否允许后台运行
daemonize no -- > 改成 daemonize yes 
#关闭保护模式
protected-mode yes  -- > 改成 protected-mode no

危险

protected-mode no 表示关闭保护模式,不建议在生产环境关闭保护模式
保护模式的生效条件:保护模式已打开且未指定bind且未指定密码,例如:

protected-mode yes // 打开保护模式
#bind 127.0.0.1 //不绑定任何网络接口
#requirepass xiaoyi //不设置密码 
  1. 启动Redis
/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
  1. 查看Redis是否启动ps -ef|grep redis
root@localhost bin]#  ps -ef|grep redis  
root      34853  0.1  0.0 153984  7628 ?        Ssl  18:19   0:00 /usr/local/bin/redis-server 127.0.0.1:6379
root      35139  0.0  0.0 112824   976 pts/2    S+   18:24   0:00 grep --color=auto redis
  1. 防火墙开放端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
gcc -v                                              #查看gcc版本
yum install -y centos-release-scl scl-utils-build   #安装scl 源
yum -y install devtoolset-9-gcc*                    #安装9版本的 gcc gcc-c++ gdb 
scl enable devtoolset-9 bash                        #临时覆盖系统原有的gcc 引用
gcc -v                                              #查看gcc版本

# 部署JDK

说明

Elasticsearch是基于Java开发是一个Java程序,运行在Jvm中,所以第一步要安装JDK
  1. 上传离线包至服务器/usr/local目录下
  2. 进入该目录,使用tar -xzvf jdk-8u341-linux-x64.tar.gz命令进行解压,解压完成之后会生成jdk1.8.0_341文件夹
  3. 设置环境变量,使用vi /etc/profile命令进入文件,在文件末尾添加以下内容
export JAVA_HOME=/usr/local/jdk1.8.0_341 #JDK所在路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
  1. 使用source /etc/profile命令,使环境变量生效
  2. 查看是否安装成功 java -version
[root@localhost local]# java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)

# 部署ElasticSearch

  1. 上传离线包至服务器/usr/local目录下

  2. 进入该目录,使用tar -xzvf elasticsearch-6.8.11.tar.gz命令进行解压,解压完成之后会生成elasticsearch-6.8.11文件夹

  3. 修改es配置文件 vi /usr/local/elasticsearch-6.8.11/config/elasticsearch.yml

# 绑定本机IP地址或直接设置为0.0.0.0
#network.host: 192.168.0.1 --> 改成 network.host: 0.0.0.0
#http.port: 9200 --> 改成 http.port: 9200
  1. 修改jvm参数,vi /usr/local/elasticsearch-6.8.11/config/jvm.options
## JVM configuration

####################################################
## IMPORTANT: JVM heap size
####################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
####################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

# 修改这里的配置,根据自身配置的内存大小进行分配,最大为32g
-Xms1g 
-Xmx1g 
  1. 创建es用户

创建用户组:groupadd es
创建用户并添加至用户组:useradd es -g es

说明

Elasticsearch默认是不允许在root用户下进行安装的,在安装之前,应创建一个用户
  1. 切换到es用户su es,进入bin目录cd /usr/local/elasticsearch-6.8.11/bin/
  2. 启动es./elasticsearch
  3. 防火墙开放端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
  1. 在浏览器输入IP地址:9200来验证elasticsearch是否配置成功,若出现以下字样说明配置成功
{
  "name" : "3CBfLD\_",
  "cluster\_name" : "elasticsearch",
  "cluster\_uuid" : "Hszg4mFkRuugIAN0golMNw",
  "version" : {
    "number" : "6.8.11",
    "build\_flavor" : "default",
    "build\_type" : "tar",
    "build\_hash" : "00bf386",
    "build\_date" : "2020-07-09T19:08:08.940669Z",
    "build\_snapshot" : false,
    "lucene\_version" : "7.7.3",
    "minimum\_wire\_compatibility\_version" : "5.6.0",
    "minimum\_index\_compatibility\_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

# 部署Kibana

  1. 上传离线包至服务器/usr/local目录下
  2. 使用cd /usr/local命令进入该目录,使用tar -xzvf kibana-6.8.11.tar.gz命令进行解压,解压完成之后会生成kibana-6.8.11-linux-x86_64文件夹
  3. 给es用户授权
chown -R es:es /usr/local/kibana-6.8.11-linux-x86_64
  1. 修改配置文件vi /usr/local/kibana-6.8.11-linux-x86_64/config/kibana.yml,修改内容如下
server.port: 5601
server.host: "0.0.0.0"
#修改为自己es的端口
elasticsearch.url: "http://localhost:9200"
  1. 启动kibana
#切换到es用户
su es
#进入bin目录
cd /usr/local/kibana-6.8.11-linux-x86_64/bin
#启动kibana
./kibana
  1. 防火墙开放端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
  1. 验证是否配置成功,在浏览器输入服务器ip地址:端口号,例如192.168.166.134:5601,如果能够加载出kibanna页面即为配置成功

# 部署PostgreSQL

  1. 上传离线包至服务器/usr/local目录下
  2. 使用cd /usr/local命令进入该目录,使用# tar -xzvf postgresql-11.12.tar.gz命令进行解压,解压完成之后会生成postgresql-11.12文件夹
  3. 安装PostgreSQL
cd ./postgresql-11.12
#PREFIX参数表示指定安装路径
./configure --prefix=/usr/local/postgresql
make && make install
  1. 创建目录data
mkdir /usr/local/postgresql/data
  1. 加入系统环境变量vi /etc/profile
    在文件最后写入如下内容:
PGHOME=/usr/local/postgresql
export PGHOME
PGDATA=/usr/local/postgresql/data
export PGDATA
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PATH

使配置文件生效source /etc/profile

  1. 增加用户postgres并赋权
adduser postgres
chown -R postgres:root /usr/local/postgresql/
  1. 初始化数据库
#切换到postgres用户
su postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data/
  1. 修改配置文件 vi /usr/local/postgresql/data/postgresql.conf,修改参数如下:
listen_addresses = '*'
port = 5432
  1. 修改配置文件vi /usr/local/postgresql/data/pg_hba.conf,在文件末尾添加如下参数:
  # 在 IPv4 local connections 区域中添加如下一行 :
  host    all             all             0.0.0.0/0            trust

危险

trust表示使用数据库和用户名就能登录,安全性低建议不要在生产环境中使用,生产环境建使用password或md5。

  1. 启动数据库pg_ctl start -l /usr/local/postgresql/log/pg_server.log
[postgres@localhost postgresql-10.11]$ pg_ctl start -l /usr/local/postgresql/log/pg_server.log
waiting for server to start.... done
server started
  1. 防火墙开放端口
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
  1. 验证部署是否成功,使用第三方工具测试连接 img.png

# docker部署

提示

JetLinks提供了很多中间件docker部署的配置文件,下方的表格提供了中间件配置文件的路径地址,可根据实际需求选择对应中间件部署

中间件 是否必须部署 文件位置
Redis jetlinks-pro/docker-compose.yml
ElasticSearch jetlinks-pro/docker-compose.yml
Kibana jetlinks-pro/docker-compose.yml
PostgreSQL jetlinks-pro/docker-compose.yml
ClickHouse jetlinks-pro/jetlinks-components/clickhouse-component/docker-compose.yml
Cassandra jetlinks-pro/jetlinks-components/cassandra-component/docker-compose.yml
InfluxDB jetlinks-pro/jetlinks-components/influxdb-component/docker-compose.yml
TDengine jetlinks-pro/jetlinks-components/tdengine-component/docker-compose.yml
ZLMediaKit jetlinks-pro/expands-components/jetlinks-media/zlm/docker-compose.yml
Kafka jetlinks-pro/expands-components/messaging-component/kafka-component/docker-compose.yml
RabbitMQ jetlinks-pro/expands-components/messaging-component/rabbitmq-component/docker-compose.yml

# 配置文件说明

version: '2'
services:
  redis:
    #镜像名
    image: redis:5.0.4
    #容器名
    container_name: jetlinks-redis
    #端口号
    ports:
      - "6379:6379"
    #卷挂载
    volumes:
      - "./data/redis:/data"
    #开启redis持久化
    command: redis-server --appendonly yes
    #docker容器时区
    environment:
      - TZ=Asia/Shanghai
  elasticsearch:
    image: elasticsearch:6.8.10
    container_name: jetlinks-elasticsearch
    environment:
      #jvm参数
      ES_JAVA_OPTS: -Djava.net.preferIPv4Stack=true -Xms1g -Xmx1g
      #对外暴露的host
      transport.host: 0.0.0.0
      #单节点
      discovery.type: single-node
      #锁定物理内存地址,防止es内存频繁交换,导致IOPS变高
      bootstrap.memory_lock: "true"
      #抑制脑裂参数
      discovery.zen.minimum_master_nodes: 1
      #单播节点
      discovery.zen.ping.unicast.hosts: elasticsearch
      TZ: Asia/Shanghai
#    volumes:
#      - ./data/elasticsearch:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"
  kibana:
    image: kibana:6.8.10
    container_name: jetlinks-kibana
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
      TZ: Asia/Shanghai
    links:
      - elasticsearch:elasticsearch
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
  postgres:
    image: postgres:11-alpine
    container_name: jetlinks-postgres
    ports:
      - "5432:5432"
    volumes:
      - "./data/postgres:/var/lib/postgresql/data"
    environment:
      #数据库密码
      POSTGRES_PASSWORD: jetlinks
      #数据库名
      POSTGRES_DB: jetlinks
      TZ: Asia/Shanghai

# 创建并运行容器

  1. docker-compose.yml文件上传到服务器/usr/local目录下,进入该目录cd ./usr/local

  2. 使用docker-compose up -d命令创建并运行容器


[root@localhost docker-compose]# docker-compose up -d
[+] Running 6/6
Container jetlinks-postgres       Started                                       1.0s
Container jetlinks-redis          Started                                       1.0s
Container jetlinks-elasticsearch  Started                                       0.9s                                                                
Container jetlinks-kibana         Started                                       6.4s       
         
  1. 查看是否创建/运行成功 docker ps -a

[root@localhost docker-compose]# docker ps -a
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                                     NAMES
045b6c06cf81   kibana:6.8.11                 "/usr/local/bin/kiba…"   35 seconds ago      Up 32 seconds   0.0.0.0:5601->5601/tcp, :::5601->5601/tcp                                                                                                                              jetlinks-ce-kibana
0399d3741730   redis:5.0.4                   "docker-entrypoint.s…"   35 seconds ago      Up 34 seconds   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp                                                                                                                              jetlinks-ce-redis
aeaf46fe55c0   elasticsearch:6.8.11          "/usr/local/bin/dock…"   35 seconds ago      Up 34 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp                                                                                   jetlinks-ce-elasticsearch
6af987ad063d   postgres:11-alpine            "docker-entrypoint.s…"   35 seconds ago      Up 34 seconds   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp                                                                                                                              jetlinks-ce-postgres

# redis安装时make编译报错

问题1

Q:若redis版本为6.0以上会出现,gcc版本和redis版本不符合的问题,在使用make编译的时候会报错 A:CentOS7默认安装的是4.8.5,而redis6.0只支持5.3以上版本,这里将gcc升级到9,安装指令如下

# 项目启动报错es权限不足

问题2

Q:启动项目源码报错,访问权限不足,报错内容如下:
Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/elasticsearch-6.8.11/config/jvm.options
	at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
	at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
	at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
	at java.nio.file.Files.newByteChannel(Files.java:361)
	at java.nio.file.Files.newByteChannel(Files.java:407)
	at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
	at java.nio.file.Files.newInputStream(Files.java:152)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:60)

A:使用chown \-R es:es /usr/local/elasticsearch\-6.8.11命令进行赋权(切换到root用户操作)

# es最大同时打开文件数太少

问题3

Q:es最大同时打开文件数太少

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

A:vi /etc/security/limits.conf,在limits.conf文件中新增以下参数


#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4
#下面两行为添加内容
*            soft    nofile          65536
*            hard    nofile          65536
# End of file

# es最大线程个数太少

问题3

Q:es最大线程个数太少
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

A:vi /etc/sysctl.conf,在sysctl.con文件末尾新增vm.max_map_count=262144参数


# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

vm.max_map_count=262144

新增完成之后使用sysctl -p命令使配置生效