ElasticSearch6.3搭建快速入门

快速入门

  • Elasticsearch是一个实时分布式搜索和分析引擎

环境

  • java 1.8+
  • ubuntu 14.04/16.04

版本说明

  • 5.X之后的字段类型不再支持string,由text或keyword取代
  • 6.3支持sql

基本概念

索引(Indices): 同msql的db

  • 每个索引都有多个分片, 每个分片是一个Lucene索引
  • 分片: 默认每个索引5个分片
  • 副本: 默认每个分片1个副本

类型(Type): 同mysql的table

  • 6.x移除了types
    • https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html

文档(Documents): 同mysql的rows

  • 一条json串

字段(Fields): 同mysql的columns

  • Elasticsearch为对字段类型进行猜测,动态生成了字段和类型的映射关系
  • 可以预先使用mapping来定义

结点和集群

  • 节点(node)是一个运行着的Elasticsearch实例
  • 集群(cluster)是一组具有相同 cluster.name 的节点集合

多节点安装和部署

  • 至少3个结点保证集群可用, 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
  1. zip/tar方式: 推荐
    • 便于同一台机器部署多个结点

同一台机器多节点部署

步骤

  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/
  1. 创建elsaticsearch用户和elsaticsearch用户组, 修改文件的用户和用户组
# 创建elasticsearch用户设置密码
adduser elasticsearch
# 修改文件所属用户
chown -R elasticsearch:elasticsearch elasticsearch-6.3.0
  1. 修改配置
# 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
  1. 复制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
  1. 修改配置: 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
  1. 依次启动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
  1. 查看ES是否启动成功: jps -l

启动报错

  1. 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
  1. 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
  1. max number of threads [2048] for user [vagrant] is too low, increase to at least [4096]
  2. 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

不同机器部署: 两台服务器, 3个结点

  • 每个结点都需要配置discovery.zen.ping.unicast.hosts

结点配置

  • 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"]

参考