CentOS 7 使用Docker方式搭建ElasticSearch 7.7.0 三節(jié)點集群,并配置elasticsearch-head插件,ik分詞器,以及Kibana可視化平臺

ElasticSearch可以說是當(dāng)下最火爆的全文搜索引擎!開整?。?/h2>

第一步,準備3臺虛擬機,系統(tǒng)為CentOS 7,如下

IP 角色
172.16.31.191 elasticsearch-1
172.16.31.192 elasticsearch-2
172.16.31.193 elasticsearch-3

第二步,在虛擬機上裝好docker并啟動(不會使用 docker 的話請先百度了解一下),3臺虛擬機都要

第三步,創(chuàng)建存儲目錄 /usr/local/docker/elasticsearch,3臺虛擬機都要,如下

mkdir /usr/local/docker/elasticsearch

并創(chuàng)建相關(guān)掛載目錄,3臺虛擬機都要,如下

mkdir /usr/local/docker/elasticsearch/config
mkdir /usr/local/docker/elasticsearch/data
mkdir /usr/local/docker/elasticsearch/log
mkdir /usr/local/docker/elasticsearch/plugins

還要對文件夾加設(shè)置開放權(quán)限,如果不開放權(quán)限,則會報錯無法寫入數(shù)據(jù)的情況,3臺虛擬機都要,如下

chmod 777 /usr/local/docker/elasticsearch/config
chmod 777 /usr/local/docker/elasticsearch/data
chmod 777 /usr/local/docker/elasticsearch/log
chmod 777 /usr/local/docker/elasticsearch/plugins
image.png

第四步,在 /usr/local/docker/elasticsearch/config 目錄下新建 elasticsearch.yml 配置文件,3臺虛擬機都要,如下

vim /usr/local/docker/elasticsearch/config/elasticsearch.yml

172.16.31.191

# 集群名稱
cluster.name: elasticsearch-cluster
# 當(dāng)前該節(jié)點的名稱
node.name: node-1
# 是不是有資格競選主節(jié)點
node.master: true
# 是否存儲數(shù)據(jù)
node.data: true
# 最大集群節(jié)點數(shù)
node.max_local_storage_nodes: 3
# 給當(dāng)前節(jié)點自定義屬性(可以省略)
#node.attr.rack: r1
# 數(shù)據(jù)存檔位置
path.data: /usr/share/elasticsearch/data
# 日志存放位置
path.logs: /usr/share/elasticsearch/log
# 是否開啟時鎖定內(nèi)存(默認為是)
#bootstrap.memory_lock: true
# 設(shè)置網(wǎng)關(guān)地址,我是被這個坑死了,這個地址我原先填寫了自己的實際物理IP地址,
# 然后啟動一直報無效的IP地址,無法注入9300端口,這里只需要填寫0.0.0.0
network.host: 172.16.31.191
# 設(shè)置其它結(jié)點和該結(jié)點交互的ip地址,如果不設(shè)置它會自動判斷,值必須是個真實的ip地址,設(shè)置當(dāng)前物理機地址,
# 如果是docker安裝節(jié)點的IP將會是配置的IP而不是docker網(wǎng)管ip
network.publish_host: 172.16.31.191
# 設(shè)置映射端口
http.port: 9200
# 內(nèi)部節(jié)點之間溝通端口
transport.tcp.port: 9300
# 集群發(fā)現(xiàn)默認值為127.0.0.1:9300,如果要在其他主機上形成包含節(jié)點的群集,如果搭建集群則需要填寫
#es7.x 之后新增的配置,寫入候選主節(jié)點的設(shè)備地址,在開啟服務(wù)后可以被選為主節(jié)點,也就是說把所有的節(jié)點都寫上
discovery.seed_hosts: ["172.16.31.191:9300","172.16.31.192:9300","172.16.31.193:9300"]
# 當(dāng)你在搭建集群的時候,選出合格的節(jié)點集群,有些人說的太官方了,
# 其實就是,讓你選擇比較好的幾個節(jié)點,在你節(jié)點啟動時,在這些節(jié)點中選一個做領(lǐng)導(dǎo)者,
# 如果你不設(shè)置呢,elasticsearch就會自己選舉,這里我們把三個節(jié)點都寫上
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
# 在群集完全重新啟動后阻止初始恢復(fù),直到啟動N個節(jié)點
# 簡單點說在集群啟動后,至少復(fù)活多少個節(jié)點以上,那么這個服務(wù)才可以被使用,否則不可以被使用,
gateway.recover_after_nodes: 2
# 刪除索引是是否需要顯示其名稱,默認為顯示
#action.destructive_requires_name: true
# 加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"

172.16.31.192

