# 中间件部署及常见问题
本文档部署环境为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
上传离线包至服务器
/usr/local
目录下。使用
cd /usr/local
命令进入该目录,使用tar -xzvf redis-5.0.4.tar.gz
命令进行解压,解压完成之后会生成redis-5.0.4
文件夹。安装相应编译器及开发包
yum -y install gcc-c++
yum install zlib-devel
yum -y install readline-devel
- 安装Redis
cd ./redis-5.0.4
make
#PREFIX参数表示指定安装路径
make install PREFIX=/usr/local/redis
- 将原有的配置文件复制一份到新目录
cp /usr/local/redis-5.0.4/redis.conf /usr/local/redis/bin/
- 修改
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 //不设置密码
- 启动Redis
/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
- 查看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
- 防火墙开放端口
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- 上传离线包至服务器
/usr/local
目录下 - 进入该目录,使用
tar -xzvf jdk-8u341-linux-x64.tar.gz
命令进行解压,解压完成之后会生成jdk1.8.0_341
文件夹 - 设置环境变量,使用
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
- 使用
source /etc/profile
命令,使环境变量生效 - 查看是否安装成功
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
上传离线包至服务器
/usr/local
目录下进入该目录,使用
tar -xzvf elasticsearch-6.8.11.tar.gz
命令进行解压,解压完成之后会生成elasticsearch-6.8.11
文件夹修改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
- 修改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
- 创建es用户
创建用户组:groupadd es
创建用户并添加至用户组:useradd es -g es
说明
Elasticsearch默认是不允许在root用户下进行安装的,在安装之前,应创建一个用户- 切换到es用户
su es
,进入bin目录cd /usr/local/elasticsearch-6.8.11/bin/
- 启动es
./elasticsearch
- 防火墙开放端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
- 在浏览器输入
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
- 上传离线包至服务器
/usr/local
目录下 - 使用
cd /usr/local
命令进入该目录,使用tar -xzvf kibana-6.8.11.tar.gz
命令进行解压,解压完成之后会生成kibana-6.8.11-linux-x86_64
文件夹 - 给es用户授权
chown -R es:es /usr/local/kibana-6.8.11-linux-x86_64
- 修改配置文件
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"
- 启动kibana
#切换到es用户
su es
#进入bin目录
cd /usr/local/kibana-6.8.11-linux-x86_64/bin
#启动kibana
./kibana
- 防火墙开放端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
- 验证是否配置成功,在浏览器输入
服务器ip地址:端口号
,例如192.168.166.134:5601,如果能够加载出kibanna页面即为配置成功
# 部署PostgreSQL
- 上传离线包至服务器
/usr/local
目录下 - 使用
cd /usr/local
命令进入该目录,使用# tar -xzvf postgresql-11.12.tar.gz
命令进行解压,解压完成之后会生成postgresql-11.12
文件夹 - 安装PostgreSQL
cd ./postgresql-11.12
#PREFIX参数表示指定安装路径
./configure --prefix=/usr/local/postgresql
make && make install
- 创建目录
data
mkdir /usr/local/postgresql/data
- 加入系统环境变量
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
- 增加用户
postgres
并赋权
adduser postgres
chown -R postgres:root /usr/local/postgresql/
- 初始化数据库
#切换到postgres用户
su postgres
/usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data/
- 修改配置文件
vi /usr/local/postgresql/data/postgresql.conf
,修改参数如下:
listen_addresses = '*'
port = 5432
- 修改配置文件
vi /usr/local/postgresql/data/pg_hba.conf
,在文件末尾添加如下参数:
# 在 IPv4 local connections 区域中添加如下一行 :
host all all 0.0.0.0/0 trust
危险
trust表示使用数据库和用户名就能登录,安全性低建议不要在生产环境中使用,生产环境建使用password或md5。
- 启动数据库
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
- 防火墙开放端口
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
- 验证部署是否成功,使用第三方工具测试连接
# 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
# 创建并运行容器
将
docker-compose.yml
文件上传到服务器/usr/local
目录下,进入该目录cd ./usr/local
使用
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
- 查看是否创建/运行成功
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
命令使配置生效