安裝配置ElasticSearch

環(huán)境配置參考 ELK環(huán)境配置

安裝配置ElasticSearch

  • 解壓壓縮包,并移至/usr/local目錄下
    tar zxf elasticsearch-5.5.2.tar.gz
    mv /opt/elk/elasticsearch-5.5.2 /usr/local/elasticsearch
    
  • 修改ES啟動腳本中ES_JAVA_OPTS
    vim /usr/local/elasticsearch/bin/elasticsearch
    修改腳本中的ES_JAVA_OPTS參數(shù),設(shè)置分配給ES的內(nèi)存大小
    ES_JAVA_OPTS="-Xms4g -Xmx4g"
    
  • 新增elastic組及用戶, 因為ES不允許root用戶啟動
    groupadd elastic
    useradd elastic -g elastic
    echo 'elastic' | passwd --stdin elastic
    chown -R elastic:elastic /usr/local/elasticsearch
    
  • 配置elasticsearch的配置文件(文末給出詳細配置文件說明)
    vim /usr/local/elasticsearch/config/elasticsearch.yml
    
    cluster.name: es-dev-cluster    # 集群名稱
    node.name: elk-dev-101      # 節(jié)點名稱 每個節(jié)點不同
    node.master: true       # 允許一個節(jié)點是否可以成為一個master節(jié)點 
    node.data: true         # 允許該節(jié)點存儲數(shù)據(jù)(默認開啟)
    bootstrap.memory_lock: true     
    bootstrap.system_call_filter: false    # centos7以下版本需要將這個參數(shù)設(shè)置為false
    network.host: 0.0.0.0
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["10.8.189.101:9300", "10.8.189.102:9300", "10.8.189.103:9300"]
    discovery.zen.minimum_master_nodes: 2
    discovery.zen.ping_timeout: 60s        # 網(wǎng)上大部分文章這個參數(shù)都寫成了discovery.zen.ping.timeout
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
    su elastic
    /usr/local/elasticsearch/bin/elasticsearch -d #啟動elasticsearch   不能使用root用戶啟動
    
  • 測試是否啟動成功,有以下輸出即啟動成功
    curl 'http://localhost:9200'
    
    {
      "name" : "elk-dev-103",
      "cluster_name" : "es-dev-cluster",
      "cluster_uuid" : "iKOVEPM2RayoiHD4jB462A",
      "version" : {
        "number" : "5.5.2",
        "build_hash" : "b2f0c09",
        "build_date" : "2017-08-14T12:33:14.154Z",
        "build_snapshot" : false,
        "lucene_version" : "6.6.0"
      },
      "tagline" : "You Know, for Search"
    }
    
  • 查看ElasticSearch的索引
curl 'localhost:9200/_cat/indices?v'

health status index                  uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana                S3RGLrRBSPi_3cj8n_MlGg   1   1          1            0      6.4kb          3.2kb
green  open   logstash-2017.09.12.09 y_M5oi45QLaWqpJW9Jld9A   5   1         38            0    197.4kb        101.8kb

配置遇到的錯誤及解決辦法

  • 啟動中遇到了elastic啟動之后就掛掉的情況,日志中記錄為

    [4] bootstrap checks failed
    [1]: max file descriptors [65532] for elasticsearch process is too low, increase to at least [65536]
    [2]: memory locking requested for elasticsearch process but memory is not locked
    [3]: max number of threads [1024] for user [elastic] is too low, increase to at least [2048]
    [4]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    
  • 具體解決辦法為

    ## 這些報錯的原因基本上全是系統(tǒng)參數(shù)的配置問題,所以只用修改服務(wù)器系統(tǒng)參數(shù)并生效即可
    
    echo -e "\nelastic         -       nofile          65538" >> /etc/security/limits.conf   #對應(yīng)解決第一條問題
    echo -e "\nelastic         -       memlock         unlimited" >> /etc/security/limits.conf   #對應(yīng)解決第二條問題
    echo -e "\nelastic         -       nproc         2048" >> /etc/security/limits.d/90-nproc.conf   #對應(yīng)解決第三條問題
    echo -e "\nvm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p && sysctl -w vm.max_map_count=262144 #對應(yīng)解決第四條問題
    

安裝ElasticSearch的插件,用來監(jiān)控ES集群狀態(tài)

