一、ElasticSearch安装部署
1、下载软件包
- 前往官网下载,下载对应平台的软件包
2、解压软件包
- 解压命令
tar -zxvf ./elasticsearch-7.8.0-linux-x86_64.tar.gz
3、创建启动用户并启动应用
elasticsearch为了安全,不能用root用户运行应用实例,需要为实例创建用户。如果用root用户运行,会出现以下异常。
java.lang.RuntimeException: can not run elasticsearch as root
- 创建用户命令
adduser elasticsearch
- 修改用户密码
passwd elasticsearch
- 将es解压目录的所有者授予此用户
chown -R elasticsearch elasticsearch-7.8.0
- 切换至elasticsearch用户
su elasticsearch
- 进入es安装目录,运行启动脚本
/usr/local/elasticsearch-7.8.0/bin/elasticsearch -d
4、常见错误
完成上述步骤后,在本地虚拟机中启动es单实例,直接运行,通常会抛出如下错误。
- 用户被限制打开的文件描述符数量过低
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
解决方法:编辑 /etc/security/limits.conf,追加以下内容,注意此文件修改后需要重新登录用户,才会生效
elasticsearch hard nofile 65536
elasticsearch soft nofile 65536
执行命令查看用户限制
ulimit -a
- 用户别限制打开的线程数过低
max number of threads [3796] for user [elasticsearch] is too low, increase to at least [4096]
解决方法:编辑 /etc/security/limits.conf,追加以下内容,注意此文件修改后需要重新登录用户,才会生效
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096
执行命令查看用户限制
ulimit -a
- 虚拟内存区域被限制过低
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案: /etc/sysctl.conf文件最后添加一行
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
#使修改立即生效
sysctl -p
查看修改结果:
sysctl -a | grep vm.max_map_count
- 提示默认发现配置不适合生产环境使用
the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
解决方法:修改elasticsearch.yml配置
#打开节点名称的配置
node.name: node-1
#这里的node-1为node-name配置的值
cluster.initial_master_nodes: ["node-1"]
#外部ip访问elasticsearch
network.host: 0.0.0.0
5、开放端口
- 查看开放的端口号
firewall-cmd --list-all
- 设置开放端口号
firewall-cmd --add-port=9200/tcp --permanent
- 重启防火墙
firewall-cmd --reload
6、验证是否部署成功
- 访问部署服务器es实例,默认端口为9200
二、ElasticSearch简单集群搭建
1、本地环境准备
系统版本 | 机器IP | 部署应用 | 应用版本 | 节点名称 |
---|---|---|---|---|
CentOS 7.6 | 192.168.15.151 | ElasticSearch | 7.8.0 | node-1 |
CentOS 7.6 | 192.168.15.155 | ElasticSearch | 7.8.0 | node-2 |
CentOS 7.6 | 192.168.15.156 | ElasticSearch | 7.8.0 | node-3 |
说明:在本地PC机上利用VMware workstation虚拟出如上表所示的几台机器,搭建一个主节点及两个从节点的简单集群。
2、修改各个节点的配置文件
#进入es配置文件所在目录
cd /usr/local/elasticsearch-7.8.0/config
#编辑配置文件
vim elasticsearch.yml
- node-1节点配置文件(elasticsearch.yml)修改
#集群名称
cluster.name: test-app
#节点名称,集群中保持唯一
node.name: node-1
#绑定远程地址,为了安全通常是指定具体的地址,这里仅仅是测试,放开允许所有远程来源访问
network.host: 0.0.0.0
#开放http接口,默认就是9200
http.port: 9200
#集群节点之间(集群协商、指令传输等)通信的端口
transport.tcp.port: 9300
#允许前端跨域访问
http.cors.enabled: true
#设置允许的跨域的来源,*表示允许所有跨域来源
http.cors.allow-origin: "*"
#设置发现集群节点主机列表
discovery.seed_hosts: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
#初始化集群的master节点的候选列表,列表中的节点都可能竞选成为master节点
cluster.initial_master_nodes: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
- node-2节点配置文件(elasticsearch.yml)修改
#集群名称
cluster.name: test-app
#节点名称,集群中保持唯一
node.name: node-2
#绑定远程地址,为了安全通常是指定具体的地址,这里仅仅是测试,放开允许所有远程来源访问
network.host: 0.0.0.0
#开放http接口,默认就是9200
http.port: 9200
#集群节点之间(集群协商、指令传输等)通信的端口
transport.tcp.port: 9300
#允许前端跨域访问
http.cors.enabled: true
#设置允许的跨域的来源,*表示允许所有跨域来源
http.cors.allow-origin: "*"
#设置发现集群节点主机列表
discovery.seed_hosts: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
#初始化集群的master节点的候选列表,列表中的节点都可能竞选成为master节点
cluster.initial_master_nodes: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
- node-3节点配置文件(elasticsearch.yml)修改
#集群名称
cluster.name: test-app
#节点名称,集群中保持唯一
node.name: node-3
#绑定远程地址,为了安全通常是指定具体的地址,这里仅仅是测试,放开允许所有远程来源访问
network.host: 0.0.0.0
#开放http接口,默认就是9200
http.port: 9200
#集群节点之间(集群协商、指令传输等)通信的端口
transport.tcp.port: 9300
#允许前端跨域访问
http.cors.enabled: true
#设置允许的跨域的来源,*表示允许所有跨域来源
http.cors.allow-origin: "*"
#设置发现集群节点主机列表
discovery.seed_hosts: ["192.168.15.151:9300","192.168.15.155:9300","192.168.15.156:9300"]
#初始化集群的master节点的候选列表,列表中的节点都可能竞选成为master节点
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
3、启动各个节点服务
注意,在启动各个服务之前,需要保证防火墙开放了以上配置的9200、9300端口,否则集群之间将无法通信,集群构建失败。
#执行es启动命令,分别启动三台服务器下的es服务
/usr/local/elasticsearch-7.8.0/bin/elasticsearch -d
- 节点(node-1)的日志
- 节点(node-2)的日志
- 节点(node-3)的日志
- 访问节点http端点,查看集群状态
说明:从以上日志可以看出,集群搭建成功,node-1、node-2、node-3组成了集群的三个节点,node-1、node-3为slaver节点,node-2为master节点。