# 集群名稱
cluster.name: elasticsearch-cluster
# 當(dāng)前該節(jié)點的名稱
node.name: node-2
# 是不是有資格競選主節(jié)點
node.master: true
# 是否存儲數(shù)據(jù)
node.data: true
# 最大集群節(jié)點數(shù)
node.max_local_storage_nodes: 3
# 給當(dāng)前節(jié)點自定義屬性(可以省略)
#node.attr.rack: r1
# 數(shù)據(jù)存檔位置
path.data: /usr/share/elasticsearch/data
# 日志存放位置
path.logs: /usr/share/elasticsearch/log
# 是否開啟時鎖定內(nèi)存(默認為是)
#bootstrap.memory_lock: true
# 設(shè)置網(wǎng)關(guān)地址,我是被這個坑死了,這個地址我原先填寫了自己的實際物理IP地址,
# 然后啟動一直報無效的IP地址,無法注入9300端口,這里只需要填寫0.0.0.0
network.host: 0.0.0.0
# 設(shè)置其它結(jié)點和該結(jié)點交互的ip地址,如果不設(shè)置它會自動判斷,值必須是個真實的ip地址,設(shè)置當(dāng)前物理機地址,
# 如果是docker安裝節(jié)點的IP將會是配置的IP而不是docker網(wǎng)管ip
network.publish_host: 172.16.31.192
# 設(shè)置映射端口
http.port: 9200
# 內(nèi)部節(jié)點之間溝通端口
transport.tcp.port: 9300
# 集群發(fā)現(xiàn)默認值為127.0.0.1:9300,如果要在其他主機上形成包含節(jié)點的群集,如果搭建集群則需要填寫
# es7.x 之后新增的配置,寫入候選主節(jié)點的設(shè)備地址,在開啟服務(wù)后可以被選為主節(jié)點,也就是說把所有的節(jié)點都寫上
discovery.seed_hosts: ["172.16.31.191:9300","172.16.31.192:9300","172.16.31.193:9300"]
# 當(dāng)你在搭建集群的時候,選出合格的節(jié)點集群,有些人說的太官方了,
# 其實就是,讓你選擇比較好的幾個節(jié)點,在你節(jié)點啟動時,在這些節(jié)點中選一個做領(lǐng)導(dǎo)者,
# 如果你不設(shè)置呢,elasticsearch就會自己選舉,這里我們把三個節(jié)點都寫上
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
# 在群集完全重新啟動后阻止初始恢復(fù),直到啟動N個節(jié)點
# 簡單點說在集群啟動后,至少復(fù)活多少個節(jié)點以上,那么這個服務(wù)才可以被使用,否則不可以被使用,
gateway.recover_after_nodes: 2
# 刪除索引是是否需要顯示其名稱,默認為顯示
#action.destructive_requires_name: true
# 加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"

172.16.31.193

# 集群名稱
cluster.name: elasticsearch-cluster
# 當(dāng)前該節(jié)點的名稱
node.name: node-3
# 是不是有資格競選主節(jié)點
node.master: true
# 是否存儲數(shù)據(jù)
node.data: true
# 最大集群節(jié)點數(shù)
node.max_local_storage_nodes: 3
# 給當(dāng)前節(jié)點自定義屬性(可以省略)
#node.attr.rack: r1
# 數(shù)據(jù)存檔位置
path.data: /usr/share/elasticsearch/data
# 日志存放位置
path.logs: /usr/share/elasticsearch/log
# 是否開啟時鎖定內(nèi)存(默認為是)
#bootstrap.memory_lock: true
# 設(shè)置網(wǎng)關(guān)地址,我是被這個坑死了,這個地址我原先填寫了自己的實際物理IP地址,
# 然后啟動一直報無效的IP地址,無法注入9300端口,這里只需要填寫0.0.0.0
network.host: 0.0.0.0
# 設(shè)置其它結(jié)點和該結(jié)點交互的ip地址,如果不設(shè)置它會自動判斷,值必須是個真實的ip地址,設(shè)置當(dāng)前物理機地址,
# 如果是docker安裝節(jié)點的IP將會是配置的IP而不是docker網(wǎng)管ip
network.publish_host: 172.16.31.193
# 設(shè)置映射端口
http.port: 9200
# 內(nèi)部節(jié)點之間溝通端口
transport.tcp.port: 9300
# 集群發(fā)現(xiàn)默認值為127.0.0.1:9300,如果要在其他主機上形成包含節(jié)點的群集,如果搭建集群則需要填寫
# es7.x 之后新增的配置,寫入候選主節(jié)點的設(shè)備地址,在開啟服務(wù)后可以被選為主節(jié)點,也就是說把所有的節(jié)點都寫上
discovery.seed_hosts: ["172.16.31.191:9300","172.16.31.192:9300","172.16.31.193:9300"]
# 當(dāng)你在搭建集群的時候,選出合格的節(jié)點集群,有些人說的太官方了,
# 其實就是,讓你選擇比較好的幾個節(jié)點,在你節(jié)點啟動時,在這些節(jié)點中選一個做領(lǐng)導(dǎo)者,
# 如果你不設(shè)置呢,elasticsearch就會自己選舉,這里我們把三個節(jié)點都寫上
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
# 在群集完全重新啟動后阻止初始恢復(fù),直到啟動N個節(jié)點
# 簡單點說在集群啟動后,至少復(fù)活多少個節(jié)點以上,那么這個服務(wù)才可以被使用,否則不可以被使用,
gateway.recover_after_nodes: 2
# 刪除索引是是否需要顯示其名稱,默認為顯示
#action.destructive_requires_name: true
# 加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"