根據(jù)之前的架構(gòu)設(shè)計,將插件裝在10.8.189.103上

  • 安裝NodeJS

    yum -y install xz
    tar xJf node-v6.11.2-linux-x64.tar.xz
    mv /opt/elk/node-v6.11.2-linux-x64 /usr/local/node
    ln -s /usr/local/node/bin/node /usr/local/bin/
    ln -s /usr/local/node/bin/npm /usr/local/bin/
    
  • 安裝ELK插件 建議安裝在nginx監(jiān)聽的服務(wù)器上,兩個插件只用安裝在同一臺機器即可

    • ElasticSearch-Head 是一個與Elastic集群(Cluster)相交互的Web前臺

      它展現(xiàn)ES集群的拓撲結(jié)構(gòu),并且可以通過它來進行索引(Index)和節(jié)點(Node)級別的操作
      它提供一組針對集群的查詢API,并將結(jié)果以json和表格形式返回
      它提供一些快捷菜單,用以展現(xiàn)集群的各種狀態(tài)

    node8.4 npm5.3安裝失敗,GitHub搜索結(jié)果發(fā)現(xiàn)為npm版本太新導致,使用node6版本

    cd /usr/local/elasticsearch  #此目錄下權(quán)限必須為elastic,不然安裝會報權(quán)限不對
    git clone https://github.com/mobz/elasticsearch-head.git
    cd elasticsearch-head
    npm install -g grunt --registry=https://registry.npm.taobao.org  # 安裝grunt
    npm install # 安裝head
    nohup /usr/local/elasticsearch/elasticsearch-head/node_modules/grunt/bin/grunt server &  # 啟動head插件
    
    訪問地址為http://10.8.189.103:9100 
    
  • 安裝bigdesk插件

    Bigdesk為Elastic集群提供動態(tài)的圖表與統(tǒng)計數(shù)據(jù)

    cd /usr/local/elasticsearch
    git clone https://github.com/hlstudio/bigdesk
    cd /usr/local/elasticsearch/bigdesk/_site
    nohup python -m SimpleHTTPServer &   # 啟動bigdesk插件
    
    訪問地址http://10.8.189.103:8000 
    

ES配置文件詳細說明

#==================================================
# 配置文件中給出了三種配置高性能集群拓撲結(jié)構(gòu)的模式,如下:
# 1. 如果你想讓節(jié)點從不選舉為主節(jié)點,只用來存儲數(shù)據(jù),可作為負載器
node.master: false
node.data: true
#
# 2. 如果想讓節(jié)點成為主節(jié)點,且不存儲任何數(shù)據(jù),并保有空閑資源,可作為協(xié)調(diào)器
node.master: true
node.data: false
#
# 3. 如果想讓節(jié)點既不稱為主節(jié)點,又不成為數(shù)據(jù)節(jié)點,那么可將他作為搜索器,從節(jié)點中獲取數(shù)據(jù),生成搜索結(jié)果等
node.master: false
node.data: false

#==================================================
# 配置文件存儲位置
path.conf: /path/to/conf
# 數(shù)據(jù)存儲位置(單個目錄設(shè)置)
path.data: /path/to/data
# 多個數(shù)據(jù)存儲位置,有利于性能提升
path.data: /path/to/data1,/path/to/data2
# 臨時文件的路徑
path.work: /path/to/work
# 日志文件的路徑
path.logs: /path/to/logs
# 插件安裝路徑
path.plugins: /path/to/plugins

#==================================================
# 設(shè)置索引的分片數(shù),默認為5
index.number_of_shards: 5
# 設(shè)置索引的副本數(shù),默認為1:
index.number_of_replicas: 1
# 配置文件中提到的最佳實踐是,如果服務(wù)器夠多,可以將分片提高,盡量將數(shù)據(jù)平均分布到大集群中去
# 同時,如果增加副本數(shù)量可以有效的提高搜索性能
# 需要注意的是,"number_of_shards" 是索引創(chuàng)建后一次生成的,后續(xù)不可更改設(shè)置
# "number_of_replicas" 是可以通過API去實時修改設(shè)置的

#==================================================
# 設(shè)置插件作為啟動條件,如果一下插件沒有安裝,則該節(jié)點服務(wù)不會啟動
plugin.mandatory: mapper-attachments,lang-groovy

#==================================================
# 當JVM開始寫入交換空間時(swapping)ElasticSearch性能會低下,你應(yīng)該保證它不會寫入交換空間
# 設(shè)置這個屬性為true來鎖定內(nèi)存,同時也要允許elasticsearch的進程可以鎖住內(nèi)存,linux下可以通過 `ulimit -l unlimited` 命令
bootstrap.mlockall: true
# 確保 ES_MIN_MEM 和 ES_MAX_MEM 環(huán)境變量設(shè)置為相同的值,以及機器有足夠的內(nèi)存分配給Elasticsearch
# 注意:內(nèi)存也不是越大越好,一般64位機器,最大分配內(nèi)存別才超過32G

