Linux集群部署Elasticsearch-8.8.2

文章目录

      • 准备工作
        • 关闭三个节点的防火墙
        • 安装包准备
      • 修改系统配置
        • 添加其他用户,es不允许root启动
        • 创建安装目录并授权
        • 修改操作系统配置
      • ES集群配置
        • 配置 node-1
        • 启动 node-1
        • 启动 node-2
        • 集群启动
      • 配置安装kibana
      • 报错解决
      • 使用logstash导入数据
        • 导入csv数据

本教程采用vm虚拟机搭建,与实际物理环境可能不同,仅做参考学习

准备工作

# root登录
su root

准备至少三个节点

节点名称 节点IP
node-1 192.168.190.128
node-2 192.168.190.129
node-3 192.168.190.130

使用 ifconfig 查看ip

关闭三个节点的防火墙

# 必须关闭防火墙,否则无法正常启动集群
# 查看状态
systemctl status firewalld
# 关闭
systemctl stop firewalld

安装包准备

将 elasticsearch-8.8.2-linux-x86_64.tar.gz 分别拷贝到三个节点

修改系统配置

添加其他用户,es不允许root启动

#添加用户 zyd
useradd zyd
#设置zyd密码  密码为:zyd
passwd zyd

虚拟机有个人用户,直接使用个人用户即可,也可以额外创建es用户

创建安装目录并授权

# 创建目录
mkdir /home/es/
# 授权
chown -R zyd:zyd /home/es/

修改操作系统配置

#----------修改最大虚拟内存-------------------
vim /etc/sysctl.conf
# 尾部追加以下配置并保存
vm.max_map_count=655360
# 执行如下命令生效
sysctl -p
# 显示 vm.max_map_count = 655360 就OK了

用户最大文件描述符-非必要修改,如遇报错再修改也可

#-------修改 zyd 用户最大文件描述符------------
vim /etc/security/limits.conf 
#插入以下配置
zyd soft nofile 65536
zyd hard nofile 65536
#----------保存并退出----------------

ES集群配置

#切换用户
su zyd

解压缩

tar -zxvf elasticsearch-8.8.2-linux-x86_64.tar.gz -C /home/es/

ll可查看文件目录权限,为非root权限即可

Linux集群部署Elasticsearch-8.8.2_第1张图片

# 如果为root再授权一次即可
chown -R zyd:zyd /home/es/

配置 node-1

配置 elasticsearch.yml 【关键】

cd /home/es/elasticsearch-8.8.2/config
vim  elasticsearch.yml
# 只配置以下选项,其他不动,因为es会自行配置,我们只配置基础必须的项。否则各种坑。
# 集群名称:自定义,三个节点都必须配置为相同
cluster.name: my-application
#该节点名称:唯一不重复
node.name: node-1
# 节点属性
node.roles: [master,data]
# 数据位置
path.data: /home/es/elasticsearch-8.8.2/datas
# log位置
path.logs: /home/es/elasticsearch-8.8.2/logs
network.host: 0.0.0.0
http.port: 9200
# 其他节点ip
discovery.seed_hosts: ["192.168.190.128:9300","192.168.190.129:9300","192.168.190.130:9300"]
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

可选,根据机器内存配置 jvm.options文件

vim jvm.options
#将内存最大最小配置为4G 其他不动
-Xms4g
-Xmx4g

启动 node-1

#启动该节点并记录启动日志
cd /home/es/elasticsearch-8.8.2/bin
#启动es节点,前台启动
./elasticsearch
#正常启动,关注如下日志:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.
#生成默认用户:elastic   密码:Z8Scc-c0KGoJV3QPg++S
ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  Z8Scc-c0KGoJV3QPg++S

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  d673d6c209a69753a82ded21ccb7791aa667761619a865ca58929f3f2edb7f14
#生成kibana链接es的token,有效时间:30分钟  如果失效,往下看第五步
ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjQuMyIsImFkciI6WyIxMC4yNDguMTkwLjE3Njo5MjAwIl0sImZnciI6ImQ2NzNkNmMyMDlhNjk3NTNhODJkZWQyMWNjYjc3OTFhYTY2Nzc2MTYxOWE4NjVjYTU4OTI5ZjNmMmVkYjdmMTQiLCJrZXkiOiI4czY0UFlRQkEyYkIza3RQYnJ3Mjp0amx1ZzNaVFNHS2dPbURScW5wVXpRIn0=
#生成es其他节点加入该集群的token,有效时间:30分钟  如果失效,往下看第五步
ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjQuMyIsImFkciI6WyIxMC4yNDguMTkwLjE3Njo5MjAwIl0sImZnciI6ImQ2NzNkNmMyMDlhNjk3NTNhODJkZWQyMWNjYjc3OTFhYTY2Nzc2MTYxOWE4NjVjYTU4OTI5ZjNmMmVkYjdmMTQiLCJrZXkiOiI5TTY0UFlRQkEyYkIza3RQYnJ3NDp6VTByVFp3bVR3S1R4MUk5TzRNVS1nIn0=

  If you're running in Docker, copy the enrollment token and run:
  `docker run -e "ENROLLMENT_TOKEN=" docker.elastic.co/elasticsearch/elasticsearch:8.8.2`
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#启动后,ES会自动配置集群配置、安全配置,并追加到elasticsearch.yml文件中
#ssl证书等配置,生成到config/certs目录中。
#后续节点加入集群,会自动同步该节点的配置,不要人工手动配置。

