Elasticsearch 6.5.1学习笔记(一)安装

Elasticsearch安装

使用docker安装

第一步下载镜像,在https://www.docker.elastic.co/中,找到6.5.1版本的Elasticsearch,复制命令:

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.5.1

执行命令下载镜像。
启动之前需要设置一下vm.max_map_count,在/etc/sysctl.conf里面添加:

vm.max_map_count = 262144

在通过 sysctl -p /etc/sysctl.conf 命令使其永久生效。

单节点启动

接下来就是启动单机版的Elasticsearch:

docker run -d --name es-single -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.5.1

后台运行,容器名称为"es-single",映射容器内的9200、9300端口,并设置启动类型为单节点,启动成功后可以访问一下:

curl http://192.168.190.133:9200

返回如下结果则启动成功:
在这里插入图片描述

docker-compose启动es伪集群

也可以使用docker-compose.yml文件来配置集群:

version: '3.7'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    container_name: elasticsearch
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9201:9200
    networks:
      - esnet
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
    container_name: elasticsearch2
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "discovery.zen.ping.unicast.hosts=elasticsearch"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata2:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata1:
    driver: local
  esdata2:
    driver: local

networks:
  esnet:

使用docker-compose up来启动,在这里,会启动俩个Elasticsearch容器。
启动成功后使用docker-compose ps 查看启动情况:
在这里插入图片描述
验证一下es集群是否正常:
在这里插入图片描述

docker启动es集群

准备俩台机器:192.168.1.129192.168.1.164
俩台机器都需要在/etc/sysctl.conf里面添加:

vm.max_map_count = 262144

在通过 sysctl -p /etc/sysctl.conf 命令使其永久生效。
第一个节点启动:

docker run -d --name es01 \
-v es01data:/usr/share/elasticsearch/data \
-v /usr/local/es-config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-p 19200:19200 -p 19300:19300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --ulimit memlock=-1:-1\
 docker.elastic.co/elasticsearch/elasticsearch:6.5.1

这里使用目录映射的方式实现自定义配置,这里设置一下elasticsearch.yml的用户组:chgrp 1000 elasticsearch.yml,以便容器能够拥有足够的权限进行访问,对于data、logs文件夹同样适用,自定义elasticsearch.yml内容如下:

cluster.name: es-cluster #es集群名称,同一个集群名称需要相同
node.name: es01 #当前节点在集群中的名称,集群中唯一
bootstrap.memory_lock: true #锁定内存,禁止交换区交换,提升es性能
network.bind_host: 0.0.0.0 #可访问es的ip,0.0.0.0表示任意ip均可访问
network.publish_host: 192.168.1.129 #对外公开用于集群信息交互的ip,设置为容器的宿主机Ip
http.port: 19200 #设置以http形式访问es的端口,通常是使用es的api来进行数据访问
transport.tcp.port: 19300 #设置集群节点之间信息交互的tcp接口
discovery.zen.ping.unicast.hosts: ["192.168.1.164:19300"] #用于发现集群中其他任意个数的节点位置
discovery.zen.minimum_master_nodes: 1 #形成集群所需要的最小节点数,官方建议设置为:节点总数/2+1

第二个节点启动:

docker run -d --name es02 \
-v es02data:/usr/share/elasticsearch/data \
-v /usr/local/es-config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-p 19200:19200 -p 19300:19300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --ulimit memlock=-1:-1\
 docker.elastic.co/elasticsearch/elasticsearch:6.5.1

自定义elasticsearch.yml内容如下:

cluster.name: es-cluster
node.name: es02
bootstrap.memory_lock: true
network.bind_host: 0.0.0.0
network.publish_host: 192.168.1.164
http.port: 19200
transport.tcp.port: 19300
discovery.zen.ping.unicast.hosts: ["192.168.1.129:19300"]
discovery.zen.minimum_master_nodes: 1

俩个节点都启动成功后,可使用curl http://192.168.1.164:19200/_cat/health访问集群状态:

1543214770 06:46:10 es-cluster green 2 2 0 0 0 0 0 0 - 100.0%

多主机集群启动时遇到的问题

注意:宿主机在端口映射时,建议与transport.tcp.port端口一致,此处有遇到过一个问题,当我为es01做19300:9300这样的端口映射时,尽管我给es02节点的配置为:discovery.zen.ping.unicast.hosts: ["192.168.1.129:19300"],但在启动时es02的日志中却在不停的向192.168.1.129:9300发起链接请求,导致链接不成功,集群启动失败。
报错信息如下:

[2018-11-26T05:58:44,691][WARN ][o.e.d.z.ZenDiscovery     ] [es02] failed to connect to master [{es01}{-lnfIuNNSAimJ_DZIT0P7A}{hVrCg4JGSz6S8tJJQBrrrg}{192.168.1.129}{192.168.1.129:9300}{ml.machine_memory=3956260864, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}], retrying...
org.elasticsearch.transport.ConnectTransportException: [es01][192.168.1.129:9300] connect_exception
	at org.elasticsearch.transport.TcpChannel.awaitConnected(TcpChannel.java:165) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.transport.TcpTransport.openConnection(TcpTransport.java:454) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.transport.TcpTransport.openConnection(TcpTransport.java:117) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.transport.ConnectionManager.internalOpenConnection(ConnectionManager.java:237) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.transport.ConnectionManager.connectToNode(ConnectionManager.java:119) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.transport.TransportService.connectToNode(TransportService.java:369) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.transport.TransportService.connectToNode(TransportService.java:356) ~[elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.discovery.zen.ZenDiscovery.joinElectedMaster(ZenDiscovery.java:507) [elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.discovery.zen.ZenDiscovery.innerJoinCluster(ZenDiscovery.java:475) [elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.discovery.zen.ZenDiscovery.access$2500(ZenDiscovery.java:88) [elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.discovery.zen.ZenDiscovery$JoinThreadControl$1.run(ZenDiscovery.java:1245) [elasticsearch-6.5.1.jar:6.5.1]
	at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:624) [elasticsearch-6.5.1.jar:6.5.1]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
	at java.lang.Thread.run(Thread.java:834) [?:?]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章