Elasticsearch7搭建集群并配置節(jié)點(diǎn)證書(shū) | 帥大叔的博客
單機(jī)版比較簡(jiǎn)單,試下集群版的,資源有限,本文例子:一臺(tái)主機(jī)以不同端口啟動(dòng)搭建集群。
環(huán)境說(shuō)明:
- Centos7
- Elasticsearch7.9.0
準(zhǔn)備搭建3個(gè)節(jié)點(diǎn)
一、下載ES安裝包
去官網(wǎng)下載
- 下載地址:Download Elasticsearch | Elastic
- 歷史版本:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
- 7.9.0版本:Elasticsearch 7.9.0 | Elastic
選擇7.9.0版本下載Linux x86_64
類(lèi)型的 ,x86_64 與 AARCHS 區(qū)別不明白的自己科普一下。
執(zhí)行Shell命令過(guò)程:
# 下載 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.0-linux-x86_64.tar.gz # 解壓 tar -zxvf elasticsearch-7.9.0-linux-x86_64.tar.gz # 解壓后,生成一個(gè)名為:elasticsearch-7.9.0 的文件夾 # 為了方便管理,新建一個(gè)文件夾:elasticsearch-cluster mkdir elasticsearch-cluster # 復(fù)制3份 elasticsearch-7.9.0 到 elasticsearch-cluster 并重命名 cp -r elasticsearch-7.9.0 elasticsearch-cluster/elasticsearch-9301 cp -r elasticsearch-7.9.0 elasticsearch-cluster/elasticsearch-9302 cp -r elasticsearch-7.9.0 elasticsearch-cluster/elasticsearch-9303 |
看我復(fù)制的文件就知道,我打算啟動(dòng)3個(gè)節(jié)點(diǎn),啟動(dòng)端口分別是: 9301、9302、9303
二、修改節(jié)點(diǎn)的配置文件
常用配置文件解釋
# 集群名稱 cluster.name: mtSearch # 節(jié)點(diǎn)名稱,不能相同 node.name: mtNode1 # 是否是主節(jié)點(diǎn) node.master: true # 是否是數(shù)據(jù)節(jié)點(diǎn) node.data: true # 日志路徑 path.logs: /opt/elasticsearch-cluster/logs # 鎖定物理內(nèi)存地址,防止elasticsearch內(nèi)存被交換出去,也就是避免es使用swap交換分區(qū) # 如果bootstrap.memory_lock 為true,記得修改/etc/security/limits.conf 添加memlock 配置,目前先注釋上 bootstrap.memory_lock: true # 映射ip network.host: 172.16.1.236 # http請(qǐng)求端口 http.port: 9200 # 設(shè)置節(jié)點(diǎn)間交互的tcp端口,默認(rèn)是9300。 transport.tcp.port: 9300 # 設(shè)置是否壓縮tcp傳輸時(shí)的數(shù)據(jù),默認(rèn)為false,不壓縮。 transport.tcp.compress: true # 集群種子主機(jī)地址,如果是7.*版本之前可以用 discovery.zen.ping.unicast.hosts 這個(gè)參數(shù),7版本用這個(gè)也是兼容的,但后期可能會(huì)刪掉 discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"] # 防止腦裂,要選舉一個(gè)Master需要多少個(gè)節(jié)點(diǎn)(最少候選節(jié)點(diǎn)數(shù)),一般設(shè)置成 N/2 + 1(N是集群中節(jié)點(diǎn)的數(shù)量) discovery.zen.minimum_master_nodes: 2 # 用于獲取啟動(dòng)發(fā)現(xiàn)過(guò)程的種子節(jié)點(diǎn)的地址。默認(rèn)情況下,是基于設(shè)置的種子主機(jī)提供程序也就是上面的種子地址, # 還有一種基于文件的,需要在安裝目錄下新建unicast_hosts.txt 文件 discovery.seed_providers: file # 如果不配置 discovery.seed_hosts、discovery.seed_providers 這幾個(gè)選項(xiàng),就以 cluster.initial_master_nodes 這個(gè)配置進(jìn)行master節(jié)點(diǎn)選舉。 # 如果配置上兩個(gè)配置,cluster.initial_master_nodes這個(gè)配置就不生效了. # 官方文檔說(shuō)的:https://www.elastic.co/guide/en/elasticsearch/reference/7.9/modules-discovery-bootstrap-cluster.html#_auto_bootstrapping_in_development_mode cluster.initial_master_nodes: ["mtNode1", "mtNode2", "mtNode3"] # 重啟只要有這么多數(shù)據(jù)或主節(jié)點(diǎn)已加入集群,才恢復(fù)數(shù)據(jù) gateway.recover_after_nodes: 2 # 跨域問(wèn)題 http.cors.enabled: true http.cors.allow-origin: "*" |
1、各節(jié)點(diǎn)配置文件
每個(gè)節(jié)點(diǎn)的配置都不太相同
9301節(jié)點(diǎn)配置
cluster.name: mtSearch node.name: mtNode1 node.master: true node.data: true path.logs: /opt/elasticsearch-cluster/logs network.host: 172.16.1.236 http.port: 9201 transport.tcp.port: 9301 transport.tcp.compress: true discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"] cluster.initial_master_nodes: ["mtNode1","mtNode2","mtNode3"] gateway.recover_after_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*" |
9302節(jié)點(diǎn)配置
cluster.name: mtSearch node.name: mtNode2 node.master: true node.data: true path.logs: /opt/elasticsearch-cluster/logs network.host: 172.16.1.236 http.port: 9202 transport.tcp.port: 9302 transport.tcp.compress: true discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"] cluster.initial_master_nodes: ["mtNode1","mtNode2","mtNode3"] gateway.recover_after_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*" |
9303節(jié)點(diǎn)配置
cluster.name: mtSearch node.name: mtNode3 node.master: true node.data: true path.logs: /opt/elasticsearch-cluster/logs network.host: 172.16.1.236 http.port: 9203 transport.tcp.port: 9303 transport.tcp.compress: true discovery.seed_hosts: ["172.16.1.236:9300","172.16.1.236:9301","172.16.1.236:9302"] cluster.initial_master_nodes: ["mtNode1","mtNode2","mtNode3"] gateway.recover_after_nodes: 2 http.cors.enabled: true http.cors.allow-origin: "*" |
都配置完,分別啟動(dòng)3個(gè)節(jié)點(diǎn),不出意外即可看到集群連接成功。
/opt/elasticsearch-cluster/elasticsearch-9301/elasticsearch -d /opt/elasticsearch-cluster/elasticsearch-9302/elasticsearch -d /opt/elasticsearch-cluster/elasticsearch-9303/elasticsearch -d |
啟動(dòng)成功,如下圖:
如果你之前沒(méi)安裝過(guò),可能會(huì)報(bào)錯(cuò):像root用戶運(yùn)行呀,線程不夠呀,內(nèi)存不足呀等等問(wèn)題
可以看本文最后面的踩坑筆記
集群確實(shí)是搞定了,但是沒(méi)配置賬號(hào)密碼,集群中各節(jié)點(diǎn)之間的通信是也沒(méi)有什么校驗(yàn)措施的,別人隨隨便便就連上集群。這樣在互聯(lián)網(wǎng)中就相當(dāng)于裸奔!
三、配置證書(shū)
TLS需要X.509證書(shū)才能對(duì)與之通信的應(yīng)用程序執(zhí)行加密和身份驗(yàn)證。為了使節(jié)點(diǎn)之間的通信真正安全,必須對(duì)證書(shū)進(jìn)行驗(yàn)證。在Elasticsearch集群中驗(yàn)證證書(shū)真實(shí)性的推薦方法是信任簽署證書(shū)的證書(shū)頒發(fā)機(jī)構(gòu)(CA)。這樣,將節(jié)點(diǎn)添加到群集時(shí),它們只需要使用由同一CA簽名的證書(shū),即可自動(dòng)允許該節(jié)點(diǎn)加入群集。
1、生成節(jié)點(diǎn)證書(shū)
命令?elasticsearch-certutil
?簡(jiǎn)化了生成證書(shū)的過(guò)程,它負(fù)責(zé)生成CA并與CA簽署證書(shū)。
a、創(chuàng)建證書(shū)頒發(fā)機(jī)構(gòu)CA
隨便進(jìn)入一個(gè)節(jié)點(diǎn)的bin 目錄下執(zhí)行elasticsearch-certutil
?命令即可,如下
# 該命令輸出單個(gè)文件,默認(rèn)名稱為elastic-stack-ca.p12。此文件是PKCS#12密鑰庫(kù) # 其中包含CA的公共證書(shū)和用于對(duì)每個(gè)節(jié)點(diǎn)的證書(shū)簽名的私鑰。 bin/elasticsearch-certutil ca |
執(zhí)行這個(gè)命令之后:
- 會(huì)讓你輸入生成
elastic-stack-ca.p12
文件放在哪。(直接回車(chē),放在當(dāng)前目錄) - 回車(chē)之后讓你輸入密碼,該密碼是讓你保護(hù)文件和密鑰的。如果你以后還要加集群的話,要記得輸入的密碼。
b、生成證書(shū)和私鑰
# 此命令生成證書(shū)憑證,輸出的文件是單個(gè)PKCS#12密鑰庫(kù),其中包括節(jié)點(diǎn)證書(shū),節(jié)點(diǎn)密鑰和CA證書(shū)。 bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 |
執(zhí)行命令之后需要你操作3次:
- 第一次,輸入上面生成CA的密碼,沒(méi)有設(shè)置直接回車(chē)
- 第二次,生成的文件路徑,直接回車(chē)
- 第三次,生成這次證書(shū)與私鑰文件的密碼,建議和上面生成CA一致(怕忘記密碼,也可以直接回車(chē))
如下圖需要輸入密碼的地方:
命令執(zhí)行完之后會(huì)生成一個(gè)elastic-certificates.p12
?文件,這個(gè)就是各節(jié)點(diǎn)通信的憑證
只需要一個(gè)節(jié)點(diǎn)生成憑證即可。
2、配置證書(shū)
復(fù)制證書(shū)憑證
把證書(shū)憑證復(fù)制到各個(gè)節(jié)點(diǎn)一份
# 復(fù)制證書(shū)憑證到各個(gè)節(jié)點(diǎn) cp elastic-certificates.p12 /opt/elasticsearch-cluster/elasticsearch-9301/config/ cp elastic-certificates.p12 /opt/elasticsearch-cluster/elasticsearch-9302/config/ cp elastic-certificates.p12 /opt/elasticsearch-cluster/elasticsearch-9303/config/ |
修改配置文件
在各個(gè)節(jié)點(diǎn)下的elasticsearch.yml
文件添加如下配置
xpack.security.enabled: true xpack.security.authc.accept_default_password: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /opt/elasticsearch-cluster/elasticsearch-9301/config/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: /opt/elasticsearch-cluster/elasticsearch-9301/config/elastic-certificates.p12 |
要注意的是上面的path
記得改成對(duì)應(yīng)節(jié)點(diǎn)config下的elastic-certificates.p12
。
添加密碼到密碼庫(kù)
因?yàn)橹吧蒀A 和生成憑證都設(shè)置了密碼,所以把密碼添加到密鑰庫(kù)中
# 執(zhí)行之后 輸入上面設(shè)置的密碼,回車(chē)即可 elasticsearch-9301/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password elasticsearch-9301/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password # 每個(gè)節(jié)點(diǎn)都要加 elasticsearch-9302/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password elasticsearch-9302/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password # 每個(gè)節(jié)點(diǎn)都要加 elasticsearch-9303/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password elasticsearch-9303/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password |
圖片上有個(gè)警告大概的意思是說(shuō):ES未來(lái)將使用JDK11,而我現(xiàn)在的環(huán)境還是JDK8
之后啟動(dòng)各個(gè)節(jié)點(diǎn)
elasticsearch-9301/bin/elasticsearch -d elasticsearch-9302/bin/elasticsearch -d elasticsearch-9303/bin/elasticsearch -d |
可以看看日志,不出意外集群?jiǎn)?dòng)成功了。隨便請(qǐng)求一個(gè)節(jié)點(diǎn)地址:http://172.16.1.236:9201/
也可以使用elasticsearch-head連接查看,但是需要賬戶和密碼訪問(wèn)
有的同學(xué)就要問(wèn)了,我都沒(méi)設(shè)置賬號(hào)密碼,去哪里看呢?
在安裝Elasticsearch時(shí),如果內(nèi)置用戶elastic
用戶沒(méi)有密碼,它將使用默認(rèn)的引導(dǎo)密碼。引導(dǎo)程序密碼是一個(gè)臨時(shí)密碼,從隨機(jī)?keystore.seed
?設(shè)置派生的會(huì)在安裝過(guò)程中添加到密鑰庫(kù)中。我們壓根不知道密碼是啥,所以需要為內(nèi)置用戶elastic
設(shè)置密碼。首次設(shè)置可以用elasticsearch-setup-passwords
命令
Tip:下面的方法,我沒(méi)試過(guò),我沒(méi)試過(guò)、我沒(méi)試過(guò),但是文檔有,就提一下。
可以使用ES 提供的secure API重新加載為內(nèi)置用戶設(shè)置密碼:
# 參考鏈接:https://www.elastic.co/guide/en/elasticsearch/reference/7.9/secure-settings.html#reloadable-secure-settings POST _nodes/reload_secure_settings { "secure_settings_password": "yourPassword" }
3、配置密碼
elasticsearch-setup-passwords
工具是首次設(shè)置內(nèi)置用戶密碼的最簡(jiǎn)單方法。它使用elastic用戶的引導(dǎo)程序密碼來(lái)運(yùn)行用戶管理API請(qǐng)求。
執(zhí)行命令如下:
bin/elasticsearch-setup-passwords interactive |
它在“互動(dòng)”模式下提示你輸入:elastic
,kibana_system
,logstash_system
,beats_system
,apm_system
,和remote_monitoring_user
用戶的密碼
只需要在任意節(jié)點(diǎn)的bin目錄下執(zhí)行即可,不需要每個(gè)節(jié)點(diǎn)都執(zhí)行。
至此ES集群的賬號(hào)跟密碼就設(shè)置完成了
我們?cè)O(shè)置密碼之后會(huì)有一個(gè)名為.security-7
的索引文檔。
之后可以修改密碼:
# 隨便一個(gè)節(jié)點(diǎn)地址修改即可,一個(gè)集群共用一個(gè)賬號(hào)密碼 # 用Postman 請(qǐng)求時(shí),選擇 Authorization -> 選擇 Basic Auth -> 右邊選擇上面設(shè)置的賬號(hào)密碼:elastic用戶與密碼 POST http://172.16.1.236:9201/_xpack/security/user/elastic/_password { "password": "yourNewPassword" } |
4、踩坑記錄
1、安裝可能報(bào)錯(cuò)的問(wèn)題:
查看文章鏈接:ES安裝問(wèn)題集錦
2、修改運(yùn)行ES的Java環(huán)境
在啟動(dòng)ES7.9.0
的時(shí)候,會(huì)提示:future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk1.8.0/jre] does not meet this requirement
?也就是說(shuō)ES未來(lái)版本需要JDK11,我目前的環(huán)境是JDK8不符合要求。我這個(gè)包是自帶JDK的,我干脆只把把自動(dòng)的JDK指定為ES的JDK運(yùn)行環(huán)境:
修改3個(gè)節(jié)點(diǎn)下的 bin/elasticsearch 文件,在最前面添加如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-517712.html
# 這個(gè)下面的路徑改成你es節(jié)點(diǎn)下jdk的路徑即可 export JAVA_HOME=/opt/elasticsearch-cluster/elasticsearch-9301/jdk export PATH=$JAVA_HOME/bin:$PATH |
不修改也是可以啟動(dòng)的,但是建議改算了,畢竟官方包都自帶了,那肯定是推薦我們使用新版本。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-517712.html
3、elastic-certificates.p12
文件位置踩坑
- 因?yàn)槲抑皇且慌_(tái)主機(jī),打算是另外把這個(gè)證書(shū)憑證放在?
elasticsearch-cluster
?下弄個(gè)config
文件夾保存的,但是呢,不盡人意 - 啟動(dòng)的時(shí)候報(bào)了個(gè)文件權(quán)限問(wèn)題。報(bào)錯(cuò)如下
- 可能用
chmod 777 elastic-certificates.p12
可以訪問(wèn),我沒(méi)試,但是還是建議放在各自的安裝目錄下。
本文參考鏈接
- Encrypting communications in Elasticsearch | Elasticsearch Guide [7.9] | Elastic
- Built-in users | Elasticsearch Guide [7.9] | Elastic
到了這里,關(guān)于Elasticsearch7搭建集群并配置節(jié)點(diǎn)證書(shū)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!