一、windows集群环境
1.下载ES压缩包,然后解压缩
https://pan.baidu.com/s/1lMJoWIhXVFmC24ToO5IJmg?pwd=5zcg 提取码: 5zcg
2.如果本地已经运行过ES,则需要删除里面的data、logs目录,没有运行过,找到config目录,然后打开elasticsearch.yml文件,打开这个地方的注释,第一个就是集群的名称,所有ES节点的集群名称必须保持一致(如果要改集群名称,其他节点的集群名称记得要改成一样的);第二个就是节点名称;第三个配置是该节点就是master节点;第四个配置就是当前节点也是数据节点;第五个就是本地IP地址;第六个就是ES对外的端口;第七个就是ES内部通信的端口号
cluster.name: my-application
node.name: node-1001
node.master: true
node.data: true
network.host: localhost
http.port: 1001
transport.tcp.port: 9301
#跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*
3.在文件最后加上允许跨域设置,到这里,第一个节点的配置就设置好了,找到bin目录,然后双击elasticsearch.bat,可以启动试试,服务能否正常启动成功。
3.1、可以看到已经成功启动一个节点,控制台已经打印出了集群名称、节点名称
3.2、再访问一下配置文件中对外暴漏的端口号,看能否访问,我这里是请求查看集群的健康状态
number_of_nodes表示当前节点
number_of_data_nodes表示当前数据节点
然后继续配置后面的集群节点,直接复制第一个节点的ES文件,复制出来的data、logs目录都不要,因为是全新的节点
4.修改第二个节点的配置,打开ES的yml文件,需要修改几个地方,第一步修改节点名称,不能跟第一节点的节点名称重复;第二步修改对外暴露的端口号,也不能跟第一节点的端口号冲突;第三步修改内部通信端口号;第四步增加tcp监听端口配置,因为是集群模式,所以需要知道其他节点的ip以及内部通信端口,然后启动第二节点的ES
cluster.name: my-application
node.name: node-1002
node.master: true
node.data: true
network.host: localhost
http.port: 1002
transport.tcp.port: 9402
#tcp监听端口,用于寻找其他ES节点,使用内部通讯端口
discovery.seed_hosts: [“localhost:9401”]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
#跨域配置
http.cors.enabled: true
http.cors.allow-origin: “*”
4.1第二个节点也启动成功
4.2然后再调用1001的接口,查询集群的健康状态,可以看到已经有两个节点以及两个数据节点
4.3 如果查看整个集群状态,只有一个节点,那证明两个节点通信失败,查看两个节点的log日志,ReceiveTimeoutTransportException: [node-1001][127.0.0.1:9301][internal:cluster/coordination/join] request_id [13] timed out after [60123ms],可以判断出在Elasticsearch集群中,节点 node-1001 尝试通过 127.0.0.1:9301端口进行内部集群协调加入操作时,请求超时了。
解决办法:
4.3.1 关闭防火墙
4.3.2 根据上面步骤查看一下两个节点的配置是不是有问题
4.3.3 删除两个节点中data目录,以及删除两个节点的logs目录下所有的文件(注意,这个是要保留logs目录的)
4.3.4 如果还是无法加入集群中,则查看你所命名的端口号是不是被占用了,打开cmd窗口,使用
使用命令 netstat -ano | findstr :端口号
如果被其他应用占用了端口,可以选择杀死进程或者将ES节点的内部通信端口改一下,改完内部通信端口,别忘了修改第二个节点中去通信第一个节点的端口。然后重复一下4.3.3操作,就可以正常启动成功
5.再复制第二个节点的ES文件作为第三个节点,还是先删除data、logs目录(logs目录需要保留,删除logs目录里面的文件)
cluster.name: my-application
node.name: node-1003
node.master: true
node.data: true
network.host: localhost
http.port: 1003
transport.tcp.port: 9403
discovery.seed_hosts: ["localhost:9401","localhost:9402"]
discovery.zen.fd.ping_timeout: 1m
discovery.zen.fd.ping_retries: 5
5.1 然后再调接口查看集群的健康状况,可以看到集群节点是3个,数据节点是3个,证明集群环境搭建好了
二、linux单节点环境
1.linux环境ES下载
https://pan.baidu.com/s/13w32eMZxBTwiKHPxw-ZSDg?pwd=Qa9C
提取码:Qa9C
2.将上传的es.tar包解压,我这里是放在/opt中,然后修改了文件名
3.创建用户因为安全问题,Elasticsearch 不允许 root 用户直接运行,所以要创建新用户,在 root 用户中创建新用户
useradd es #新增es用户 passwd es #为es用户设置密码
#注意 userdel -r es #如果错了,可以删除再加
chown -R es:es /opt/es #文件夹所有者,目录的位置就是你存放es目录的位置
4.修改config/elasticsearch.yml 文件,这里加的配置在windos集群中都有解释
5.修改系统配置文件,因为es生成的文件、数据比较多,控制es的时候可能会出问题,所以需要修改一下系统配置,修改/etc/security/limits.conf
在/etc/security/limits.conf 文件末尾中增加下面内容 # 每个进程可以打开的文件数的限制
es soft nofile 65536 es hard nofile 65536
5.1 修改/etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容 # 每个进程可以打开的文件数的限制
es soft nofile 65536
es hard nofile 65536
# 操作系统级别对每个用户创建的进程数的限制
* hard nproc 4096
# 注:* 带表Linux所有用户名称
5.2 修改/etc/sysctl.conf
# 在文件中增加下面内容
# 一个进程可以拥有的VMA(虚拟内存区域)的数量,默认值为65536
vm.max_map_count=655360
5.3 重新加载
sysctl -p
6. 如果当前虚拟机的用户是root用户,是不允许直接启动es的,必须要切换到es用户
6.1 退回到config的上一层目录,也就是es的这个大目录下使用 bin/elasticsearch,可以看到,我这里已经启动成功了,访问虚拟机的ip以及设置的对外暴露端口
6.2 如果已经切换到es用户了,启动es的时候报错了,原因是启动es的时候会动态生成一些目录,这些生成的目录权限跟es没有关系,如下
解决办法,使用root用户重新设定一下目录的所有者权限
chown -R es:es /opt/es #文件夹所有者
然后再切换到es用户,重新启动
su es
cd /opt/es
#启动es
bin/elasticsearch
三、linux集群部署ES
1.linux环境ES下载
https://pan.baidu.com/s/13w32eMZxBTwiKHPxw-ZSDg?pwd=Qa9C
提取码:Qa9C
2.因为是集群的,所以需要创建三台虚拟机,然后将上传的es.tar包解压,我这里是放在/opt中,然后修改了文件名
3.linux环境下,集群和单节点都有因为安全问题,Elasticsearch 不允许 root 用户直接运行,所以要在每个节点中创建新用户,在 root 用户中创建新用户
useradd es #新增es用户
passwd es #为es用户设置密码
#userdel -r es #如果错了,可以删除再加
chown -R es:es /opt/es-cluster #文件夹所有者
3.修改集群中每个ES节点的elasticsearch.yml配置,在config目录中
vim /opt/es-cluster/config/elasticsearch.yml
注意请看注释描述,有些配置是不能重复
# 加入如下配置
#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复
node.name: node-1
#ip地址,每个节点的地址不能重复
network.host: 192.168.10.100
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
# head 插件需要这打开这两个配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master ,所以其他节点这个地方就
#不需要改
cluster.initial_master_nodes: ["node-1"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["192.168.10.100:9300","192.168.10.101:9300","192.168.10.102:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#集群内同时启动的数据任务个数,默认是2个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#添加或删除节点及负载均衡时并发恢复的线程个数,默认4个
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化数据恢复时,并发恢复线程的个数,默认4个
cluster.routing.allocation.node_initial_primaries_recoveries: 16
3.1 修改每个节点的/etc/security/limits.conf
es soft nofile 65536
es hard nofile 65536
3.2 修改每个节点的/etc/security/limits.d/20-nproc.conf
# 在文件末尾中增加下面内容
es soft nofile 65536 es hard nofile 65536
* hard nproc 4096
# 注:* 带表Linux所有用户名称
3.3 修改每个节点的/etc/sysctl.conf
# 在文件中增加下面内容
vm.max_map_count=655360
4 然后在三台机器中切换到es用户,然后进入到/opt/es-cluster目录中使用命令启动三台机器中的es
#启动
bin/elasticsearch
#后台启动
bin/elasticsearch -d
使用get请求,可以看到集群所有节点,则证明集群部署完成
ip:9200/_cat/nodes