#==================================================
# 設(shè)置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0
network.bind_host: 192.168.0.1
# 設(shè)置其它節(jié)點和該節(jié)點交互的ip地址,如果不設(shè)置它會自動設(shè)置,值必須是個真實的ip地址
network.publish_host: 192.168.0.1
# 同時設(shè)置bind_host和publish_host上面兩個參數(shù)
network.host: 192.168.0.1
# 設(shè)置節(jié)點間交互的tcp端口,默認是9300
transport.tcp.port: 9300
# 設(shè)置是否壓縮tcp傳輸時的數(shù)據(jù),默認為false,不壓縮
transport.tcp.compress: true
# 設(shè)置對外服務(wù)的http端口,默認為9200
http.port: 9200
# 設(shè)置請求內(nèi)容的最大容量,默認100mb
http.max_content_length: 100mb
# 使用http協(xié)議對外提供服務(wù),默認為true,開啟
http.enabled: false

#==================================================
# 設(shè)置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0
network.bind_host: 192.168.0.1
# 設(shè)置其它節(jié)點和該節(jié)點交互的ip地址,如果不設(shè)置它會自動設(shè)置,值必須是個真實的ip地址
network.publish_host: 192.168.0.1
# 同時設(shè)置bind_host和publish_host上面兩個參數(shù)
network.host: 192.168.0.1
# 設(shè)置節(jié)點間交互的tcp端口,默認是9300
transport.tcp.port: 9300
# 設(shè)置是否壓縮tcp傳輸時的數(shù)據(jù),默認為false,不壓縮
transport.tcp.compress: true
# 設(shè)置對外服務(wù)的http端口,默認為9200
http.port: 9200
# 設(shè)置請求內(nèi)容的最大容量,默認100mb
http.max_content_length: 100mb
# 使用http協(xié)議對外提供服務(wù),默認為true,開啟
http.enabled: false

#==================================================
# gateway的類型,默認為local即為本地文件系統(tǒng),可以設(shè)置為本地文件系統(tǒng)
gateway.type: local
# 下面的配置控制怎樣以及何時啟動一整個集群重啟的初始化恢復過程
# (當使用shard gateway時,是為了盡可能的重用local data(本地數(shù)據(jù)))
# 一個集群中的N個節(jié)點啟動后,才允許進行恢復處理
gateway.recover_after_nodes: 1
# 設(shè)置初始化恢復過程的超時時間,超時時間從上一個配置中配置的N個節(jié)點啟動后算起
gateway.recover_after_time: 5m
# 設(shè)置這個集群中期望有多少個節(jié)點.一旦這N個節(jié)點啟動(并且recover_after_nodes也符合),
# 立即開始恢復過程(不等待recover_after_time超時)
gateway.expected_nodes: 2

#==================================================
# 下面這些配置允許在初始化恢復,副本分配,再平衡,或者添加和刪除節(jié)點時控制節(jié)點間的分片分配
# 設(shè)置一個節(jié)點的并行恢復數(shù)
# 1.初始化數(shù)據(jù)恢復時,并發(fā)恢復線程的個數(shù),默認為4
cluster.routing.allocation.node_initial_primaries_recoveries: 4
#
# 2.添加刪除節(jié)點或負載均衡時并發(fā)恢復線程的個數(shù),默認為2
cluster.routing.allocation.node_concurrent_recoveries: 2
# 設(shè)置恢復時的吞吐量(例如:100mb,默認為0無限制.如果機器還有其他業(yè)務(wù)在跑的話還是限制一下的好)
indices.recovery.max_bytes_per_sec: 20mb
# 設(shè)置來限制從其它分片恢復數(shù)據(jù)時最大同時打開并發(fā)流的個數(shù),默認為5
indices.recovery.concurrent_streams: 5
# 注意: 合理的設(shè)置以上參數(shù)能有效的提高集群節(jié)點的數(shù)據(jù)恢復以及初始化速度

#==================================================
# 設(shè)置這個參數(shù)來保證集群中的節(jié)點可以知道其它N個有master資格的節(jié)點.默認為1,對于大的集群來說,可以設(shè)置大一點的值(2-4)
discovery.zen.minimum_master_nodes: 1
# 探查的超時時間,默認3秒,提高一點以應(yīng)對網(wǎng)絡(luò)不好的時候,防止腦裂
discovery.zen.ping.timeout: 3s
# For more information, see
# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
# 設(shè)置是否打開多播發(fā)現(xiàn)節(jié)點.默認是true.
# 當多播不可用或者集群跨網(wǎng)段的時候集群通信還是用單播吧
discovery.zen.ping.multicast.enabled: false
# 這是一個集群中的主節(jié)點的初始列表,當節(jié)點(主節(jié)點或者數(shù)據(jù)節(jié)點)啟動時使用這個列表進行探測
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
# Slow Log部分與GC log部分略,不過可以通過相關(guān)日志優(yōu)化搜索查詢速度

