一、快速入门
- Elasticsearch是一个实时分布式搜索和分析引擎
1.1 环境
- java 1.8+
- ubuntu 14.04/16.04
1.2 版本说明
- 5.X之后的字段类型不再支持string,由text或keyword取代
- 6.3支持sql
1.3 基本概念
1.2.1 索引(Indices): 同msql的db
- 每个索引都有多个分片, 每个分片是一个Lucene索引
- 分片: 默认每个索引5个分片
- 副本: 默认每个分片1个副本
1.2.2 类型(Type): 同mysql的table
- 6.x移除了types
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html
1.2.3 文档(Documents): 同mysql的rows
- 一条json串
1.2.4 字段(Fields): 同mysql的columns
- Elasticsearch为对字段类型进行猜测,动态生成了字段和类型的映射关系
- 可以预先使用mapping来定义
1.2.5 结点和集群
- 节点(node)是一个运行着的Elasticsearch实例
- 集群(cluster)是一组具有相同 cluster.name 的节点集合
二、多节点安装和部署
- 至少3个结点保证集群可用, 2个结点容易出现脑裂
2.1 安装方式
- deb/rpm方式
# ubuntu/debain
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.deb
dpkg -i elasticsearch-6.3.0.deb
- zip/tar方式: 推荐
- 便于同一台机器部署多个结点
2.2 同一台机器多节点部署
2.2.1 步骤
- 下载tar包并解压到/opt/elk/es目录
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz
tar zxvf elasticsearch-6.3.0.tar.gz -C /opt/elk/es/
- 创建elsaticsearch用户和elsaticsearch用户组, 修改文件的用户和用户组
# 创建elasticsearch用户设置密码
adduser elasticsearch
# 修改文件所属用户
chown -R elasticsearch:elasticsearch elasticsearch-6.3.0
- 修改配置
# vi /opt/elk/es/elasticsearch-6.3.0/config/elasticsearch.yml
# 集群名称,同一集群,名称要设置相同
cluster.name: my-es
# 节点名称
node.name: node-0
# 绑定ip和端口
network.host: 192.168.1.101
http.port: 9200
- 复制2个结点
cp -pR elasticsearch-6.3.0 elasticsearch-6.3.0-node-1
cp -pR elasticsearch-6.3.0 elasticsearch-6.3.0-node-2
- 修改配置: node-1的端口为9201, node-2的端口为9202
# vi elasticsearch-6.3.0-node-1/config/elasticsearch.yml
http.port: 9201
# vi elasticsearch-6.3.0-node-2/config/elasticsearch.yml
http.port: 9202
- 依次启动3个结点: es必须用非root用户启动
# 切换为elasticsearch用户启动
su -elasticsearch
# 后台启动
./elasticsearch-6.3.0/bin/elasticsearch -d
./elasticsearch-6.3.0-node-1/bin/elasticsearch -d
./elasticsearch-6.3.0-node-2/bin/elasticsearch -d
- 查看ES是否启动成功:
jps -l
2.2.3 启动报错
- max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
# vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 8192
#退出用户重新登录,使配置生效
ulimit -Hn
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
# vi /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
- max number of threads [2048] for user [vagrant] is too low, increase to at least [4096]
- es 5.x Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) failed; error='Cannot allocate memory' (errno=12)
# vi config/jvm.options
-Xms512m
-Xmx512m
2.3 不同机器部署: 两台服务器, 3个结点
- 每个结点都需要配置discovery.zen.ping.unicast.hosts
2.3.1 结点配置
- node-0: 192.168.1.100
# 集群名称,同一集群,名称要设置相同
cluster.name: my-es
# 节点名称
node.name: node-0
# 绑定ip和端口
network.host: 192.168.1.100
http.port: 9200
transport.tcp.port: 9300
# 该属性是为了形成一个集群,有主节点资格并互相连接的节点的最小数目
discovery.zen.minimum_master_nodes: 2
#关闭多播,用单播。并指定至少一个能接受单播的主机, 每个节点配置均一致
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.1.100:9300", "192.168.2.100:9300", "192.168.2.100:9301"]
- node-1: 192.168.2.100
# 集群名称,同一集群,名称要设置相同
cluster.name: my-es
# 节点名称
node.name: node-1
# 绑定ip和端口
network.host: 192.168.2.100
http.port: 9200
transport.tcp.port: 9300
# 该属性是为了形成一个集群,有主节点资格并互相连接的节点的最小数目
discovery.zen.minimum_master_nodes: 2
#关闭多播,用单播。并指定至少一个能接受单播的主机, 每个节点配置均一致
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.1.100:9300", "192.168.2.100:9300", "192.168.2.100:9301"]
- node-2: 192.168.2.100
# 集群名称,同一集群,名称要设置相同
cluster.name: my-es
# 节点名称
node.name: node-2
# 绑定ip和端口
network.host: 192.168.2.100
http.port: 9201
transport.tcp.port: 9301
# 该属性是为了形成一个集群,有主节点资格并互相连接的节点的最小数目
discovery.zen.minimum_master_nodes: 2
#关闭多播,用单播。并指定至少一个能接受单播的主机, 每个节点配置均一致
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["192.168.1.100:9300", "192.168.2.100:9300", "192.168.2.100:9301"]