本教程采用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 分别拷贝到三个节点
#添加用户 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
#----------保存并退出----------------
#切换用户
su zyd
解压缩
tar -zxvf elasticsearch-8.8.2-linux-x86_64.tar.gz -C /home/es/
ll
可查看文件目录权限,为非root权限即可
# 如果为root再授权一次即可
chown -R zyd:zyd /home/es/
配置 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
#启动该节点并记录启动日志
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
#启动该节点并记录启动日志
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-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里配置的 数据文件位置里的内容全部删除,重启三个节点即可。
cd /home/es/kibana-8.4.3/config
vim kibana.yml
# port修改
server.port: 5601
# host修改为如下:
server.host: "0.0.0.0"
cd /home/es/kibana-8.4.3/bin/
./kibana
[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
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就好了。
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里配置的日志和数据目录权限
**解决:**修改的/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用户检查端口
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 权限
**解决:**修改 bin/elasticsearch-env文件下,java jdk读取位置,es8自带jdk, 改为es8的jdk启动,添加ES_JAVA_HOME=“$ES_HOME/jdk”
下载logstash安装包-8.8.2并上传到服务器
解压安装包:tar -zxvf xxxx.tar.gz
进入config目录下,可以看到一个logstash-sample.conf文件,复制一份并命名为logstash-test.conf。
编辑文件
# 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 {}
}
./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