Elasticsearch 安装
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎。
概念
功能
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理 PB 级别的结构化或非结构化数据。
基本概念
- 集群(Cluster):ES 是一个分布式的搜索引擎,一般由多台物理机组成。这些物理机通过配置一个相同的 cluster name,互相发现,把自己组成一个集群。
- 节点(Node):同一个集群中的一个 Elasticsearch 主机。
- Master Node: 集群管理。
- 控制 Elasticsearch 集群,并负责在集群范围内创建 / 删除索引,跟踪哪些节点是集群的一部分,并将分片分配给这些节点。主节点一次处理一个集群状态,并将状态广播到所有其它节点,这些节点需要响应并确认主节点的信息。
- 在 Elasticsearch.yml 中,将 nodes.master 属性设置为 true(默认),可以将节点配置为有资格成为主节点的节点。
- 对于大型生产集群,建议拥有一个专用主节点来控制集群,并且不服务任何用户请求。
- Client Node: 处理转发客户端请求到 Data Node。
- 如果将 node.master 和 node.data 设置为false,则将节点配置为客户端节点,并充当负载平衡器,将传入的请求路由到集群中的不同节点。
- 若连接的是作为客户端的节点,该节点称为协调节点。协调节点将客户机请求路由到集群中对应分片所在的节点。对于读取请求,协调节点每次选择不同的分片来提供请求以平衡负载。
- Data Node: 用来保存数据和倒排索引。默认情况下,每个节点都配置为一个 data 节点,并且在 elasticsearch.yml 中将属性 node.data 设置为 true。如果想要一个专用的master 节点,需将 node.data 属性更改为 false。
- 主分片(Primary Shard):索引的一个物理子集。同一个索引在物理上可以切多个分片,分布到不同的节点上。分片的实现是 Lucene 中的索引。
注:ES 中一个索引的分片个数是建立索引时就要指定的,建立后不可再改变。所以开始建立一个索引时,就要预计数据规模,将分片的个数分配在一个合理的范围。
- 副本分片(Replica Shard):每个主分片可以有一个或多个副本,个数是用户自己配置的。ES 会尽量将同一索引的不同分片分布到不同的节点上,提高容错性。对一个索引,只要不是所有 Shards 所在的机器都挂了,就还能用。
- 索引(Index):逻辑概念,一个可检索的文档对象的集合。类似于 DB 中的 Database 概念。同一个集群中可建立多个索引。比如,生产环境常见的一种方法,对每个月产生的数据建索引,以保证单个索引的量级可控。
- 类型(Type):索引的下一级概念,大概相当于数据库中的 Table。同一个索引里可以包含多个 Type。
- 文档(Document):即搜索引擎中的文档概念,也是 ES 中一个可以被检索的基本单位,相当于数据库中的 Row,一条记录。
- 字段(Field):相当于数据库中的 Column。ES 中,每个文档是以 JSON 形式存储的,一个文档可以被视为多个字段的集合。
- 映射(Mapping):相当于数据库中的 Schema,用来约束字段的类型,不过 ES 的 Mapping 可以不显示地指定、自动根据文档数据创建。
ES 与关系型数据库对比
| Relational Database | Elasticsearch |
| ———————- | ——————— |
| Database(数据库) | Index(索引库) |
| Table(表) | Type(类型) |
| Row(行) | Document(文档) |
| Column(列) | Field(字段) |
| Schema | Mapping |
| Index | Everything is indexed |
| SQL | Query DSL |
| SELECT * FROM TABLE… | GET http://… |
| UPDATE TABLE SET … | PUT http://… |
安装
系统环境准备
注:没有特殊说明,所有的指令在三台虚拟机中执行。
1、系统配置
三台初始状态虚拟机『caroly01』『caroly02』『caroly03』,系统版本为:『CentOS-6.8-x86_64』
2、JDK 配置
rpm -i jdk-8u251-linux-x64.rpm vi /etc/profile + export JAVA_HOME=/usr/java/jdk1.8.0_251-amd64 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar . /etc/profile
3、解压工具安装
yum install unzip
4、创建用户
useradd caroly passwd caroly
5、创建目录
mkdir -p /opt/caroly/es
chown caroly:caroly /opt/caroly/es
Elasticsearch 安装
注:只允许普通用户操作,不允许 root 用户
因为 elasticsearch 有远程执行脚本的功能所以容易中木马病毒,所以不允许使用 root 用户启动,root 用户是起不来的。赋权限,用一般的用户启动。
1、切换用户
su caroly
2、解压(『caroly01』)
unzip elasticsearch-2.2.1.zip -d /opt/caroly/es/
3、修改配置文件(『caroly01』)
cd /opt/caroly/es/elasticsearch-2.2.1/config
vi elasticsearch.yml
修改如下行号的配置:nodename 随意取但是集群内的各节点不能相同。
change 17: cluster.name: caroly-es change 23: node.name: caroly01 change 54: network.host: 192.168.240.151 change 58: http.port: 9200
末尾增加防脑裂:如果不配不知道具体数量,不好控制脑裂
discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["192.168.240.151","192.168.240.152", "192.168.240.153"] discovery.zen.ping_timeout: 120s client.transport.ping_timeout: 60s
添加 head 插件(『caroly01』):ES 是 rest 方式,采用 Json 格式,可读性不强,添加 head 插件,以图表方式显示
su
cd/opt/caroly/es/elasticsearch-2.2.1
chown caroly:caroly -R plugins/
su caroly
添加分词器插件(『caroly01』)
cd /opt/caroly/es/elasticsearch-2.2.1/plugins
mkdir ik cd ik
unzip elasticsearch-analysis-ik-1.8.0.zip
rm -rf elasticsearch-analysis-ik-1.8.0.zip
vi plugin-descriptor.properties +
修改如下行号信息:
ES 版本要对应,不然启动不了
change 64: java.version=1.8 change 71: elasticsearch.version=2.2.1
分发 ES(『caroly01』)
cd /opt/caroly/es/
scp -r elasticsearch-2.2.1/ caroly@caroly02:`pwd`
scp -r elasticsearch-2.2.1/ caroly@caroly03:`pwd`
修改配置文件(『caroly02』)
su caroly
vi /opt/caroly/es/elasticsearch-2.2.1/config/elasticsearch.yml
修改如下行号的配置:
change 23 node.name: caroly02 change 54 network.host: 192.168.240.152
修改配置文件(『caroly02』)
su caroly
vi /opt/caroly/es/elasticsearch-2.2.1/config/elasticsearch.yml
修改如下行号的配置:
change 23 node.name: caroly03 change 54 network.host: 192.168.240.153
启动
cd /opt/caroly/es/elasticsearch-2.2.1/bin
./elasticsearch
访问(『caroly01』)
ss -nal
浏览器中访问:
caroly01:9200
caroly01:9200/_plugin/head/