第五步,docker方式啟動 ElasticSearch,3臺虛擬機都要,如下

172.16.31.191

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /usr/local/docker/elasticsearch/log:/usr/share/elasticsearch/log --name elasticsearch-1 elasticsearch:7.7.0

172.16.31.192

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /usr/local/docker/elasticsearch/log:/usr/share/elasticsearch/log --name elasticsearch-2 elasticsearch:7.7.0

172.16.31.193

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /usr/local/docker/elasticsearch/log:/usr/share/elasticsearch/log --name elasticsearch-3 elasticsearch:7.7.0

通過訪問 172.16.31.191:9200/_cat/nodes?pretty 查看集群狀態(tài),如下則表示集群部署成功

image.png

注意,如果出現(xiàn)docker容器啟動后自動崩潰的問題,其實主要的問題是分配給ES的內(nèi)存太小了,通過以下方式解決

# 編輯 /etc/sysctl.conf 文件
vi /etc/sysctl.conf
# 添加 vm.max_map_count=262144 配置
vm.max_map_count=262144
# 保存后執(zhí)行 sysctl -p
sysctl -p

第六步,任選一臺虛擬機使用docker方式配置 elasticsearch-head 插件,我選的是 172.16.31.191,如下

docker run -d --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5

通過訪問 172.16.31.191:9100 查看,輸入節(jié)點ip端口進行連接,如下則表示部署成功

image.png

注意

如果出現(xiàn)在 elasticsearch-head 數(shù)據(jù)瀏覽中查詢不出數(shù)據(jù)的問題,通過修改容器里面的 vendor.js 配置文件解決,如下

  1. 因為docker容器里面無法使用vi/vim,所以需要先將文件拷貝出來
docker cp elasticsearch-head:/usr/src/app/_site/vendor.js ./
  1. 修改以下配置
vi vendor.js

共有兩處:
1、6886行
contentType: "application/x-www-form-urlencoded"
改成
contentType: "application/json;charset=UTF-8"

2、7573行
var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
改成
var inspectData = s.contentType === "application/json;charset=UTF-8" &&

  1. 將改完后的文件拷貝回容器
docker cp vendor.js elasticsearch-head:/usr/src/app/_site

無需重啟,刷新頁面即可

第七步,配置ik分詞器,3臺虛擬機都要

1、GitHub下載壓縮包,注意選擇的版本要跟 ElasticSearch 7.7.0 版本一致!選擇 7.7.0 版本,如下

https://github.com/medcl/elasticsearch-analysis-ik/releases

image.png

2、將壓縮包上傳到 /usr/local/docker/elasticsearch/plugins 目錄下,并進入該目錄執(zhí)行 unzip elasticsearch-analysis-ik-7.7.0.zip -d ik-analyzer 命令解壓縮,注意!解壓后要把 elasticsearch-analysis-ik-7.7.0.zip 刪除掉

cd /usr/local/docker/elasticsearch/plugins
unzip elasticsearch-analysis-ik-7.7.0.zip -d ik-analyzer

3、重啟 ElasticSearch 即可

172.16.31.191

docker restart elasticsearch-1

172.16.31.192

docker restart elasticsearch-2

172.16.31.193

docker restart elasticsearch-3

第八步,docker方式安裝部署 Kibana 7.7.0(版本一定要跟ElasticSearch 7.7.0 一致),任選一臺虛擬機使用docker方式配置 elasticsearch-head 插件,我選的是 172.16.31.191

  1. 創(chuàng)建存儲目錄 /usr/local/docker/kibana,如下
mkdir /usr/local/docker/kibana

并創(chuàng)建相關(guān)掛載目錄,如下

mkdir /usr/local/docker/kibana/config
  1. 在 /usr/local/docker/kibana/config 目錄創(chuàng)建 kibana.yml 配置文件,如下
vim /home/kibana/config/kibana.yml

kibana.yml

# kibana的映射端口
server.port: 5601
# 網(wǎng)關(guān)地址
server.host: "0.0.0.0"
# Kibana實例對外展示的名稱
server.name: "kibana-172.16.31.191"
# ElasticSearch的集群地址,也就是說所有的集群IP
elasticsearch.hosts: ["http://172.16.31.191:9200","http://172.16.31.192:9200","http://172.16.31.193:9200"]
# 設(shè)置頁面語言,中文使用zh-CN,英文使用en
i18n.locale: "zh-CN"
# 這個配置還沒理解清楚………………
xpack.monitoring.ui.container.elasticsearch.enabled: true
  1. docker方式安裝部署 Kibana 7.7.0,如下
docker run -d -p 5601:5601 -v /usr/local/docker/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml --name kibana kibana:7.7.0

通過訪問 172.16.31.191:5601 查看,如下則表示部署成功

image.png

第九步,通過Kibana可視化平臺簡單操作ElasticSearch集群,并使用ik分詞器,如下

image.png
最后編輯于
?著作權(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ù)。

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