1. 安装redis
参考官方文档:https://redis.io/docs/install/install-redis/
安装过程
1. 下载 Redis
下载其他版本:http://download.redis.io/releases/
wget http://download.redis.io/releases/redis-7.2.3.tar.gz
2. 下载完成后解压
# 解压
sudo tar -zxvf redis-7.2.3.tar.gz
sudo mv redis-7.2.3 /usr/local/redis/
3. 编译和安装 Redis
cd /usr/local/redis/
sudo make PREFIX=/usr/local/redis install
4. 创建用户和组
sudo groupadd redis
sudo useradd -r -g redis -s /bin/false redis
5. 更改文件所属
sudo chown -R redis:redis /usr/local/redis/
sudo chmod -R 777 /usr/local/redis/
6. 修改配置
port 6379
7. 启动 Redis 服务器
./bin/redis-server
8. 验证 Redis 是否正常运行
# 新窗口打开
./bin/redis-cli
9. 配置开机自启
9.1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/redis.service
9.2. 在服务文件中添加配置
[Unit]
Description=Redis
After=network.target
[Service]
#User=redis
#Group=redis
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
9.3. 重载 systemd 并启用服务
sudo systemctl daemon-reload
sudo systemctl enable redis.service
sudo systemctl status redis.service
如果输出中显示服务处于 active (running) 状态,则表示已成功启用开机启动。
如果启动失败,查看日志解决对应问题就行
sudo journalctl -u redis.service
# 上下箭头换行,PAGEUP,PAGEDOWN 翻页,HOME 首页,END 尾页
9.4. 验证配置
执行以下命令来验证服务是否已成功配置为开机启动:
sudo systemctl is-enabled redis
异常处理
1. redis 启动时提示: Failed to write PID file: Permission denied
原因: Redis 服务器在尝试写入 PID 文件时遇到了权限被拒绝的问题
解决:
查看 Redis 配置文件中的 pidfile 选项,该选项指定了 PID 文件的路径和文件名。
默认为:pidfile /var/run/redis_6379.pid
修改改文件权限,使 redis 具有执行权限
# 如果文件不存在需要先创建
sudo touch /var/run/redis_6379.pid
sudo chown redis:redis /var/run/redis_6379.pid
# 重启redis生效
sudo systemctl restart redis
2. 安装JAVA
参考官方文档:https://nacos.io/docs/v2/quickstart/quick-start/
安装过程
1. 下载 JDK
下载地址:https://www.oracle.com/java/technologies/downloads/
或者将本地的 jdk 推送到服务器上去:
scp example.txt root@123.456.789.0:/home/username
2. 下载完成后解压
sudo tar -zxvf jdk-8u401-linux-x64.tar.gz
sudo mv jdk1.8.0_401/ /usr/local/
3. 设置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_401
export PATH=$PATH:$JAVA_HOME/bin
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# 重新加载您的 shell 配置文件,使更改生效
source ~/.bashrc
source ~/.bash_profile
4. 验证安装
java -version
3. 安装MySQL
安装过程
1. 下载 mysql
访问MySQL官方网站(https://dev.mysql.com/downloads/mysql/)并下载适用于Linux的MySQL 8解压版。选择与您的Linux版本和架构相对应的版本。
下载最新版本:https://dev.mysql.com/downloads/mysql/
下载其他版本:https://downloads.mysql.com/archives/community/
# 下载MySQL 8解压版并解压
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz
2. 解压
# 解压
tar -xvf mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz
# 解压后的文件夹:mysql-8.0.35-linux-glibc2.28-x86_64
# 移动解压后的文件到/usr/local/mysql
sudo mv mysql-8.0.35-linux-glibc2.28-x86_64 /usr/local/mysql
3. 创建MySQL用户和组
# 创建MySQL用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
4. 初始化MySQL数据目录
这里会在控制台打印 mysql 的临时密码,后面需要用到
# 初始化MySQL数据目录
cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# A temporary password is generated for root@localhost: IHrX7=m5GcDd
在执行mysqld --initialize时,MySQL会尝试创建数据目录并生成初始密码。通常,这个命令需要以root权限或者使用sudo来执行,以确保对目录的写入权限。
5. 启动MySQL服务
# 启动MySQL服务
sudo bin/mysqld_safe --user=mysql &
6. 设置MySQL环境变量
.bashrc
和 .bash_profile
都要设置
export PATH=$PATH:/usr/local/mysql/bin
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# 重新加载您的 shell 配置文件,使更改生效
source ~/.bashrc
source ~/.bash_profile
7. 登录并更改临时密码
# 登录MySQL并更改临时密码
mysql -u root -p # 使用临时密码登陆
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
# 立即生效
FLUSH PRIVILEGES;
exit
8. 创建新用户,授权远程访问权限
#创建新用户
mysql -uroot -p
# 输入你的密码进入mysql
# 创建账号,指定该用户可以从任何主机(%)连接到 MySQL 服务器
CREATE USER 'qfl'@'%' IDENTIFIED BY '密码';
# 授予用户所有数据库和所有表的所有操作权限,并允许授权给其他用户
GRANT ALL PRIVILEGES ON *.* TO 'qfl'@'%' WITH GRANT OPTION;
# 立即生效
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES: 这部分指示授予用户 qfl 所有权限。这包括查询、插入、更新、删除等对所有数据库和所有表的操作权限。
ON *.*: 这部分指示权限适用于所有数据库()和所有表(),因此 qfl 用户将具有对所有数据库和所有表的访问权限。
TO 'qfl'@'%': 这部分指示将授权应用于名为 qfl 的用户,并且该用户可以从任何主机(%)连接到 MySQL 服务器。
测试使用 qfl 账号登录成功:
9. 配置开机自启
要配置 MySQL 在 Linux 启动时自动启动,您可以创建一个 Systemd 服务单元。以下是一个示例 Systemd 服务单元文件的创建步骤:
9.1. 创建 Systemd 服务单元文件
sudo vim /etc/systemd/system/mysql.service
9.2. 在服务文件中添加配置
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin -u root -p shutdown
Restart=always
[Install]
WantedBy=multi-user.target
9.3. 重载 systemd 并启用服务
sudo systemctl daemon-reload
sudo systemctl enable mysql.service
sudo systemctl status mysql.service
如果输出中显示服务处于 active (running) 状态,则表示已成功启用开机启动。
如果启动失败,查看日志解决对应问题就行
sudo journalctl -u mysql.service
# 上下箭头换行,PAGEUP,PAGEDOWN 翻页,HOME 首页,END 尾页
9.4. 验证配置
执行以下命令来验证服务是否已成功配置为开机启动:
sudo systemctl is-enabled mysql
错误处理
1. 在新窗口执行mysql -uroot -p 失败,报Command 'mysql' not found, but can be installed with:
如果在新窗口执行 mysql -uroot -p
仍然报错 Command 'mysql' not found, but can be installed with:
,这可能意味着 mysql
命令仍然无法被识别。
这通常是由于以下几个原因之一引起的:
- PATH 设置问题:重新加载 shell 配置文件后,
/usr/local/mysql/bin
目录应该已经添加到了 PATH 中。然而,可能由于某些原因,该目录没有正确添加到 PATH 中。您可以通过在终端中运行echo $PATH
命令来检查 PATH 是否包含了/usr/local/mysql/bin
目录。 - 权限问题:检查
/usr/local/mysql/bin/mysql
文件是否具有执行权限。您可以使用以下命令来检查:
如果没有执行权限,您可以使用以下命令添加执行权限:
sudo chmod +x /usr/local/mysql/bin/mysql
- 文件位置错误:可能
mysql
客户端不在/usr/local/mysql/bin
目录中。请确保mysql
客户端文件确实存在于您指定的路径中,并且名称正确。 - 安装问题:如果您确定
mysql
已经正确安装,并且路径设置也正确,但仍然无法识别mysql
命令,可能是因为 MySQL 客户端没有正确安装。您可以尝试重新安装 MySQL 客户端并确保它被正确地添加到 PATH 中。
解决:
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bashrc
4. 安装Kibana
参考官方文档:https://www.elastic.co/guide/en/kibana/7.17/targz.html
安装过程
1. 下载 Kibana
需要和 elasticSearch 版本保持一致
下载最新版本:https://www.elastic.co/cn/downloads/kibana
下载其他版本:https://www.elastic.co/cn/downloads/past-releases/kibana-7-17-13
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.17.13-linux-x86_64.tar.gz
2. 下载完成后解压
# 解压
sudo tar -zxvf kibana-7.17.13-linux-x86_64.tar.gz
sudo mv kibana-7.17.13-linux-x86_64 /usr/local/kibana
/usr/local/kibana` 被标记为 `$KIBANA_HOME
3. 创建用户和组
sudo groupadd kibana
sudo useradd -r -g kibana -s /bin/false kibana
4. 创建日志及数据存储目录
sudo mkdir -p /usr/local/kibana/log
sudo touch /usr/local/kibana/log/kibana.log
5. 更改文件所属
sudo chown -R kibana:kibana /usr/local/kibana/
sudo chmod -R 777 /usr/local/kibana/
6. 设置 kibana 配置
修改$KIBANA_HOME/config/kibana.yml
文件
server.port: 5601
server.host: "0.0.0.0"
server.name: "aliyun-ubuntu"
kibana.index: ".kibana"
elasticsearch.username: "kibana_system"
elasticsearch.password: "密码"
logging.dest: /usr/local/kibana/log/kibana.log
logging.verbose: true
i18n.locale: "zh-CN"
7. 启动 kibana
cd /usr/local/kibana
./bin/kibana
启动完成后浏览器输入 http://localhost:5601/ 即可访问
使用 elastic 账号登录:
8. 配置开机自启
8.1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/kibana.service
8.2. 在服务文件中添加配置
[Unit]
Description=Kibana
After=network.target
[Service]
Type=simple
User=kibana
Group=kibana
ExecStart=/usr/local/kibana/bin/kibana
Restart=on-failure
[Install]
WantedBy=multi-user.target
8.3. 重载 systemd 并启用服务
sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana
如果输出中显示服务处于 active (running) 状态,则表示已成功启用开机启动。
如果启动失败,查看日志解决对应问题就行
sudo journalctl -u kibana.service
# 上下箭头换行,PAGEUP,PAGEDOWN 翻页,HOME 首页,END 尾页
8.4. 验证配置
执行以下命令来验证服务是否已成功配置为开机启动:
sudo systemctl is-enabled kibana
5. 安装ElasticSearch
参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/targz.html
安装过程
1. 下载 elastic
下载最新版本:https://www.elastic.co/cn/downloads/elasticsearch
下载其他版本:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.13-linux-x86_64.tar.gz
2. 下载完成后解压
# 解压
sudo tar -zxvf elasticsearch-7.17.13-linux-x86_64.tar.gz
sudo mv elasticsearch-7.17.13 /usr/local/elasticsearch
/usr/local/elasticsearch
被标记为 $ES_HOME
3. 创建用户和组
sudo groupadd elasticsearch
sudo useradd -r -g elasticsearch -s /bin/false elasticsearch
4. 创建日志及数据存储目录
sudo mkdir -p /usr/local/elasticsearch/data
sudo mkdir -p /usr/local/elasticsearch/logs
5. 更改文件所属
sudo chown -R elasticsearch:elasticsearch /usr/local/elasticsearch/
sudo chmod -R 777 /usr/local/elasticsearch/
6. 设置 es 配置
修改$ES_HOME/config/elasticsearch.yml
文件
cluster.name: notebook-ubuntu
node.name: notebook-ubuntu-node
path.data: /usr/local/elasticsearch/data
#
# Path to log files:
#
path.logs: /usr/local/elasticsearch/logs
network.host: 0.0.0.0
#
# By default Elasticsearch listens for HTTP traffic on the first free port it
# finds starting at 9200. Set a specific HTTP port here:
#
http.port: 9200
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
cluster.initial_master_nodes: ["notebook-ubuntu-node"]
7. 启动 es
cd /usr/local/elasticsearch
./bin/elasticsearch
启动完成后浏览器输入 http://localhost:9200/ 即可访问
8. 配置开机自启
8.1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/elasticsearch.service
8.2. 在服务文件中添加配置
[Unit]
Description=Elasticsearch
After=network.target
[Service]
Type=simple
User=elasticsearch
Group=elasticsearch
LimitNOFILE=65535 # 普通用户默认最多打开4096个文件,这里设置为65535
ExecStart=/usr/local/elasticsearch/bin/elasticsearch
Restart=on-failure
[Install]
WantedBy=multi-user.target
8.3. 重载 systemd 并启用服务
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl status elasticsearch
如果输出中显示服务处于 active (running) 状态,则表示已成功启用开机启动。
如果启动失败,查看日志解决对应问题就行
sudo journalctl -u elasticsearch.service
# 上下箭头换行,PAGEUP,PAGEDOWN 翻页,HOME 首页,END 尾页
8.4. 验证配置
执行以下命令来验证服务是否已成功配置为开机启动:
sudo systemctl is-enabled elasticsearch
9. 开启安全认证
参考文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.16/security-minimal-setup.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html#node-certificates
集群模式启动时,需要配置传输加密,否则无法开启 X-Pack 配置。
9.1. 创建证书
https://blog.csdn.net/Solyutian/article/details/84033765
./bin/elasticsearch-certutil ca
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
9.2. 复制证书到 config/certs/ 目录下
复制证书到 $ES_HOME/config/certs/
目录下
mkdir -p ./config/certs
cp elastic-certificates.p12 ./config/certs
9.3. 修改配置文件
修改 $ES_HOME/config/elasticsearch.yml
,添加如下内容
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: erts/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
9.4. 启动 es
如果之前已启动,则需要重启 es
./bin/elasticsearch
9.5. 设置密码
在新窗口中执行命令,会在控制台中输出账号及密码
# 自动生成密码
./bin/elasticsearch-setup-passwords auto
9.6. 浏览器密码登录
设置完成之后,浏览器打开 http://localhost:9200/ 时需要登录:
对应账号为:elastic
10. 安装 ik 分词器
10.1. 下载 ik 分词器
下载地址:https://github.com/infinilabs/analysis-ik/releases?page=1 注意需要下载第一个 zip,而不是下面的源码
并且需要下载 elasticSearch 相同版本的 ik 分词器
10.2. 创建 ik 文件夹
进入 elasticSearch 安装目录下的 plugins 文件夹,创建 ik 文件夹
cd /usr/local/elasticsearch/plugins
mkdir ik
10.3. 解压 ik 分词器
将下载的 ik 分词器解压至/usr/local/elasticsearch/plugins/ik
unzip elasticsearch-analysis-ik-7.17.14.zip
10.4. 修改 es 版本(进 ik 版本与 es 版本不一致时需要)
修改 ik 文件夹下的plugin-descriptor.properties
文件,将最后的elasticsearch.version
改成实际安装的版本即可
elasticsearch.version=7.17.13
异常处理
1. 启动 es 报错:Future versions of Elasticsearch will require Java 11
启动时报错:
warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
Future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/java/jdk1.8.0_401/jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
报错的原因可以在 es 的环境配置$ES_HOME/bin/elasticsearch-env.bat
找到:
# now set the path to java
if [ ! -z "$ES_JAVA_HOME" ]; then
JAVA="$ES_JAVA_HOME/bin/java"
JAVA_TYPE="ES_JAVA_HOME"
elif [ ! -z "$JAVA_HOME" ]; then
# fallback to JAVA_HOME
echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2
JAVA="$JAVA_HOME/bin/java"
JAVA_TYPE="JAVA_HOME"
else
# use the bundled JDK (default)
if [ "$(uname -s)" = "Darwin" ]; then
# macOS has a different structure
JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
else
JAVA="$ES_HOME/jdk/bin/java"
fi
JAVA_TYPE="bundled JDK"
fi
原因是 es7要求最低的java版本是 11并且自身携带jdk,提示安装的 jdk 版本 jdk8,不满足要求
将第七行中的 Java 目录设置为 es7 中自带的 jdk11 目录就可以了。
# now set the path to java
if [ ! -z "$ES_JAVA_HOME" ]; then
JAVA="$ES_JAVA_HOME/bin/java"
JAVA_TYPE="ES_JAVA_HOME"
elif [ ! -z "$JAVA_HOME" ]; then
# fallback to JAVA_HOME
echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2
JAVA="$ES_HOME/jdk/bin/java"
JAVA_TYPE="JAVA_HOME"
else
# use the bundled JDK (default)
if [ "$(uname -s)" = "Darwin" ]; then
# macOS has a different structure
JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
else
JAVA="$ES_HOME/jdk/bin/java"
fi
JAVA_TYPE="bundled JDK"
fi
2. 启动 es 报错:max virtual memory areas vm.max_map_count [65530] is too low
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:虚拟内存区域的数量(vm.max_map_count)太小,不足以支持启动 es
解决:
- 打开 /etc/sysctl.conf 文件以编辑。
- 添加或修改以下行,将 vm.max_map_count 设置为至少262144:
vm.max_map_count=262144
- 保存并关闭文件。
- 执行以下命令使更改生效:
sudo sysctl -p
这将重新加载sysctl.conf中的配置并应用更改。
3. 启动 es 报错:io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: No available authentication scheme
错误信息:
io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: No available authentication scheme
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:499) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:689) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:652) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) [netty-transport-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) [netty-common-4.1.94.Final.jar:4.1.94.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.94.Final.jar:4.1.94.Final]
at java.lang.Thread.run(Thread.java:1623) [?:?]
Caused by: javax.net.ssl.SSLHandshakeException: No available authentication scheme
at sun.security.ssl.Alert.createSSLException(Alert.java:130) ~[?:?]
at sun.security.ssl.Alert.createSSLException(Alert.java:117) ~[?:?]
at sun.security.ssl.TransportContext.fatal(TransportContext.java:365) ~[?:?]
at sun.security.ssl.TransportContext.fatal(TransportContext.java:321) ~[?:?]
at sun.security.ssl.TransportContext.fatal(TransportContext.java:312) ~[?:?]
at sun.security.ssl.CertificateMessage$T13CertificateProducer.onProduceCertificate(CertificateMessage.java:967) ~[?:?]
at sun.security.ssl.CertificateMessage$T13CertificateProducer.produce(CertificateMessage.java:956) ~[?:?]
at sun.security.ssl.SSLHandshake.produce(SSLHandshake.java:437) ~[?:?]
at sun.security.ssl.ClientHello$T13ClientHelloConsumer.goServerHello(ClientHello.java:1245) ~[?:?]
at sun.security.ssl.ClientHello$T13ClientHelloConsumer.consume(ClientHello.java:1181) ~[?:?]
at sun.security.ssl.ClientHello$ClientHelloConsumer.onClientHello(ClientHello.java:839) ~[?:?]
at sun.security.ssl.ClientHello$ClientHelloConsumer.consume(ClientHello.java:800) ~[?:?]
at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:393) ~[?:?]
at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:469) ~[?:?]
at sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1273) ~[?:?]
at sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1260) ~[?:?]
at java.security.AccessController.doPrivileged(AccessController.java:714) ~[?:?]
at sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1205) ~[?:?]
at io.netty.handler.ssl.SslHandler.runDelegatedTasks(SslHandler.java:1559) ~[netty-handler-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1405) ~[netty-handler-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1246) ~[netty-handler-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1295) ~[netty-handler-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468) ~[netty-codec-4.1.94.Final.jar:4.1.94.Final]
... 16 more
原因:es 以集群方式启动,且开启了X-Pack 安全性配置,并且未设置加密通信。
解决:
参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/configuring-tls.html#node-certificates
- 创建证书颁发机构
./bin/elasticsearch-certutil ca
- 生成证书和私钥
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- 在config目录创建certs目录
mkdir ./config/certs
- 拷贝p12文件至certs目录
cp elastic-certificates.p12 ./config/certs/
- 加密集群中节点之间的通信
修改$ES_HOME/config/elasticsearch.yml
文件,添加如下内容
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
4. 设置开机启动时报错:can not run elasticsearch as root
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
原因:elasticSearch 禁止了以 root 身份启动,所以启动时要切换到其他身份,设置开机启动时需要指定 user 和 Group
解决:查看上方 elasticSearch.service 文件
评论区