Elasticsearch常見錯誤與配置簡介


 

一、常見錯誤

1.1 root用戶啟動elasticsearch報錯

         Elasticsearch為了安全考慮,不讓使用root啟動,解決方法新建一個用戶,用此用戶進行相關的操作。如果你用root啟動,會出現“java.lang.RuntimeException: can not runelasticsearch as root”錯誤,具體如下所示:

 

 

1.2 JVM虛擬機內存不足

        錯誤:“JavaHotSpot(TM) 64-Bit Server VM warning: INFO: error='Cannotallocate memory' (errno=12)”表示內存不足,其配置文件為config目錄下的jvm.options,默認為2g,可以修改為1g。

 

1.3  max_map_count過小

        錯誤“max virtual memory areas vm.max_map_count [65530]is too low, increase to at least [262144]”,max_map_count文件包含限制一個進程可以擁有的VMA(虛擬內存區域)的數量,系統默認是65530,修改成262144。解決方法是修改/etc/sysctl.conf配置文件,添加vm.max_map_count=262144,記得需要重啟機器才起作用,修改后配置如下圖所示:

 

 

1.4 max file descriptors過小

        錯誤“max file descriptors [65535] for elasticsearchprocess is too low, increase to at least [65536]”,maxfile descriptors為最大文件描述符,設置其大於65536即可。解決方法是修改/etc/security/limits.conf文件,添加“* - nofile65536 * - memlock unlimited”,“*”表示給所有用戶起作用,修改后的配置如下圖所示:

 

 

1.5外網訪問設置

         細心的同學也許發現第一章驗證是用的“localhost:9200”,如果換成“IP:9200”,則瀏覽器與curl都無法進行訪問,那么如何讓外網訪問呢?網上查了一下,需要修改config目錄下elasticsearch.yml文件,修改network.host為“0.0.0.0”,然后進行啟動成功,外網就可以訪問啦。但是很遺憾,在我的機器還出現了其他錯誤,具體如下所示:

 

 

通過上面的錯誤信息,想到需要修改config目錄下elasticsearch.yml文件,修改discovery.zen.ping.unicast.hosts為“[“0.0.0.0”]”,然后再次啟動,發現沒有報錯信息(注意防火牆對於端口的限制),同時遠程瀏覽器訪問也正常,如下圖所示:

 

 

 

二、elasticsearch配置簡介

         配置文件在config目錄下:jvm.options、elasticsearch.yml和log4j2.properties。其中jvm.options為虛擬機配置,log4j2.properties為日志配置,都相對比較簡單。下面重點介紹elasticsearch.yml一些重要的配置項及其含義。

(1)cluster.name: elasticsearch

         配置elasticsearch的集群名稱,默認是elasticsearch。elasticsearch會自動發現在同一網段下的集群名為elasticsearch的主機,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。生成環境時建議更改。

(2)node.name: “node-1”

       節點名,默認隨機指定一個name列表中名字,該列表在elasticsearch的jar包中config文件夾里name.txt文件中,其中有很多作者添加的有趣名字,大部分是漫威動漫里面的人物名字。生成環境中建議更改以能方便的指定集群中的節點對應的機器

(3)node.master: true

         指定該節點是否有資格被選舉成為node,默認是true,elasticsearch默認集群中的第一台啟動的機器為master,如果這台機掛了就會重新選舉master。

(4)node.data: true

        指定該節點是否存儲索引數據,默認為true。如果節點配置node.master:false並且node.data: false,則該節點將起到負載均衡的作用

(5)index.number_of_shards: 5

        設置默認索引分片個數,默認為5片。經本人測試,索引分片對ES的查詢性能有很大的影響,在應用環境,應該選擇適合的分片大小。

(6)index.number_of_replicas:

         設置默認索引副本個數,默認為1個副本。此處的1個副本是指index.number_of_shards的一個完全拷貝;默認5個分片1個拷貝;即總分片數為10。

(7)path.conf: /path/to/conf

        設置配置文件的存儲路徑,默認是es根目錄下的config文件夾。

(8)path.data:/path/to/data1,/path/to/data2

        設置索引數據的存儲路徑,默認是es根目錄下的data文件夾,可以設置多個存儲路徑,用逗號隔開。

(9)path.logs: /path/to/logs

        設置日志文件的存儲路徑,默認是es根目錄下的logs文件夾

(10)path.plugins: /path/to/plugins

       設置插件的存放路徑,默認是es根目錄下的plugins文件夾

(11)bootstrap.memory_lock: true

          設置為true來鎖住內存。因為當jvm開始swapping時es的效率會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的內存分配給es。同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過ulimit -l unlimited命令。

(12)network.host: 192.168.0.1

       這個參數是用來同時設置bind_host和publish_host上面兩個參數。

(13)http.port: 9200

        設置對外服務的http端口,默認為9200。

(14)gateway.recover_after_nodes: 1

        設置集群中N個節點啟動時進行數據恢復,默認為1。

(15)discovery.zen.minimum_master_nodes: 1

       設置這個參數來保證集群中的節點可以知道其它N個有master資格的節點。默認為1,對於大的集群來說,可以設置大一點的值(2-4)

(16)discovery.zen.ping.timeout: 3s

        設置集群中自動發現其它節點時ping連接超時時間,默認為3秒,對於比較差的網絡環境可以高點的值來防止自動發現時出錯。

(17)discovery.zen.ping.multicast.enabled:false

        設置是否打開多播發現節點,默認是true。

(18)discovery.zen.ping.unicast.hosts: [“host1”, “host2:port”]

         設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點。

 

參考:

  https://blog.csdn.net/qq_21387171/article/details/53577115


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM