Elaticsearch 搭建笔记

本贴最后更新于 328 天前,其中的信息可能已经时过境迁

简介

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.hostnetwork.bind_hostnetwork.publish_host 这两个高级配置的快捷配置方式。配置了 network.host 会同时设置 network.bind_hostnetwork.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_hostnetwork.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.namenetwork.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 已经有数据则集群不成功。

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    106 引用 • 99 回帖 • 427 关注

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...