Elasticsearch扫盲之二:ElasticSearch安装及集群部署

一、ElasticSearch的安装

各系统都有对应的二进制包,这里以Linux安装为例

1.下载二进制包
  1. wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
2.解压二进制包
  1. tar -zxvf elasticsearch-6.6.0.tar.gz
3.将解压后的二进制表移动到目标位置
  1. mv elasticsearch-6.6.0 /opt/elasticsearch
4.ElasticSearch的启动
  1. cd /opt/elasticsearch/bin
  2. ./elasticsearch

它默认在9200端口开放服务,通过浏览器或者curl来访问即可:

  1. curl http://localhost:9200

正常启动的情况下显示如下信息:

  1. {
  2. "name": "VQ5yFNC",
  3. "cluster_name": "elasticsearch",
  4. "cluster_uuid": "UCsSRYt5QrOzvsuYwdPuiQ",
  5. "version": {
  6. "number": "6.6.0",
  7. "build_flavor": "default",
  8. "build_type": "tar",
  9. "build_hash": "a9861f4",
  10. "build_date": "2019-01-24T11:27:09.439740Z",
  11. "build_snapshot": false,
  12. "lucene_version": "7.6.0",
  13. "minimum_wire_compatibility_version": "5.6.0",
  14. "minimum_index_compatibility_version": "5.0.0"
  15. },
  16. "tagline": "You Know, for Search"
  17. }

启动ElasticSearch失败常见问题说明:

思路:通过日志查看错误信息

  • 1.因为系统文件描述符数限制

错误提示信息类似于:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

在系统配置文件目录添加:/etc/security/limits.d/es.conf

  1. * soft nofile 65536
  2. * hard nofile 131072
  3. * soft nproc 4096
  4. * hard nproc 4096
  • 2.最大线程数过小

错误提示信息类似于:max number of threads [2048] for user [*] is too low, increase to at least [4096]

和第一个问题一样,第一个问题的后两个就指定了线程数的大小

  • 3.虚拟内存块过小

错误提示信息类似于:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

修改启动配置,在/etc/sysctl.conf中添加以下内容:

  1. vm.max_map_count=262144
  • 4.本机可以访问,其他机器不能访问
    • (1)访问前请检查防火墙是否关闭

CentOS7.x防火墙操作命令如下:

  • 启动: systemctl start firewalld
  • 关闭: systemctl stop firewalld
  • 查看状态: systemctl status firewalld
  • 开机禁用 : systemctl disable firewalld
  • 开机启用 : systemctl enable firewalld
    • (2)Es默认绑定的是本机的IP,其他机器不能访问,修改elasticsearch配置文件elasticsearch.yml
  1. network.host:0.0.0.0
5.创建管理ElasticSearch的脚本
  1. #!/bin/bash
  2. #chkconfig: 2345 80 05
  3. #description:ElasticSearch control script
  4. JAVA_HOME=/opt/java
  5. PORT=9200
  6. ES_HOME=/opt/elasticsearch
  7. ES_BIN=${ES_HOME}/bin
  8. NAME="ElasticSearch"
  9. export PATH=${PATH}:${JAVA_HOME}
  10. function start() {
  11. cd ${ES_BIN}
  12. pid=`netstat -npl|grep ${PORT}|awk '{print $7}'|grep '[0-9]\+' -o`
  13. if [ -z "$pid" ] ; then
  14.   ./elasticsearch -d
  15.   echo "${NAME} startup ......"
  16. else
  17. echo "${NAME} is running"
  18. fi
  19. }
  20. function stop() {
  21. pid=`netstat -npl|grep ${PORT}|awk '{print $7}'|grep '[0-9]\+' -o`
  22. if [ -z "$pid" ] ; then
  23. echo "${NAME} is not running"
  24. else
  25. kill -9 $pid
  26. echo "${NAME} stopped ......"
  27. fi
  28. }
  29. case "$1" in
  30.  start)
  31. start
  32. ;;
  33. stop)
  34. stop
  35. ;;
  36. restart)
  37. stop
  38. sleep 1
  39. start
  40. ;;
  41. version)
  42. cd ${ES_BIN}
  43. ./elasticsearch -V
  44. ;;
  45. *)
  46. echo "USAGE : $0 start|stop|restart"
  47. ;;
  48. esac
  • JAVA_HOME : java的安装位置
  • ES_HOME : ElasticSearch的安装路径
  • NAME : 脚本中ElasticSearch显示的名称
6.安装ElasticSearch可视化工具kibana
(1)下载kibana二进制包
  1. wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-linux-x86_64.tar.gz
(2)解压压缩包到目标位置
  1. tar -zxvf kibana-6.6.0-linux-x86_64.tar.gz
  2. mv kibana-6.6.0-linux-x86_64 /opt/kibana
(3)启动kibana
  1. cd /opt/kibana/bin
  2. ./kibana