es安全访问需要输入密码,这里为了方便我们取消xpack.security

重新打开elasticsearch.yml会发现结尾多了几行,我们把这两个位置改成false。

xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

Linux集群部署Elasticsearch-8.8.2_第2张图片

#启动该节点并记录启动日志
cd /home/es/elasticsearch-8.8.2/bin
#启动es节点,后台启动
./elasticsearch -d
# 关闭应用
# 前台界面直接 ctrl+C
# 后台关闭使用 kill -9
# 1,找到应用pid
ps -ef | grep elasticsearch
# 2,kill关闭
kill -9 12315

启动 node-2

配置

基础配置与配置node-1相同

su zyd
cd /home/es/elasticsearch-8.8.2/config
vim  elasticsearch.yml
# 只配置以下选项,其他不动
# 节点名称修改
node.name: node-2

启动后,elasticsearch.yml文件中会追加安全配置,再去修改以下内容

xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

node-3配置与启动,与node-2相同,按照步骤操作即可。

集群启动

都修改好后,三个节点可能没组成集群,节点各自分家, 每个都是master,显示 UUID 的 warring。

解决方法:将elasticsearch.yml里配置的 数据文件位置里的内容全部删除,重启三个节点即可。

Linux集群部署Elasticsearch-8.8.2_第3张图片

配置安装kibana

  1. 下载kibana安装包-8.8.2并上传到服务器
  2. 解压安装包:tar -zxvf xxxx.tar.gz
  3. 配置kibana.yml文件
cd /home/es/kibana-8.4.3/config
vim kibana.yml
# port修改
server.port: 5601
# host修改为如下:
server.host: "0.0.0.0"
  1. 保存配置文件并启动kibana
cd /home/es/kibana-8.4.3/bin/
./kibana
  1. 浏览器登陆kibana

报错解决

  1. 使用root用户启动失败
[WARN][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

**解决:**创建一个独立的用户,比如es来启动elasticsearch

  1. elasticsearch安装目录权限不对
main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")

**解决:**看到“Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-8.8.0/config/elasticsearch.yml”的提示,检查目录的权限,将目录的权限改成es:es就好了。

  1. 日志和数据目录权限异常,启动失败
main ERROR Unable to create file /home/es/logs/my-application_index_indexing_slowlog.log java.io.IOException: 权限不够”和“Caused by: java.nio.file.AccessDeniedException: /home/es/data/nodes

**解决:**修改elasticsearch.yml里配置的日志和数据目录权限

  1. 内存不够,启动失败

**解决:**修改的/etc/security/limits.conf文件, 重新启动

./elasticsearch     #为了看启动日志就前台启动的,ctrl+c 进程就会over掉
#检查端口,起来了
netstat -tlunp|grep 9200
# 然后关掉进程重新后台启动
nohup ./elasticsearch >/dev/null 2>&1 &     #后台启动
ps -ef|grep elasticsearch   #检查进程
netstat -tlunp|grep 9200    #用root用户检查端口
  1. 配置文件elasticsearch.yml的权限异常,导致启动失败
main ERROR No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging.
SettingsException[Failed to load settings from /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; nested: AccessDeniedException[/usr/local/elasticsearch-8.8.0/config/elasticsearch.yml];

**解决:**修改elasticsearch.yml 权限

  1. elasticsearch,找不到java路径,启动失败

**解决:**修改 bin/elasticsearch-env文件下,java jdk读取位置,es8自带jdk, 改为es8的jdk启动,添加ES_JAVA_HOME=“$ES_HOME/jdk”
Linux集群部署Elasticsearch-8.8.2_第4张图片

使用logstash导入数据

导入csv数据

  1. 下载logstash安装包-8.8.2并上传到服务器

  2. 解压安装包:tar -zxvf xxxx.tar.gz

  3. 进入config目录下,可以看到一个logstash-sample.conf文件,复制一份并命名为logstash-test.conf

  4. 编辑文件

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

# 读取数据配置
input {
  file {
  	# 导入文件目录地址
	path => "/home/zyd/Documents/test_table.csv"
	start_position => "beginning"
  }
}

# 过滤 格式化数据配置
filter {
  # 配置读取csv文件
  csv {
    # 设置拆分符为 逗号
    separator => ","
    # 指定csv文件的字段 按顺序匹配
    columns => ["ID","USERS","NAME"]
  }  
}

# 输出配置
output {
  # es相关配置
  elasticsearch {
    hosts => "http://192.168.190.128:9200"
    index => "testtable"
	document_id => "%{id}"
    #user => "zyd"
    #password => "zyd"
  }
  stdout {}
}
  1. 进入bin目录,启动logstash:通过-f 参数指定配置文件启动
./logstash -f /home/es/logstash-8.8.2/config/logstash-test.conf

查看导入的索引

http://192.168.190.128:9200/_cat/indices?v
#GET方法:
GET testtable/_search

你可能感兴趣的:(linux,elasticsearch,运维)