前言
elasticsearch(下面稱爲ES)是一個基於Lucene的搜索服務器(By 百度百科:查看),所以他需要java的環境即jdk。如何安裝jdk就不在贅述了,無非就是刪除原版本後解壓再添加環境變量
注1:如果已經安裝了ES和ik,需要重新安裝,需要把/usr/share/elasticsearch/plugins/路徑下ik刪除,避免版本不匹配導致ES不能啓動
注2:再往linux中安裝軟件時,尤其是需要在網頁上測試的軟件時,需要將防火牆關閉,ES就是,如果不關閉防火牆,可以ping通,但是加上9200端口進行訪問時便會連接失敗。
注3:在虛擬機或者真正的服務器上,必須要把ip地址寫死,否則會出現一些莫名其妙的錯誤,(今天在虛擬機上搭建es,自動獲取ip的狀態下宿主機無法ping通,寫死之後便可以ping通了)
安裝過程
- Elasticsearch的官網:https://www.elastic.co/cn/downloads/
- 使用wget命令獲取ES:
wget https:
//artifacts
.elastic.co
/downloads/elasticsearch/elasticsearch-6
.3.1.
tar
.gz
- 解壓:tar -xvzf elasticsearch-6.3.1.tar.gz,需要注意的是,處於安全考慮,es是不允許root用戶啓動的,也就是說必須創建一個普通用戶進行解壓es安裝包,如果用root用戶解壓之後,則需要將文件的所有者進行改變
adduser 用戶名
chown -R 用戶名:用戶名組 目錄路徑 -
修改配置文件:vim elasticsearch-6.3.1/config/elasticsearch.yml
在該配置文件的末尾複製添加上如下信息即可,省的一個個找修改再取消註釋,如下信息其實就是該文件中需要修改的彙總,爲了簡便,可以直接複製添加。# 集羣的名字,需要自定義,如果是想要搭建es集羣,則保持此項相同即可 cluster.name: luying # 節點名字,需要自定義,如果想要搭建es集羣,則保證此項不同即可 node.name: luying-master # 是否是master node.master: true # ES的監聽地址,這樣別的機器也可以訪問,有的教程說此項設置成0.0.0.0代表任意ip都可以訪問本es,但失 # 敗了,還是寫成本機ip爲正確寫法,不要寫成localhost,那樣其他ip無法訪問,一定要寫固定ip network.host: 192.168.2.133 # 默認的就好,es啓動後通過web訪問es,只需輸入ip:9200,出現一個json即代表成功 http.port: 9200 # 本機最大允許運行節點個數,默認即可 node.max_local_storage_nodes: 3 # 增加新的參數,這樣head插件可以訪問es,解決跨域訪問問題,一把用不到 # http.cors.enabled: true # http.cors.allow-origin: "*"
-
啓動:./elasticsearch-6.3.1/bin/elasticsearch(注意一定要用普通用戶啓動纔可以)
-
檢驗:使用瀏覽器,輸入ip:9200,出現json返回信息
-
關閉:直接使用Ctrl+C可以;但最好是使用命令:./elasticsearch -stop
-
後臺啓動命令:./elasticsearch -d
集羣部署
分別拷貝下載的es文件在三個不同的文件夾下,分別配置config/elasticsearch.yml
實例: ES1文件夾下的配置:
.............
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 集羣的名字 必須與其他機器相同
cluster.name: niezp
# 節點名字,必須與其他節點不同
node.name: niezp-slave1
# 修改一下ES的監聽地址,這樣別的機器也可以訪問
network.host: 192.168.174.148
# 不能和其他的節點相同
http.port: 9202
#這裏要說下,這裏的IP地址就是你的mater es的機器ip地址,比如部署在本機可以下127.0.0.1 別的機器就寫別的機器的ip
discovery.zen.ping.unicast.hosts: ["192.168.174.148"]
node.max_local_storage_nodes: 3
# 增加新的參數,這樣head插件可以訪問es
#http.cors.enabled: true
#http.cors.allow-origin: "*"
實例: ES2文件夾下的配置:
.......
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true
# 集羣的名字 必須與其他機器相同
cluster.name: niezp
# 節點名字,必須與其他節點不同
node.name: niezp-slave2
# 修改一下ES的監聽地址,這樣別的機器也可以訪問
network.host: 192.168.174.148
# 不能和其他的節點相同
http.port: 9201
#同實例1說明
discovery.zen.ping.unicast.hosts: ["192.168.174.148"]
node.max_local_storage_nodes: 3
# 增加新的參數,這樣head插件可以訪問es
#http.cors.enabled: true
#http.cors.allow-origin: "*"
相關技術
- Linux 添加用戶、刪除用戶、用戶授權
- 添加用戶
- 命令:只設置賬戶和密碼只用兩步
useradd或adduser命令,使用權限是超級用戶(root)。例如:useradd esuser
passwd命令。例如:passwd esuser 之後輸入兩次密碼即可。 - 格式:useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
- 參數詳解:
-c: 加上備註文字,備註文字保存在passwd的備註欄中。
-d:指定用戶登入時的主目錄,替換系統默認值/home/<用戶名>
-D:變更預設值。
-e:指定賬號的失效日期,日期格式爲MM/DD/YY,例如06/30/12。缺省表示永久有效。
-f:指定在密碼過期後多少天即關閉該賬號。如果爲0賬號立即被停用;如果爲-1則賬號一直可用。默認值爲-1.
-g:指定用戶所屬的羣組。值可以使組名也可以是GID。用戶組必須已經存在的,期默認值爲100,即users。
-G:指定用戶所屬的附加羣組。
-m:自動建立用戶的登入目錄。
-M:不要自動建立用戶的登入目錄。
-n:取消建立以用戶名稱爲名的羣組。
-r:建立系統賬號。
-s:指定用戶登入後所使用的shell。默認值爲/bin/bash。
-u:指定用戶ID號。該值在系統中必須唯一。0~499默認是預留給系統用戶賬號,所以該值必須大於499。
-
舉例:useradd -u 544 -d /usr/testuser1 -g users -m esuser1
建立一個新用戶賬戶esuser1,並設置UID爲544,主目錄爲/usr/esuser,屬於users組。使用useradd命令所建立的賬號,實際上是保存在/etc/passwd文本文件中。
- 命令:只設置賬戶和密碼只用兩步
-
刪除用戶
-
刪除用戶:userdel esuser
-
刪除用戶及目錄:userdel -f esuser
- 無法刪除:刪除時userdel esuser ,提示userdel: user esuser is currently used by process 1354
該提示證明,被刪除賬戶正在使用無法刪除,此時只能將該賬戶強制下線
使用“w”命令查看此時正在登陸的賬戶
使用pkill命令強制退出用戶:pkill -kill -t pts/1
-
- 用戶權限
- 賬號屬性:使用id命令
usermod -G GROUPS USERNAME:改變用戶的附加組,會完全替換原有的附加組
usermod -G -a GROUPS USERNAME:在原有附加組的基礎上追加附加組
usermod -d PATH USERNAME:修改家目錄。修改後原先家目錄中的文件不能訪問了,因爲在當前的家目錄中並不存在這些文件。
usermod -l NEWNAME USERNAME:改變用戶名
usermod -e USERNAME:指定該用戶的過期時間
usermod -L USERNAME:鎖定用戶
usermod -U USERNAME:解鎖用戶 -
密碼管理:只能用根用戶操作,被操作的只能是非根用戶
passwd –stdio:標準輸入讀取密碼
passwd -l:鎖定用戶賬號(root only)
passwd -u username:解鎖用戶賬號(root only)
passwd -d username:刪除用戶密碼。用戶密碼刪除後不能登錄。
passwd [username] : 修改密碼 -
group管理:
- 賬號屬性:使用id命令
- 文件權限:
- 使用ll命令,共顯示七列信息,從左至右依次爲:權限、文件數、歸屬用戶、歸屬羣組、文件大小、創建日期、文件名稱
-:第一位表示文件類型
d 文件夾
- 普通文件
l 鏈接
b 塊設備文件
p 管道文件
c 字符設備文件
s 套接口文件
owner/group/others三種身份各有自己的read/write/execute權限:
rwx :第2-4位表示這個文件的屬主擁有的權限。r是讀、w是寫、x是執行
rwx :第5-7位表示和這個文件屬主所在同一個組的用戶所具有的權限
rwx :第8-10位表示其他用戶所具有的權限 -
常用的linux文件權限:
各權限的分數對照表如下: r:4 w:2 x:1;每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,下面則是常用的權限示例
444 r--r--r--
600 drw-------
644 drw-r--r--
666 drw-rw-rw-
700 drwx------
744 drwxr--r--
755 drwxr-xr-x
777 drwxrwxrwx -
修改文件權限:
-
數字類型改變檔案權限:chmod [-R] xyz 檔案或目錄
xyz : 就是剛剛提到的數字類型的權限屬性,爲 rwx 屬性數值的相加。
-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更 -
符號類型改變檔案權限:
文件的九個權限分別對應(1)user (2)group (3)others三種身份,那麼我們就可以藉由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x,也就是可以使用底下的方式來看:
示例:設定一個檔案的權限成爲『-rwxr-xr-x』
注意:三種身份之間用“,”連接,中間沒有任何空格符,並且可以任意組合。 -
ACL權限分配:chmod 權限分配是對所有用戶進行設置,但在權限細分需求時存在不足, 此時可使用acl權限分配。(ACL的全稱是 Access Control List (訪問控制列表) ,一個針對文件/目錄的訪問控制列表。它在UGO權限管理的基礎上爲文件系統提供一個額外的、更靈活的權限管理機制。它被設計爲UNIX文件權限管理的一個補充。ACL允許你給任何的用戶或用戶組設置任何文件/目錄的訪問權限。)
什麼是ACL權限呢?
-
- 使用ll命令,共顯示七列信息,從左至右依次爲:權限、文件數、歸屬用戶、歸屬羣組、文件大小、創建日期、文件名稱
-
獲取管理員權限:即獲取sudo權限
-
修改 /etc/sudoers文件:/etc/sudoers文件存放着sudo的相關用戶,但是默認沒有寫權限的,所以需要使用
chmod u+w /etc/sudoers
給 sudoers 授權 -
修改 /etc/sudoers 文件
-
修改 /etc/passwd 文件
友情提醒:雖然方法三看上去簡單方便,其實是將一般用戶完全等同於了root用戶,可能會造成一些無法預料的問題,因此一般不推薦使用,推薦使用方法二。
-
- 添加用戶
-
修改網卡信息:將ip地址寫死,避免出現無法訪問的情況。
-
修改網卡文件: /etc/sysconfg/network-scripts/...
-
-
關閉防火牆,或者開放對應端口
- sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo systemctl stop iptables.service
sudo systemctl disable iptables.servicesudo vim /etc/selinux/config
在生產環境中,防火牆是不可以關閉的,需要的是開放端口。註釋下面兩行:
#SELINUX=enforcing
#SELINUXTYPE=targeted
sudo setenforce 0
- 此處使用一個命令即可:iptables -F 即清除預設表filter中的所有規則鏈的規則
- 開放端口:
- sudo systemctl stop firewalld.service
ES部署過程中的報錯解析
-
elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
ES不能能使用root用戶直接運行,必須使用普通用戶運行。
解決辦法:添加用戶,ES安裝目錄的所有者。 -
Exception in thread "main" java.nio.file.AccessDeniedException: /opt/app/elasticsearch-6.6.0/config/jvm.options
使用的用戶對安裝目錄的文件沒有權限造成的,(可能是當前登錄的用戶沒有權限,也可能是在更改安裝目錄的所有者的時候沒有遞歸安裝)
解決辦法:
切換用戶在啓動es,如果報同樣錯誤,使用chown -R 用戶名:用戶組名 目錄路徑
更改文件所有者。 -
[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [es1] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: Unable to access ‘path.data’ (/var/es/dat)
因爲不是root用戶,在配置文件的時候。數據目錄和日誌目錄等不能應該放在用戶家目錄下,防止因爲該用戶不能在所設置的目錄下創建文件而引起報錯。
-
[unknown] unable to install syscall filter: java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
Centos6不支持SecComp,而高版本ES在5.X之後默認bootstrap.system_call_filter爲true進行檢測,所以導致檢測失敗,失敗後直接導致ES不能啓動
解決辦法(兩種):
1.可以把Centos內核升級到Centos7。
2.修改配置文件,關閉ES啓動時候的安全檢測。具體elasticsearch.yml中配置 -
initial heap size [104857600] not equal to maximum heap size [209715200]; this can cause resize pauses and prevents mlockall from locking the entire heap 【1】: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536] 【2】: max number of threads [1024] for user [es] is too low, increase to at least [4096] 【3】: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
【1】系統設置的文件描述符太少了
【2】爲用戶設置的可以開啓的線程太少了
這兩個可以通過配置文件vi /etc/security/limits.conf 更改,添加如下內容:(這裏只爲啓動ES的es用戶更改了安全限制)es soft nofile 65536 #solf是軟限制的意思,hard是硬限制;軟限制可以在程序的進程中自行改變(突破限制),而硬限制則不行(除非程序進程有root權限) es hard nofile 65536 #nofile 文件描述符 es soft nproc 4096 #nproc 進程的限制 es hard nproc 4096
這裏兩個的設置沒有讓其立即生效的命令,因此如果修改之後重啓ES還報該錯則需要重啓機器。另外網上很多直接把第一項換爲“ * ”,*是指所有用戶,如果在生產中強烈不建議這樣做,可能會對其他用戶造成影響。
其實生產環境,服務器是很難重啓的,所以很少有軟件安裝時需要重啓,此處並不需要重啓,將當前用戶重新登入,就可以了。
【3】虛擬內存區域最大映射值太小了 通過vi /etc/sysctl.conf 可以更改。
切換到root用戶修改配置sysctl.confvi /etc/sysctl.conf
添加下面配置:vm.max_map_count=655360
並執行命令:sysctl -p
(可以使其永久) -
本機可以訪問.但是局域網外的其他機器無法訪問
修改elasticsearch.yml配置文件,network.host項,綁定本機的IP
PS:在配置文件中的localhost,迴環IP,路徑是tmp的一定要注意更改。 -
SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
配置文件格式錯誤:
配置文件的key:value之間的:後面必須有一個空格。 -
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
內存不足導致Java無法運行,(在elasticsearch和logstash中均可能出現)
解決辦法:
這個時候查看一下free -m 查看可用內存,然後查看config下的jvm.options文件,-Xms1g
和-Xmx1g
配置的內存大小,更改此而配置項或者添加內存均可。 -
第一次啓動使用root用戶啓動,在config目錄下創建了文件,需要刪除
-
Error: Port 5601 is already in use. Another instance of Kibana may be running!
這是因爲5601的端口被佔用了,一般有因爲以下幾種可能而導致:
netstat -tunlp|grep 5601 #查看端口占用情況,找到端口對應的進程id
ps aux | grep PID #查看對應的進程
#然後根據進程情況確定更改哪一個程序的端口號,使其不衝突即可 -
Caused by: java.net.BindException: Cannot assign requested addres
配置外網
進入 config/ elasticsearch.ym
打開配置文件elasticsearch.yml 將 network.host: 192.168.0.1 修改爲本機IP 0.0.0.0 -
[warning][license][xpack] License information from the X-Pack plugin could not be obtained from Elasticsearch for the [data] cluster. [invalid_index_name_exception] Invalid index name [_xpack], must not start with '_'., with { index_uuid="_na_" & index="_xpack" } :: {"path":"/_xpack","statusCode":400,"response":"{\"error\":{\"root_cause\":[{\"type\":\"invalid_index_name_exception\",\"reason\":\"Invalid index name [_xpack], must not start with '_'.\",\"index_uuid\":\"_na_\",\"index\":\"_xpack\"}],\"type\":\"invalid_index_name_exception\",\"reason\":\"Invalid index name [_xpack], must not start with '_'.\",\"index_uuid\":\"_na_\",\"index\":\"_xpack\"},\"status\":400}"}
Kibana連接elasticsearh的時候,瀏覽器中報錯爲
Cannot connect to the Elasticsearch cluster currently configured for Kibana.
`To use the full set of free features in this distribution of Kibana, please update Elasticsearch to the default distribution.```
看報錯信息顯示因該是版本的問題,但是理論上elatic官網上的一套應該是沒有問題的,我試着卸載X-pack,發現es不能卸載,然後嘗試了很多辦法無果後,提交給了官網,收到回覆如下:
您好,
非常感謝您的回覆。
初步瞭解您的情況之後,我找到了一個跟您問題相似的帖子,麻煩您參考下
https://discuss.elastic.co/t/license-information-from-the-x-pack-plugin-could-not-be-obtained-from-elasticsearch-for-the-data-cluster/148030/9不知道您是否方便嘗試用下oss only的kibana?
https://www.elastic.co/downloads/kibana-oss麻煩您看下是否能幫助解決您的問題~ 如果還有問題歡迎隨時與我聯繫。您也可以加我的微信:(這個就不顯示了)
希望Elastic能帶給您一個無與倫比的使用體驗!
Best regards,
重點在上週新版本更新中,我直接用了最新的6.6.1,然後就沒有問題了,哈哈 -
elasticsearch 6.6.1的新報錯
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /opt/app/elasticsearch-6.6.1/config/elasticsearch.keystore Likely root cause: java.nio.file.AccessDeniedException: /opt/app/elasticsearch-6.6.1/config/elasticsearch.keystore
第一次啓動es使用了root用戶,在config目錄下創建了文件elasticsearch.keystore,只需要進入之後把文件刪除,然後用es的用戶啓動就可以了。
-
瀏覽器連接不上Kibana,資源無限重定向(特別早遇到的報錯,今天想起來了)
在使用6.6.1的Kibana的時候,集羣跑一個週末,不操作,等到週一的時候,會出現瀏覽器連接補了Kibana的情況,但是Kibana的進程什麼的都正常,報錯信息好像是因爲資源無限重定向這樣的信息。
這個問題諮詢官網好像也是版本問題,具體情況我忘記了,但是現在記得還有一個這樣的問題,大家如果遇到了可以今天搭建集羣的時候遇到新的報錯,是因爲我在一個節點啓動了es,生成了數據文件,然後沒有刪除數據文件,就把目錄用scp拷貝到其他的節點上而造成的,具體的報錯信息如下:
failed to send join request to master [{node10}{nIHo2TdDRw-1-nbhr-Lmzw}{n_vGmHO9R2umfw99C5nOSg}{192.168.56.10}{192.168.56.10:9300}{ml.machine_memory=1968349184, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}], reason [RemoteTransportException[[node10][192.168.56.10:9300][internal:discovery/zen/join]]; nested: IllegalArgumentException[can't add node {node11}{nIHo2TdDRw-1-nbhr-Lmzw}{XcZDBLmxRCeKsHm4jp2M8w}{192.168.56.11}{192.168.56.11:9300}{ml.machine_memory=1968349184, ml.max_open_jobs=20, xpack.installed=true, ml.enabled=true}, found existing node {node10}{nIHo2TdDRw-1-nbhr-Lmzw}{n_vGmHO9R2umfw99C5nOSg}{192.168.56.10}{192.168.56.10:9300}{ml.machine_memory=1968349184, xpack.installed=true, ml.max_open_jobs=20, ml.enabled=true} with the same id but is a different node instance];
刪除安裝目錄下的data文件夾,然後重新啓動即可。
-
更多問題可以參考博客:https://blog.csdn.net/wang909125961/article/details/87937335
csdn作者名字:wang__xg;鏈接地址:https://blog.csdn.net/wang909125961
或者
http://www.360doc.com/content/16/0801/19/17130779_580079662.shtml