kibana管理脚本:

  1. #!/bin/bash
  2. #chkconfig: 2345 80 05
  3. #description:Kibana control script
  4. KIBANA_HOME=/opt/tools/kibana
  5. KIBANA_BIN=${KIBANA_HOME}/bin/kibana
  6. LOG_PATH=${KIBANA_HOME}/logs
  7. LOG_FILE=${LOG_PATH}/kibana.log
  8. PORT=5601
  9. NAME="Kibana"
  10. function start() {
  11. pid=`netstat -npl|grep ${PORT}|awk '{print $7}'|grep '[0-9]\+' -o`
  12. if [ -z "$pid" ] ; then
  13. if [ ! -d "$LOG_PATH" ] ; then
  14. mkdir ${LOG_PATH}
  15. fi
  16. ${KIBANA_BIN} serve -p ${PORT} > ${LOG_FILE} 2>&1 &
  17. echo "${NAME} startup ......"
  18. else
  19. echo "${NAME} is running"
  20. fi
  21. }
  22. function stop() {
  23. pid=`netstat -pl|grep ${PORT}|awk '{print $7}'|grep '[0-9]\+' -o`
  24. if [ -z "$pid" ] ; then
  25. echo "${NAME} is not running"
  26. else
  27. kill -9 $pid
  28. echo "${NAME} stopped ......"
  29. fi
  30. }
  31. case "$1" in
  32. start)
  33. start
  34. ;;
  35. stop)
  36. stop
  37. ;;
  38. restart)
  39. stop
  40. sleep 1
  41. start
  42. ;;
  43. *)
  44. echo "usage : $1 start|stop|restart"
  45. ;;
  46. esac
  • KIBANA_HOME : kibana的安装地址
  • LOG_PATH : 启动日志目录
  • PORT : 启动http服务的端口
(4)访问kibana

在浏览器中访问:http://localhost:5601

二、ElasticSearch的配置说明

1.ElasticSearch本身的配置

配置文件所在位置:ElasticSearch安装目录/config/elasticsearch.yml

(1)集群
  • cluster.name : 集群名称(同一集群,所有节点的cluster.name是一致的)
  • discovery.zen.ping.unicast.hosts : 集群中节点的集合
  • discovery.zen.minimum_master_nodes : 集群中主节点的个数(不少于总节点数的一半+1)
(2)节点
  • node.name : 节点的名称
  • network.host : 节点绑定的IP地址(如果让所有机器都访问可以填写0.0.0.0)
  • http.port : 节点对外提供HTTP服务的端口
  • node.attr.attrName : 节点自定义的属性配置(如自定义属性名称为attrName)
(3)存储路径
  • path.data : 数据存储地址
  • path.logs : 日志存储地址
(4)内存
  • bootstrap.memory_lock : JVM将在启动时锁定堆(heap)的初始(Xms)大小
(5)网关
  • gateway.recover_after_nodes : 当集群重启时至少有超过指定节点数启动后才进行数据恢复
(6)其他变量
  • action.destructive_requires_name : 当删除索引时是否需要明确的索引名称
2.ElasticSearch的JVM主要参数配置

配置文件所在位置:ElasticSearch安装目录/config/jvm.options

  • Xms : 最小分配的堆内存大小(初始化内存)
  • Xmx : 最大分配的堆内存大小
  • XX: HeapDumpPath:堆内存使用情况dump文件目录
3.ElasticSearch日志配置

配置文件所在位置:ElasticSearch安装目录/config/log4j2.properties

三、ElasticSearch集群部署

1.集群节点说明
节点名称 节点IP(或主机名称) 端口
ElasticSearch节点1 192.168.0.200 9200
ElasticSearch节点2 192.168.0.201 9200
ElasticSearch节点3 192.168.0.202 9200
2.依次修改各节点的配置文件

配置文件为:安装目录下的 config/elasticsearch.yml

  1. cluster.name=goods-search
  2. node.name=goods-search-1
  3. path.data=/data/storage/elasticsearch
  4. path.logs=/data/logs/elasticsearch
  5. network.host=192.168.0.200
  6. http.port=9200
  7. discovery.zen.ping.unicast.hosts=["192.168.0.200", "192.168.0.201", "192.168.0.202"]
  8. discovery.zen.minimum_master_nodes=2
  • cluster.name : 集群名称(集群各节点的cluster.name要一致)
  • node.name : 当前节点的名称(各节点请修改成各自的节点名称)
  • path.data : 数据存储路径
  • path.logs : 日志存储路径
  • network.host : 当前节点的IP地址
  • http.port : 当前节点对外提供的HTTP服务端口(9300为集群服务端口)
  • discovery.zen.ping.unicast.hosts : 集群节点集合(可以是ip,也可以是主机名)
  • discovery.zen.minimum_master_nodes : 最少的主节点个数(主节点数最少为 集群节点总数的半数+1)

注:

node.name 和 network.host各节点是不同的值,根据节点实际情况修改

3.启动各节点

在启动各节点前,请先删除安装目录data下的数据(如果配置文件设置了path.data,则删除path.data指定的目录下的文件)

4.查看集群信息

http://192.168.0.200:9200/_cluster/health?pretty

结果类似于下面:

  1. {
  2. "cluster_name" : "common-search",
  3. "status" : "green",
  4. "timed_out" : false,
  5. "number_of_nodes" : 3,
  6. "number_of_data_nodes" : 3,
  7. "active_primary_shards" : 1,
  8. "active_shards" : 2,
  9. "relocating_shards" : 0,
  10. "initializing_shards" : 0,
  11. "unassigned_shards" : 0,
  12. "delayed_unassigned_shards" : 0,
  13. "number_of_pending_tasks" : 0,
  14. "number_of_in_flight_fetch" : 0,
  15. "task_max_waiting_in_queue_millis" : 0,
  16. "active_shards_percent_as_number" : 100.0
  17. }