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) [?:?]

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