侧边栏壁纸
博主头像
人生短短几个秋

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 20 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux软件安装合集

人生短短几个秋
2025-01-24 / 0 评论 / 0 点赞 / 17 阅读 / 0 字

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

image-20240708110639846

8. 验证 Redis 是否正常运行

# 新窗口打开
./bin/redis-cli

image-20240708110712131

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/

img

# 下载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 &

image-20240708111031319

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 账号登录成功:

img

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 命令仍然无法被识别。

这通常是由于以下几个原因之一引起的:

  1. PATH 设置问题:重新加载 shell 配置文件后,/usr/local/mysql/bin 目录应该已经添加到了 PATH 中。然而,可能由于某些原因,该目录没有正确添加到 PATH 中。您可以通过在终端中运行 echo $PATH 命令来检查 PATH 是否包含了 /usr/local/mysql/bin 目录。
  2. 权限问题:检查 /usr/local/mysql/bin/mysql 文件是否具有执行权限。您可以使用以下命令来检查:

如果没有执行权限,您可以使用以下命令添加执行权限:

sudo chmod +x /usr/local/mysql/bin/mysql
  1. 文件位置错误:可能 mysql 客户端不在 /usr/local/mysql/bin 目录中。请确保 mysql 客户端文件确实存在于您指定的路径中,并且名称正确。
  2. 安装问题:如果您确定 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
img

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 账号登录:

img

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

img

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/ 即可访问

img

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

img

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

img

10. 安装 ik 分词器

10.1. 下载 ik 分词器

下载地址:https://github.com/infinilabs/analysis-ik/releases?page=1 注意需要下载第一个 zip,而不是下面的源码

img

并且需要下载 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

解决:

  1. 打开 /etc/sysctl.conf 文件以编辑。
  2. 添加或修改以下行,将 vm.max_map_count 设置为至少262144:
vm.max_map_count=262144
  1. 保存并关闭文件。
  2. 执行以下命令使更改生效:
sudo sysctl -p

这将重新加载sysctl.conf中的配置并应用更改。

img

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

  1. 创建证书颁发机构
./bin/elasticsearch-certutil ca
  1. 生成证书和私钥
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
  1. 在config目录创建certs目录
mkdir ./config/certs
  1. 拷贝p12文件至certs目录
cp elastic-certificates.p12 ./config/certs/
  1. 加密集群中节点之间的通信

修改$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 文件

0

评论区