简介
Elaticsearch,简称为 es, es 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。es 也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。
单机部署
① 下载安装包
官网下载
https://www.elastic.co/downloads/elasticsearch
官网下载太慢可用国内ElasticSearch中文社区下载
https://elasticsearch.cn/download/
② 解压缩
#压缩包在 /usr/local 下
tar -xvf elasticsearch-7.10.1-linux-x86_64.tar.gz
③ 运行
由于 elasticsearch 默认是不能用 root 用户来运行的,所以需要为 es 创建一个用户。
#创建用户
useradd es
#设置es用户密码
passwd es
#授权elasticsearch目录权限给es用户
chown -R es elasticsearch-7.10.1
#切换到es用户
su es
如果是单机运行测试的话,直接在 bin
目录下执行启动脚本即可
cd /usr/local/elasticsearch-7.10.1/bin
./elasticsearch
#以守护线程的方式启动
./elasticsearch -d
集群部署
集群图解
集群配置
如果是集群测试,可以在同台机器上运行多个 elasticsearch
,但是如果是运行在正式环境上,则需要修改 /config/elasticsearch.yml
中的一些基础网络配置。
Elasticsearch binds to localhost only by default. This is sufficient for you to run a local development server (or even a development cluster, if you start multiple nodes on the same machine), but you will need to configure some basic network settings in order to run a real production cluster across multiple servers.
Elasticsearch.yml
network.host
该节点会绑定该参数设定的 ip,同时发布这个 ip 地址到集群中供其他节点发现。network.host
有特殊配置 0.0.0.0
用来绑定本机的所有网络接口。其实 network.host
是 network.bind_host
和 network.publish_host
这两个高级配置的快捷配置方式。配置了 network.host
会同时设置 network.bind_host
和 network.publish_host
,而当 network.host
配置了 0.0.0.0
时(绑定本机所有网络接口),这两个参数会自动选择合适的值,通常是 network.publish_host
设置为本机 ip 地址,而 network.bind_host
设置为 127.0.0.1
环回地址,当 bind_host 设置 127.0.0.1
时,其他机器访问 ip:9200
是访问不到的。当设置了代理时才需要单独配置 network.bind_host
和 network.publish_host
,否则配置 network.host
即可。
network.bind_host
指定节点应绑定到哪个网络接口以侦听传入的请求。一个节点可以绑定到多个接口,例如两个网卡,或者一个站点本地地址和一个本地地址。默认为 network.host
。
network.publish_host
publish_host 是节点向群集中的其他节点发布的单个接口,以便这些节点可以连接到该主机。Elasticsearch 节点可能绑定到多个地址,但仅发布一个。如果未指定,则默认从 network.host
找到“最佳”的地址,按 IPv4 / IPv6 堆栈首选项,然后按可达性排序。如果设置 network.host
有多个绑定地址,但仍依赖特定地址进行节点到节点通信,则应显式设置 network.publish_host
。
discovery.seed_hosts
用来发现其他集群节点的 ip 列表集合。此设置提供了该节点将尝试联系的地址的初始列表,这个代替了以前老版本的 discovery.zen.ping.unicast.hosts
参数。
http.port
HTTP 请求端口,通常为 9200~9300。默认从低到高选择直到可用的一个
transport.port
节点通信端口,通常为 9300~9400。默认从低到高选择直到可用的一个
简单搭建集群 elasticsearch.yml 配置如下
#集群名称,同一个集群的必须一致
cluster.name: es-cluster
#节点名称,同一集群下不同
node.name: node-2
#主机绑定地址和发布地址设置
network.host: 192.168.215.132
#Http端口
http.port: 9200
#节点通信端口
transport.port: 9300
#集群节点发现地址列表包含自身
discovery.seed_hosts: ["192.168.215.132","192.168.215.131"]
启动 elasticsearch
cd /usr/local/elasticsearch-7.10.1/bin
./elasticsearch
在另外一台机上修改 node.name
和 network.host
在启动即可集群成功。
查看集群是否成功
#查看所有可用查询
http://192.168.215.131:9200/_cat
#查看当前节点信息
http://192.168.215.132:9200/_cat/health?v
#查看所有节点列表
http://192.168.215.131:9200/_cat/nodes?v
常见错误
通常修改了 network.host
之后第一次发布都失败了,主要有以下几个错误:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:
su root
vim /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
如果是在虚拟机上部署,可能还会遇到下面两个错误
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
解决方法:
vim /etc/security/limits.conf
#添加下面两行
#用户 type core value (因为我是用es用户启动的单纯设置es用户,也可以设置*)
es soft nofile 65535
es hard nofile 65535
max number of threads [3795] for user [es] is too low, increase to at least [4096]
解决方法:
vim /etc/security/limits.conf
#添加下面两行
#用户 type core value (因为我是用es用户启动的单纯设置es用户,也可以设置*)
es soft nproc 65535
es hard nproc 65535
注意问题
搭建集群时,两台 elasticsearch
应用应该是新搭建的,如果原来一台 elasticsearch
已经有数据则集群不成功。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于