ElasticSearch多节点部署

一、快速入门

  • 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 安装方式

  1. deb/rpm方式
    # ubuntu/debain
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.deb
    dpkg -i elasticsearch-6.3.0.deb
  2. zip/tar方式: 推荐
    • 便于同一台机器部署多个结点

2.2 同一台机器多节点部署

2.2.1 步骤

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

2.2.3 启动报错

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

三、参考

标签: none

已有 2 条评论

  1. 哇,发现我们两个人的博客内容,好相似~~

    宇宙湾(https://yuzhouwan.com)

    1. 你的博客写的很赞, 学习了

添加新评论