1. 程式人生 > >elasticsearch的安裝及常見問題解決、配置檔案的介紹

elasticsearch的安裝及常見問題解決、配置檔案的介紹

elasticsearch  的安裝 

 1 :輸入命令:

  wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz


2 : 安裝完成後解壓:

tar -vxf elasticsearch-6.2.4.tar.gz


解壓後產生多個資料夾:
bin : 啟動指令碼目錄
config :配置檔案目錄
lib :依賴的第三方庫目錄
modules :模組目錄
plugins :第三方外掛的目錄

要安裝elasticsearch官方建議使用jdk1.8的版本,所以先安裝並部署好jdk,關於jdk的部署參考網上其他資料。


3 : 啟動   
sh ./bin/elasticsearch

bin/elasticsearch -d(後臺執行)

常見問題解決

可能會出現錯誤,下面列出常見的錯誤:

(1)elasticsearch不能以root許可權來執行,會出現這種錯誤:Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root。

因為安全問題elasticsearch 不讓用root使用者直接執行,所以要建立新使用者解決辦法:

第一步:liunx建立新使用者 adduser XXX 然後給建立的使用者加密碼 passwd XXX 輸入兩次密碼。
第二步:切換剛才建立的使用者 su XXX 然後執行elasticsearch 會顯示Permission denied 許可權不足。
第三步:給新建的XXX賦許可權,chmod 777 * 這個不行,因為這個使用者本身就沒有許可權,肯定自己不能給自己付許可權。所以要用root使用者登入付許可權。
第四步:root給XXX賦許可權,chown -R XXX /你的elasticsearch安裝目錄。

(2)提示:Max number of threads for elasticsearch too low
ElasticSearch 安裝教程ElasticSearch 安裝教程
解決辦法:

修改/etc/security/limits.conf
vim /etc/security/limits.conf
新增一行:xxx - nproc 2048
其中"xxx"為啟動elasticsearch的使用者

(3)提示:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
ElasticSearch 安裝教程ElasticSearch 安裝教程
解決辦法:

修改/etc/sysctl.conf
vim /etc/sysctl.conf
新增一行:vm.max_map_count=262144,新增完了執行:sysctl -p,看結果是不是vm.max_map_count = 262144

問題一:警告提示

[2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] unable to install syscall filter: 

java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
at org.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]
at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]

報了一大串錯誤,其實只是一個警告。

解決:使用心得linux版本,就不會出現此類問題了。

問題二:ERROR: bootstrap checks failed

[1]: initial heap size [1073741824] not equal to maximum heap size [2147483648]; this can cause resize pauses and prevents mlockall from locking the entire heap

說明此時處於生產模式。

修改config/elasticsearch.yml(--------------------- Discovery--------------------下) discovery.type為 single-node

discovery.type: single-node

問題三:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解決:切換到root使用者,進入limits.d目錄下修改配置檔案。

vi /etc/security/limits.d/90-nproc.conf 

修改如下內容:

* soft nproc 1024

#修改為

* soft nproc 2048

問題四:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解決:切換到root使用者修改配置sysctl.conf

vi /etc/sysctl.conf 

新增下面配置:

vm.max_map_count=655360

並執行命令:

sysctl -p

然後,重新啟動elasticsearch,即可啟動成功。

瀏覽器訪問 127.0.0.1:9200  

安裝成功

elasticsearch服務端預設埠為9200,啟動以後可以在瀏覽器位址列輸入http://localhost:9200/後會返回一個json資訊,類似於下面這樣,status等於200則說明啟動成功。qucfGiR是我自己設定的當前機器節點名(node.name),cluster_name為elasticsearch,這些都可以自己設定的,elasticsearch本身有預設配置,如果僅僅是測試和了解,可以不設。

