ES安装部署操作
前言
説到ES,从开始参加工作的时候就一直在搞,搞了四年之久,还是没有説一次性就能搞定,真的是能力问题呀!
下面简单説一下ES的安装步骤吧,关于ES的详细説明,可以参考其他博文或者官网,或者后续我再有什么心德,在在博客上记录一下吧。
一、从官网上下载ES的压缩包,我目前用到的是7.9.1版本的。
官网网址: https://www.elastic.co/cn/downloads/elasticsearch
二、具体操作步骤
1.将下载好的tar包,上传到linux相应节点上,解压缩。注意的是,操作ES要用普通用户,如果节点上没有普通用户,需要添加一个普通用户,例如添加用户zgz
sudo adduser zgz
2.进入es目录下的config目录,修改elasticsearch.yml文件
以下为yml配置文件的简要説明 :
cluster.name: ELASTICSEARCH
#ES集群名称,同一个集群内的所有节点集群名称必须保持一致
node.name: px01
#ES集群内的节点名称,同一个集群内的节点名称要具备唯一性
node.master: true
#允许节点是否可以成为一个master节点,ES是默认集群中的第一台机器成为master,如果这台机器停止就会重新选举
node.data: false
#允许该节点存储索引数据(默认开启)
path.data: /es/data1,/es/data2
#ES是搜索引擎,会创建文档,建立索引,此路径是索引的存放目录,如果我们的日志数据较为庞大,那么索引所占用的磁盘空间也是不可小觑的
#这个路径建议是专门的存储系统,如果不是存储系统,最好也要有冗余能力的磁盘,此目录还要对elasticsearch的运行用户有写入权限
path.logs: /var/logs/elasticsearch
#elasticsearch专门的日志存储位置,生产环境中建议elasticsearch配置文件与elasticsearch日志分开存储
bootstrap.memory_lock: true
#在ES运行起来后锁定ES所能使用的堆内存大小,锁定内存大小一般为可用内存的一半左右;锁定内存后就不会使用交换分区
#如果不打开此项,当系统物理内存空间不足,ES将使用交换分区,ES如果使用交换分区,那么ES的性能将会变得很差
network.host: 192.168.55.23
#es绑定地址,支持IPv4及IPv6,默认绑定127.0.0.1;es的HTTP端口和集群通信端口就会监听在此地址上
network.tcp.no_delay: true
#是否启用tcp无延迟,true为启用tcp不延迟,默认为false启用tcp延迟
network.tcp.keep_alive: true
#是否启用TCP保持活动状态,默认为true
network.tcp.reuse_address: true
#是否应该重复使用地址。默认true,在Windows机器上默认为false
network.tcp.send_buffer_size: 128mb
#tcp发送缓冲区大小,默认不设置
network.tcp.receive_buffer_size: 128mb
#tcp接收缓冲区大小,默认不设置
transport.tcp.port: 9300
#设置集群节点通信的TCP端口,默认就是9300
transport.tcp.compress: true
#设置是否压缩TCP传输时的数据,默认为false
http.max_content_length: 200mb
#设置http请求内容的最大容量,默认是100mb
http.cors.enabled: true
#是否开启跨域访问
http.cors.allow-origin: "*"
#开启跨域访问后的地址限制,*表示无限制
http.port: 9200
#定义ES对外调用的http端口,默认是9200
discovery.seed_hosts: ["192.168.55.23:9300", "192.168.55.24:9300", "192.168.55.25:9300"]
#Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点,由discovery.zen.ping.unicast.hosts:参数改变而来;discovery.zen.ping.unicast.hosts参数在7.x版本后废弃
cluster.initial_master_nodes: ["192.168.55.23:9300", "192.168.55.24:9300", "192.168.55.25:9300"]
#Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点
cluster.fault_detection.leader_check.interval: 15s
#Elasticsearch7新增参数,设置每个节点在选中的主节点的检查之间等待的时间。默认为1秒
discovery.cluster_formation_warning_timeout: 30s
#Elasticsearch7新增参数,启动后30秒内,如果集群未形成,那么将会记录一条警告信息,警告信息未master not fount开始,默认为10秒
cluster.join.timeout: 30s
#Elasticsearch7新增参数,节点发送请求加入集群后,在认为请求失败后,再次发送请求的等待时间,默认为60秒
cluster.publish.timeout: 90s
#Elasticsearch7新增参数,设置主节点等待每个集群状态完全更新后发布到所有节点的时间,默认为30秒
cluster.routing.allocation.cluster_concurrent_rebalance: 32
#集群内同时启动的数据任务个数,默认是2个
cluster.routing.allocation.node_concurrent_recoveries: 32
#添加或删除节点及负载均衡时并发恢复的线程个数,默认4个
cluster.routing.allocation.node_initial_primaries_recoveries: 32
#初始化数据恢复时,并发恢复线程的个数,默认4个
注意的是,在yml配置文件中冒号后一定要加一个空格。我有的参数在部署的时候没有用到,看个人公司业务需要。
3.用root用户,修改 /etc/security/limits.conf文件
追加以下内容 :
* soft nofile 65536
* hard nofile 65536
相关説明:
* 代表针对所有用户
noproc 是代表最大进程数
nofile 是代表最大文件打开数
另外: 65536的值不固定,具体的值可以按照错误提示中方括号"[ ]"中,提示的值修改
4.用root用户修改/etc/sysctl.conf文件
追加以下内容 :
vm.max_map_count=655360
保存后,执行:
sysctl -p
5.切换到zgz用户,启动es
进到bin目录下,后台启动./elasticsearch -d -p pid
查看es进程,看是否启动成功
6.查看各个节点防火墙状态和时间
每个节点的防火墙状态:
systemctl status firewalld
如果防火墙是开启状态则需要关闭:
service status stop
查看每个节点的时间:
用 date 命令查看
若时间不一致则修改时间
7.操作其余节点
24节点的操作步骤,也是需要创建普通用户,修改两个conf文件。
在23节点上把解压好的es文件分别发送到其他节点24,25上,修改24节点上的elasticsearch.yml文件:
cluster.name: ELASTICSEARCH
node.name: px02
#ES集群内的节点名称,同一个集群内的节点名称要具备唯一性
node.master: true
node.data: false
path.data: /es/data1,/es/data2
path.logs: /var/logs/elasticsearch
bootstrap.memory_lock: true
network.host: 192.168.55.24
network.tcp.no_delay: true
network.tcp.keep_alive: true
network.tcp.reuse_address: true
network.tcp.send_buffer_size: 128mb
network.tcp.receive_buffer_size: 128mb
transport.tcp.port: 9300
transport.tcp.compress: true
http.max_content_length: 200mb
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
discovery.seed_hosts: ["192.168.55.23:9300", "192.168.55.24:9300", "192.168.55.25:9300"]
cluster.initial_master_nodes: ["192.168.55.23:9300", "192.168.55.24:9300", "192.168.55.25:9300"]
cluster.fault_detection.leader_check.interval: 15s
discovery.cluster_formation_warning_timeout: 30s
cluster.join.timeout: 30s
cluster.publish.timeout: 90s
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32
25节点的操作步骤,也是需要创建普通用户,修改两个conf文件。
修改25节点上的elasticsearch.yml文件:
cluster.name: ELASTICSEARCH
node.name: px03
#ES集群内的节点名称,同一个集群内的节点名称要具备唯一性
node.master: true
node.data: false
path.data: /es/data1,/es/data2
path.logs: /var/logs/elasticsearch
bootstrap.memory_lock: true
network.host: 192.168.55.25
network.tcp.no_delay: true
network.tcp.keep_alive: true
network.tcp.reuse_address: true
network.tcp.send_buffer_size: 128mb
network.tcp.receive_buffer_size: 128mb
transport.tcp.port: 9300
transport.tcp.compress: true
http.max_content_length: 200mb
http.cors.enabled: true
http.cors.allow-origin: "*"
http.port: 9200
discovery.seed_hosts: ["192.168.55.23:9300", "192.168.55.24:9300", "192.168.55.25:9300"]
cluster.initial_master_nodes: ["192.168.55.23:9300", "192.168.55.24:9300", "192.168.55.25:9300"]
cluster.fault_detection.leader_check.interval: 15s
discovery.cluster_formation_warning_timeout: 30s
cluster.join.timeout: 30s
cluster.publish.timeout: 90s
cluster.routing.allocation.cluster_concurrent_rebalance: 32
cluster.routing.allocation.node_concurrent_recoveries: 32
cluster.routing.allocation.node_initial_primaries_recoveries: 32
分别启动24 25节点上的es
进到bin目录下,后台启动./elasticsearch -d -p pid
查看es进程,看是否启动成功
8.查看集群状态
执行命令:
#查看效果
curl -XGET http://192.168.55.24:9200
#查看集群健康状态
curl -XGET 'http://192.168.55.24:9200/_cluster/health?pretty'
#查看主节点
curl -XGET 'http://192.168.55.24:9200/_cat/nodes?v'
9.踩坑的地方
下面是我耗时了好长时间才解决的问题:
#在查看集群健康状态的时候,我明明部署了三台,但是在下面的显示结果中只有一台
curl -XGET 'http://192.168.55.24:9200/_cluster/health?pretty'
{
"cluster_name" : "ELASTICSEARCH",
"status" : "green",
"timed_out" : false,
"number_of_nodes" :1 ,
"number_of_data_nodes" :1,
.....
.....
}
#具体原因是我之前启动过24 25 节点,导致在es中的/data/目录下生成了一个node的目录,所以导致了只有一个nodes,因此要把node目录删掉,然后重新启动ES集群,在去查看集群状态是,就显示正常了。
curl -XGET 'http://192.168.55.24:9200/_cluster/health?pretty'
{
"cluster_name" : "ELASTICSEARCH",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3 ,
"number_of_data_nodes" : 3,
.....
.....
}
至此ES集群部署成功。
总结
终于搞了这么长时间的ES这次终于搞定了,后续安装还会或多或少的遇到其他问题,在做补充记录吧。