#==================================================
# Cache部分:
# es有很多種方式來緩存其內(nèi)部與索引有關(guān)的數(shù)據(jù).其中包括filter cache
# filter cache部分:
# filter cache是用來緩存filters的結(jié)果的.默認的cache type是node type.node type的機制是所有的索引內(nèi)部的分片共享filter cache.node type采用的方式是LRU方式.即:當緩存達到了某個臨界值之后,es會將最近沒有使用的數(shù)據(jù)清除出filter cache.使讓新的數(shù)據(jù)進入es.
# 這個臨界值的設(shè)置方法如下:indices.cache.filter.size 值類型:eg.:512mb 20%。默認的值是10%。
# out of memory錯誤避免過于頻繁的查詢時集群假死
# 1.設(shè)置es的緩存類型為Soft Reference,它的主要特點是據(jù)有較強的引用功能.只有當內(nèi)存不夠的時候,才進行回收這類內(nèi)存,因此在內(nèi)存足夠的時候,它們通常不被回收.另外,這些引用對象還能保證在Java拋出OutOfMemory異常之前,被設(shè)置為null.它可以用于實現(xiàn)一些常用圖片的緩存,實現(xiàn)Cache的功能,保證最大限度的使用內(nèi)存而不引起OutOfMemory.在es的配置文件加上index.cache.field.type: soft即可.
# 2.設(shè)置es最大緩存數(shù)據(jù)條數(shù)和緩存失效時間,通過設(shè)置index.cache.field.max_size: 50000來把緩存field的最大值設(shè)置為50000,設(shè)置index.cache.field.expire: 10m把過期時間設(shè)置成10分鐘.
index.cache.field.max_size: 50000
index.cache.field.expire: 10m
index.cache.field.type: soft

# field data部分&&circuit breaker部分:
# 用于field data 緩存的內(nèi)存數(shù)量,主要用于當使用排序,faceting操作時,elasticsearch會將一些熱點數(shù)據(jù)加載到內(nèi)存中來提供給客戶端訪問,但是這種緩存是比較珍貴的,所以對它進行合理的設(shè)置.
# 可以使用值:eg:50mb 或者 30%(節(jié)點 node heap內(nèi)存量),默認是:unbounded
indices.fielddata.cache.size: unbounded
# field的超時時間.默認是-1,可以設(shè)置的值類型: 5m
indices.fielddata.cache.expire: -1

# circuit breaker部分:
# 斷路器是elasticsearch為了防止內(nèi)存溢出的一種操作,每一種circuit breaker都可以指定一個內(nèi)存界限觸發(fā)此操作,這種circuit breaker的設(shè)定有一個最高級別的設(shè)定:indices.breaker.total.limit 默認值是JVM heap的70%.當內(nèi)存達到這個數(shù)量的時候會觸發(fā)內(nèi)存回收
# 另外還有兩組子設(shè)置:
indices.breaker.fielddata.limit:當系統(tǒng)發(fā)現(xiàn)fielddata的數(shù)量達到一定數(shù)量時會觸發(fā)內(nèi)存回收.默認值是JVM heap的70%
indices.breaker.fielddata.overhead:在系統(tǒng)要加載fielddata時會進行預先估計,當系統(tǒng)發(fā)現(xiàn)要加載進內(nèi)存的值超過limit * overhead時會進行進行內(nèi)存回收.默認是1.03
indices.breaker.request.limit:這種斷路器是elasticsearch為了防止OOM(內(nèi)存溢出),在每次請求數(shù)據(jù)時設(shè)定了一個固定的內(nèi)存數(shù)量.默認值是40%
indices.breaker.request.overhead:同上,也是elasticsearch在發(fā)送請求時設(shè)定的一個預估系數(shù),用來防止內(nèi)存溢出.默認值是1

# Translog部分:
# 每一個分片(shard)都有一個transaction log或者是與它有關(guān)的預寫日志,(write log),在es進行索引(index)或者刪除(delete)操作時會將沒有提交的數(shù)據(jù)記錄在translog之中,當進行flush 操作的時候會將tranlog中的數(shù)據(jù)發(fā)送給Lucene進行相關(guān)的操作.一次flush操作的發(fā)生基于如下的幾個配置
index.translog.flush_threshold_ops:當發(fā)生多少次操作時進行一次flush.默認是 unlimited
index.translog.flush_threshold_size:當translog的大小達到此值時會進行一次flush操作.默認是512mb
index.translog.flush_threshold_period:在指定的時間間隔內(nèi)如果沒有進行flush操作,會進行一次強制flush操作.默認是30m
index.translog.interval:多少時間間隔內(nèi)會檢查一次translog,來進行一次flush操作.es會隨機的在這個值到這個值的2倍大小之間進行一次操作,默認是5s
index.gateway.local.sync:多少時間進行一次的寫磁盤操作,默認是5s
# 以上的translog配置都可以通過API進行動態(tài)的設(shè)置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容