{
  "name" : "qucfGiR",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "GZ9hZ0xyQtChfvy8eJf-lQ",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

配置檔案詳解

配置檔案位於es根目錄的config目錄下面,有elasticsearch.yml和logging.yml兩個配置,主配置檔案是elasticsearch.yml,日誌配置檔案是logging.yml,elasticsearch呼叫log4j記錄日誌,所以日誌的配置檔案可以按照預設的設定,我來介紹下elasticsearch.yml裡面的選項。

cluster.name: elasticsearch
配置的叢集名稱,預設是elasticsearch,es服務會通過廣播方式自動連線在同一網段下的es服務,通過多播方式進行通訊,同一網段下可以有多個叢集,通過叢集名稱這個屬性來區分不同的叢集。

node.name: "Franz Kafka"
當前配置所在機器的節點名,你不設定就預設隨機指定一個name列表中名字,該name列表在es的jar包中config資料夾裡name.txt檔案中,其中有很多作者新增的有趣名字。

node.master: true
指定該節點是否有資格被選舉成為node(注意這裡只是設定成有資格, 不代表該node一定就是master),預設是true,es是預設叢集中的第一臺機器為master,如果這臺機掛了就會重新選舉master。

node.data: true
指定該節點是否儲存索引資料,預設為true。

index.number_of_shards: 5
設定預設索引分片個數,預設為5片。

index.number_of_replicas: 1
設定預設索引副本個數,預設為1個副本。如果採用預設設定,而你叢集只配置了一臺機器,那麼叢集的健康度為yellow,也就是所有的資料都是可用的,但是某些複製沒有被分配(

健康度可用 curl 'localhost:9200/_cat/health?v' 檢視, 分為綠色、黃色或紅色。綠色代表一切正常,叢集功能齊全,黃色意味著所有的資料都是可用的,但是某些複製沒有被分配,紅色則代表因為某些原因,某些資料不可用)。

path.conf: /path/to/conf
設定配置檔案的儲存路徑,預設是es根目錄下的config資料夾。

path.data: /path/to/data
設定索引資料的儲存路徑,預設是es根目錄下的data資料夾,可以設定多個儲存路徑,用逗號隔開,例:

path.data: /path/to/data1,/path/to/data2

path.work: /path/to/work
設定臨時檔案的儲存路徑,預設是es根目錄下的work資料夾。

path.logs: /path/to/logs
設定日誌檔案的儲存路徑,預設是es根目錄下的logs資料夾

path.plugins: /path/to/plugins
設定外掛的存放路徑,預設是es根目錄下的plugins資料夾, 外掛在es裡面普遍使用,用來增強原系統核心功能。

bootstrap.mlockall: true
設定為true來鎖住記憶體不進行swapping。因為當jvm開始swapping時es的效率 會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變數設定成同一個值,並且保證機器有足夠的記憶體分配給es。 同時也要允許elasticsearch的程序可以鎖住記憶體,linux下啟動es之前可以通過`ulimit -l unlimited`命令設定。

network.bind_host: 192.168.0.1
設定繫結的ip地址,可以是ipv4或ipv6的,預設為0.0.0.0,繫結這臺機器的任何一個ip。


network.publish_host: 192.168.0.1
設定其它節點和該節點互動的ip地址,如果不設定它會自動判斷,值必須是個真實的ip地址。

network.host: 192.168.0.1
這個引數是用來同時設定bind_host和publish_host上面兩個引數。

transport.tcp.port: 9300
設定節點之間互動的tcp埠,預設是9300。

transport.tcp.compress: true
設定是否壓縮tcp傳輸時的資料,預設為false,不壓縮。

http.port: 9200
設定對外服務的http埠,預設為9200。

http.max_content_length: 100mb
設定內容的最大容量,預設100mb

http.enabled: false
是否使用http協議對外提供服務,預設為true,開啟。

gateway.type: local
gateway的型別,預設為local即為本地檔案系統,可以設定為本地檔案系統,分散式檔案系統,hadoop的HDFS,和amazon的s3伺服器等。

gateway.recover_after_nodes: 1
設定叢集中N個節點啟動時進行資料恢復,預設為1。

gateway.recover_after_time: 5m
設定初始化資料恢復程序的超時時間,預設是5分鐘。

gateway.expected_nodes: 2
設定這個叢集中節點的數量,預設為2,一旦這N個節點啟動,就會立即進行資料恢復。

cluster.routing.allocation.node_initial_primaries_recoveries: 4
初始化資料恢復時,併發恢復執行緒的個數,預設為4。

cluster.routing.allocation.node_concurrent_recoveries: 2
新增刪除節點或負載均衡時併發恢復執行緒的個數,預設為4。

indices.recovery.max_size_per_sec: 0
設定資料恢復時限制的頻寬,如入100mb,預設為0,即無限制。

indices.recovery.concurrent_streams: 5
設定這個引數來限制從其它分片恢復資料時最大同時開啟併發流的個數,預設為5。

discovery.zen.minimum_master_nodes: 1
設定這個引數來保證叢集中的節點可以知道其它N個有master資格的節點。預設為1,對於大的叢集來說,可以設定大一點的值(2-4)

discovery.zen.ping.timeout: 3s
設定叢集中自動發現其它節點時ping連線超時時間,預設為3秒,對於比較差的網路環境可以高點的值來防止自動發現時出錯。

discovery.zen.ping.multicast.enabled: false
設定是否開啟多播發現節點,預設是true。

discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
設定叢集中master節點的初始列表,可以通過這些節點來自動發現新加入叢集的節點。

 基本操作

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