目录
5.1 Error: [index_not_found_exception] no such index...
下载
官网下载:
下载es和kibana的 linux包
这里版本是7.6.2
配置免密
集群规划如下:
172.16.10.244 es_node_1 初始设置为主节点。
172.16.10.250 es_node_2 从节点1
172.16.10.230 es_node_2 从节点2
# 先修改集群内所有机器hostname
$ sudo vi /etc/hosts
********************************************
172.16.10.230 dsj-node230
172.16.10.244 dsj-node244
172.16.10.250 dsj-node250
********************************************
$ sudo vi /etc/hostname
********************************************
dsj-node244
********************************************
# 应用更改
$ sudo hostname dsj-node244
$ sudo hostname dsj-node250
$ sudo hostname dsj-node230
# 源服务器上执行
# 会在 ~/.ssh 目录下生成 id_rsa 和 id_rsa.pub 两个密钥文件。
$ ssh-keygen -t rsa -b 4096
# 在 dsj-node244 上
# 这会把源服务器的 ~/.ssh/id_rsa.pub 公钥内容复制到目标服务器的 ~/.ssh/authorized_keys 文件中。
ssh-copy-id root@172.16.10.250 && \
ssh-copy-id root@172.16.10.230
ssh-copy-id es_user@172.16.10.250 && \
ssh-copy-id es_user@172.16.10.230
# es_user 和 root 的密码:
# $ whdsj@123$
# 重复此过程
# 从 dsj-node230 复制公钥到其他两台机器,
# 从 dsj-node250 复制公钥到其他两台机器。
# 然后试一下ssh免密登录
$ ssh 172.16.10.250
# 配置以上后重新连接就不需要密码了
Elasticsearch部署
1 创建用户
注意如果是集群搭建则需要再每台机器上面进行 配置 和 创建用户等操作,确保每台机器上面都配置好。
由于es运行不能在root用户下,需要创建非root用户。
# 创建Es用户
# es_user
# whdsj@123$
$ useradd es_user -p whdsj@123$
# 文件授权
$ chown -R es_user $ELASTICSEARCH_HOME/../
# 删除用户,保留home
$ sudo userdel es_user
# 删除用户,删除home
$ sudo userdel -r es_user
# 删除系统上所有属于 es_user 的文件
$ sudo find / -user es_user -delete
# root 强制改密码
$ sudo passwd es_user
2 解压
$ mkdir -p /data/elasticsearch
# 传包到 /data/elasticsearch 并解压
$ tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz
# 重命名 并删除安装包
$ mv /data/elasticsearch/elasticsearch-7.6.2 /data/elasticsearch/elasticsearch_7_6_2 && \
rm -f /data/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz
3 配置
3.1 环境变量配置
$ vi /etc/profile
***********************************增加配置******************************
export ELASTICSEARCH_HOME=/data/elasticsearch/elasticsearch_7_6_2
************************************************************************
$ source /etc/profile
# 检查配置
$ echo $ELASTICSEARCH_HOME
# 创建data目录
$ mkdir -p $ELASTICSEARCH_HOME/data
3.2 elasticsearch.yml 配置
$ vi $ELASTICSEARCH_HOME/config/elasticsearch.yml
修改如下配置项:
# 集群名称
cluster.name: bdcp_es_cluster
# 节点名称
node.name: es_node_1
# 日志 数据目录
path.data: /data/elasticsearch/elasticsearch_7_6_2/data
path.logs: /data/elasticsearch/elasticsearch_7_6_2/logs
# 开启远程访问监听
network.host: 0.0.0.0
# 集群内部通信地址,多网卡环境建议使用IP
network.publish_host: 172.16.10.244
http.port: 9200
discovery.seed_hosts: ["172.16.10.244", "172.16.10.230","172.16.10.250",]
cluster.initial_master_nodes: ["es_node_1", "es_node_2","es_node_3"]
# 开启跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
Elasticsearch 配置项说明
cluster.name
- 作用: 指定Elasticsearch集群的名称。
- 重要性: 高。用于区分不同的集群,确保节点只加入到特定的集群中。
node.name
- 作用: 设置当前节点的名称。
- 重要性: 中等。有助于在集群中识别和管理不同的节点。
path.data
- 作用: 指定Elasticsearch存储数据的路径。
- 重要性: 中等。对于数据存储和访问速度至关重要。
path.logs
- 作用: 指定Elasticsearch日志文件的存储路径。
- 重要性: 中等。对于日志管理和故障排查非常重要。
network.host
- 作用: 设置Elasticsearch绑定和监听的网络地址。
- 重要性: 高。影响Elasticsearch服务的可访问性和安全性。
http.port
- 作用: 指定Elasticsearch HTTP服务的端口。
- 重要性: 中等。用于客户端访问Elasticsearch API。
cluster.initial_master_nodes
- 作用: 在集群首次启动时,指定哪些节点是主节点的候选者。
- 重要性: 高。用于Elasticsearch 7.x及更高版本中的集群引导和防止脑裂。
network.publish_host
- 作用: 设置节点在集群内通信时使用的主机地址。
- 重要性: 中等。确保集群内部正确通信,尤其在复杂的网络环境中。
discovery.seed_hosts
- 作用: 指定集群中的初始主机,用于新节点发现并加入集群。
- 重要性: 高。对于节点发现和集群形成至关重要,特别是在大型或动态变化的集群中。
http.cors.enabled: true
- 作用: 启用跨源资源共享(CORS),允许从不同源的客户端访问Elasticsearch。
- 重要性: 中等。对于需要跨域访问Elasticsearch的Web应用程序来说至关重要。
http.cors.allow-origin: "*"
- 作用: 设置允许访问Elasticsearch的来源域。
"*"
表示接受所有域的请求。- 重要性: 中等。适用于那些需要从任何来源接收请求的环境,但需注意安全风险。
补充说明
- 确保网络配置符合你的部署环境,特别是
network.host
和http.port
,以确保安全和可访问性。- 考虑设置资源限制,如
indices.memory.index_buffer_size
和thread_pool
,以优化性能。- 根据需要,配置安全相关的设置,如启用SSL/TLS,设置用户认证等。
- 考虑开启和配置监控和日志记录的相关选项,以便于维护和故障排查。
- 备份策略也很重要,确保有定期备份的计划和实施。
3.3 jvm.options配置
限制内存
# 内存设置为4G
$ vi $ELASTICSEARCH_HOME/config/jvm.options
***********************************修改配置******************************
-Xms4g
-Xmx4g
************************************************************************
3.4 sysctl.conf 配置
$ vi /etc/sysctl.conf
***********************************增加配置******************************
vm.max_map_count=655360
************************************************************************
3.5 limits.conf 配置
软限制(soft)
软限制可以在程序的进程中自行改变
硬限制(hard)
而硬限制则不行(除非程序进程有root权限)
-H :hard limit ,严格的设定,必定不能超过这个设定的数值,超过会报错
-S :soft limit ,警告的设定,可以超过这个设定值,但是若超过则有警告信息
$ vi /etc/security/limits.conf
***********************************增加配置******************************
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
************************************************************************
# 使配置生效
$ sysctl -p
至此配置完成。
4 分发到集群其他机器
这一步需要将当前这台机器 244 的es包分发到集群中其他机器中 230 和 250。
这里给一个分发命令。
# 1 执行分发 es 文件夹
rsync -avr $ELASTICSEARCH_HOME root@dsj-node250:/data/elasticsearch/ && \
rsync -avr $ELASTICSEARCH_HOME root@dsj-node230:/data/elasticsearch/
# 2 执行分发 sysctl.conf 配置
rsync -av /etc/sysctl.conf root@dsj-node250:/etc/ && \
rsync -av /etc/sysctl.conf root@dsj-node230:/etc/
# 3 执行分发 limits.conf 配置
rsync -av /etc/security/limits.conf root@dsj-node250:/etc/security/ && \
rsync -av /etc/security/limits.conf root@dsj-node230:/etc/security/
# 4 执行 sysctl -p 指令
ssh root@dsj-node250 'sysctl -p' && \
ssh root@dsj-node230 'sysctl -p'
# 备用,分发 elasticsearch-env
rsync -av $ELASTICSEARCH_HOME/bin/elasticsearch-env root@dsj-node250:$ELASTICSEARCH_HOME/bin/ && \
rsync -av $ELASTICSEARCH_HOME/bin/elasticsearch-env root@dsj-node230:$ELASTICSEARCH_HOME/bin/
然后需要去每台集群机器上做一些前置配置。2.1\2.2\2.3\2.4\2.5 以及 3
5 启动集群
切换到 es_user
$ su es_user
# 启动 elasticsearch
$ cd $ELASTICSEARCH_HOME/bin && nohup sh elasticsearch > ../logs/elasticsearch.log 2>&1 &
# 查看日志
$ tail -f $ELASTICSEARCH_HOME/logs/elasticsearch.log -n 20
6 验证
curl http://172.16.10.244:9200
# 或者直接浏览器访问
http://172.16.10.244:9200
# 检查集群状态
curl http://172.16.10.244:9200/_cluster/state?pretty
# 检查集群健康度
curl http://172.16.10.244:9200/_cluster/health?pretty
7 可能遇到的问题
7.1 要求JDK版本11
可以使用es内置的jdk11解决。
future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk1.8.0_341/jre] does not meet this requirement
7.2 脚本错误
./elasticsearch-env: line 116: syntax error near unexpected token `<'
将116行语法修改成即可
将 done < <(env)
修改为 done <<< 'env'
7.3 要求修改vm.max_map_count
看下 3.4 中是否改了,然后看看是否在root下执行了 sysctl -p 让改动生效。
Kibana部署
1 解压
配环境变量。传包到es工作目录,解压。
$ tar -zxvf kibana-7.6.2-linux-x86_64.tar.gz
$ mv /data/elasticsearch/kibana-7.6.2-linux-x86_64 /data/elasticsearch/kibana_7_6_2 && \
rm -f /data/elasticsearch/kibana-7.6.2-linux-x86_64.tar.gz
$ vi /etc/profile
***********************************增加配置******************************
export KIBANA_HOME=/data/elasticsearch/kibana_7_6_2
************************************************************************
$ source /etc/profile
$ echo $KIBANA_HOME
2 修改配置
$ vi $KIBANA_HOME/config/kibana.yml
# 添加以下内容:
***********************************增加配置******************************
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://172.16.10.244:9200","http://172.16.10.230:9200","http://172.16.10.250:9200"]
************************************************************************
$ source /etc/profile
3 启动
# 创建日志文件夹 然后启动
$ mkdir -p $KIBANA_HOME/logs
$ $KIBANA_HOME/bin/kibana > $KIBANA_HOME/logs/kibana.log 2>&1 &
# 查看日志
$ tail -f -n 19 $KIBANA_HOME/logs/kibana.log
4 验证
5 可能遇到的问题
5.1 Error: [index_not_found_exception] no such index...
检查配置、检查集群健康度、删除集群中kibana相关索引然后重启kibana、检查每台机器磁盘是否吃满、检查网络
5.2 无法连接ES
检查3.2中es配置 ,支持跨域
http.cors.enabled: true
http.cors.allow-origin: "*"