QQ交流羣:64655993 希望能對您有所幫助!!!
官方網站:
https://www.elastic.co/cn/products/elasticsearch
一、基礎環境說明
1、系統說明
系統:CentOS-7-x86_64-Minimal-1708
下載地址:
http://archive.kernel.org/centos-vault/7.4.1708/isos/x86_64/
2、安裝虛擬機
安裝3個虛擬機(生產環境節點數量,視具體業務需求而定)
每個虛擬機配置: 3G內存 2核CPU
安裝過程可參考:
https://blog.csdn.net/llwy1428/article/details/89328381
3、Elasticsearch 下載地址
https://www.elastic.co/cn/start
二、基礎環境配置
1、修改主機名
編輯集羣中的各個節點主機名(本集羣三個節點的主機名分別爲 node3.cn node4.cn node5.cn)
以 node3.cn 爲例:
[root@localhost~]# hostnamectl set-hostname node3.cn
node4.cn、node5.cn 略。
2、配置虛擬機網絡,每臺虛擬機均接入互聯網(並設置靜態IP)
網卡配置可參考:
https://blog.csdn.net/llwy1428/article/details/85058028
設置靜態IP
此處以node3.cn節點爲例(集羣中其他節點配置參照本節點,注意 ip 唯一):
[[email protected] ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
node3.cn的IP是: IPADDR=192.168.11.133
node4.cn的IP是: IPADDR=192.168.11.134
node5.cn的IP是: IPADDR=192.168.11.135
說明:紅框內爲修改、增加的部分
修改完畢後保存並退出
:wq
重啓network服務
[root@node3 ~]# service network restart
可參考:
https://blog.csdn.net/llwy1428/article/details/85058028
集羣中其他節點配置參照本節點。
3、安裝基本工具(各節點均要安裝)
[root@node3 ~]# yum install -y vim wget lrzsz tree zip unzip net-tools ntp
[root@node3 ~]# yum update -y (可選)
4、(選裝)集羣各節點安裝、配置JDK(es7.x 需要jdk11以上,安裝包中自帶了openjdk)
集羣中各個節點均要安裝JDK
具體步驟參考:
https://blog.csdn.net/llwy1428/article/details/85232267
5、配置防火牆
關閉防火牆,並設置開機禁止啓動
關閉防火牆 : systemctl stop firewalld
查看狀態 : systemctl status firewalld
開機禁用 : systemctl disable firewalld
6、配置host文件
此處以 node3.cn 節點爲例,集羣中其他節點和 node3.cn 相同:
[root@node3 ~]# vim /etc/hosts
7、配置節點間時間同步
本文以阿里時間服務器爲準,阿里雲時間服務器地址:ntp6.aliyun.com
說明:如有專用時間服務器,請更改時間服務器的主機名或者IP地址,主機名需要在etc/hosts文件中做好映射。
以 node3.cn 爲例:
設置系統時區爲東八區(上海時區)
[root@node3 ~]# timedatectl set-timezone Asia/Shanghai
關閉ntpd服務(一定要做這一步,否則自動同步時間會失效)
[root@node3 ~]# systemctl stop ntpd.service
設置ntpd服務禁止開機啓動
[root@node3 ~]# systemctl disable ntpd
設置定時任務
[root@node3 ~]# crontab -e
寫入以下內容(每10分鐘同步一下阿里雲時間服務器):
0-59/10 * * * * /usr/sbin/ntpdate ntp6.aliyun.com
重啓定時任務服務
[root@node3 ~]# /bin/systemctl restart crond.service
設置定時任務開機啓動
[root@node3 ~]# vim /etc/rc.local
加入以下內容後,保存並退出
:wq
/bin/systemctl start crond.service
集羣中其他各個節點同 node3.cn 節點。
8、配置系統環境爲UTF8
以 node3.cn 爲例:
[root@node3 ~]# echo "export LANG=zh_CN.UTF-8 " >> ~/.bashrc
[root@node3 ~]# source ~/.bashrc
集羣中其他各個節點同 node3.cn 節點。
9、修改文件最大打開數(非生產環境,可不配置)
此處以 node3.cn 節點爲例:
[root@node3 ~]# vim /etc/security/limits.conf
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
[root@node3 ~]# vim /etc/security/limits.d/20-nproc.conf
* soft nproc 204800
* hard nproc 204800
[root@node3 ~]# vim /etc/pam.d/login
session required pam_limits.so
集羣中其他節點配置和 node3.cn 相同
10、禁用SELinux(可選)
以 node3.cn 爲例:
[root@node3 ~]# vim /etc/selinux/config
修改如下內容後,保存並退出
:wq
集羣中其他節點配置和 node3.cn 相同。
11、禁用Transparent HugePages(可選)
以 node3.cn 爲例:
查看
[root@node3 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
效果:
[always] madvise never
[root@node3 ~]# vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
[root@node3 ~]# chmod +x /etc/rc.d/rc.local
重啓系統後,永久生效。
重啓系統後查看:
[root@node3 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
效果:
always madvise [never]
集羣中其他節點配置和 node3.cn 相同。
12、配置內存 /etc/sysctl.conf
[root@node3 ~]# vim /etc/sysctl.conf
寫入(根據自身硬件條件而定,其它節點於此相同)
vm.max_map_count=262144
三、Elasticsearch 集羣部署、配置
1、每個節點創建文件夾 /opt/elasticsearch/
[root@node3 ~]# mkdir /opt/elasticsearch/
2、上傳文件 rz
把官網上的壓縮包(elasticsearch-7.4.0-linux-x86_64.tar.gz)下載到本地,再用 rz 或者其他第三方ftp工具把安裝包上傳至節點 node3 的指定目錄下(網絡允許的條件下,也可直接使用 wget 直接下載)
[root@node3 elasticsearch]# rz
上傳完畢後,解壓縮壓縮包
[root@node3 elasticsearch]# tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz
查看解壓後的文件夾
3、修改配置文件 elasticsearch.yml
[root@node3 ~]# vim /opt/elasticsearch/elasticsearch-7.0.0/config/elasticsearch.yml
文件內容如下(具體參數說明,見文章結尾):
# ---------------------------------- Cluster ---
cluster.name: es-cluster
# ------------------------------------ Node ---
# 注意:每個節點的名字(node.name)不要相同
node.name: node3.cn
node.master: true
node.data: true
# ----------------------------------- Paths ---
path.data: /opt/elasticsearch/elasticsearch-7.4.0/data
path.logs: /opt/elasticsearch/elasticsearch-7.4.0/logs
# ---------------------------------- Network ---
network.host: 0.0.0.0
http.port: 9200
# --------------------------------- Discovery ---
cluster.initial_master_nodes: ["node3.cn", "node4.cn","node5.cn"]
discovery.zen.ping.unicast.hosts: ["192.168.11.133", "192.168.11.134","192.168.11.135"]
discovery.zen.minimum_master_nodes: 2
修改配置文件 elasticsearch-env
[root@node3 ~]# vi /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-env
JAVA_HOME="/opt/elasticsearch/elasticsearch-7.4.0/jdk"
4、分發文件
把節點 node3 上已經配置好的es所有文件發送給集羣的所有節點的相同目錄 (會提示輸入各自節點的 root 用戶的密碼)
[root@node3 ~]# scp -r /opt/elasticsearch/elasticsearch-7.4.0 node4.cn:/opt/elasticsearch/
[root@node3 ~]# scp -r /opt/elasticsearch/elasticsearch-7.4.0 node5.cn:/opt/elasticsearch/
分別在 node4、node5 上編輯文件 elasticsearch.yml
修改各自的 node.name (注意區分 node.name 保證集羣中node.name唯一)
[root@node4 ~]# vim /opt/elasticsearch/elasticsearch-7.4.0/config/elasticsearch.yml
[root@node5 ~]# vim /opt/elasticsearch/elasticsearch-7.4.0/config/elasticsearch.yml
保存後退出 :wq
5、創建用戶組及用戶信息
[root@node3 ~]# groupadd es
[root@node3 ~]# useradd es -g es
[root@node3 ~]# chown -R es:es /opt/elasticsearch/*
集羣中其他各節點操作同 node3 節點。
6、啓動服務
切換用戶
[root@node3 ~]# su es
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch -d
啓動成功效果:
其他各節點操作同 node3 節點。
7、查看啓動情況
[root@node3 ~]$ jps
亦可在其他節點查看服務啓動情況。
8、在瀏覽器查看啓動結果
在瀏覽器輸入
http://192.168.11.133:9200/
http://192.168.11.134:9200/
http://192.168.11.135:9200/
效果如下:
至此,Centos7.4 手動搭建 Elasticsearch 7 集羣 操作完畢。
有一些可視化工具可直觀的觀察 Elasticsearch 中的更多詳細信息。
如:elasticsearch-head、Kibana、ElasticHD 等
ElasticHD:搭建步驟:
參考:https://hunter.blog.csdn.net/article/details/89326527
elasticsearch-head搭建步驟:
參考:https://hunter.blog.csdn.net/article/details/102336223
Kibana搭建步驟:
參考:https://blog.csdn.net/llwy1428/article/details/89326461
四、可能遇到的問題及解決方案(持續更新)
1、啓動後,過一段時間服務自動掛掉,查看日誌,並報以下錯誤:
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
問題翻譯過來就是:elasticsearch用戶擁有的內存權限太小,至少需要262144;
查看當下的內存
[root@node3 ~]# sysctl -a|grep vm.max_map_count
解決方案:
編輯文件 sysctl.conf
[root@node3 ~]# vim /etc/sysctl.conf
最後添加一行
vm.max_map_count=262144
保存後,重啓系統,永久生效。
(集羣中其他節點操作和node3節點相同)
2、服務啓動失敗
[2019-04-29T22:13:53,403][ERROR][o.e.b.Bootstrap ] [node3.cn] Exception
java.lang.RuntimeException: can not run elasticsearch as root
問題產生原因:elasticsearch不允許在root權限下啓動,需要切換到es用戶。
解決方案:參見第三部分的第4、5兩步
3、切換es用戶後啓動報錯
2019-04-29 22:40:55,736 main ERROR Unable to locate appender "rolling_old" for logger config "root"
問題產生原因:在默認的log目錄下,存在非es用戶權限的文件
解決方案:在root用戶下,給elasticsearch的log目錄下所有文件賦權給es用戶
[root@node3 ~]# chmod -R es:es /opt/elasticsearch/elasticsearch-7.4.0/logs/*
4、啓動時報錯 jdk 版本太低,需要 jdk11 以上
修改文件 elasticsearch-env
[root@node3 ~]# vi /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-env
開頭寫入(各節點都要操作)
JAVA_HOME="/opt/elasticsearch/elasticsearch-7.4.0/jdk"
五、參數說明
cluster.name: elasticsearch
配置es的集羣名稱,默認是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個集羣,就可以用這個屬性來區分不同的集羣。
node.name: “node1.cn”
節點名,默認隨機指定一個name列表中名字,該列表在es的jar包中config文件夾裏name.txt文件中,其中有很多作者添加的有趣名字。
node.master: true
指定該節點是否有資格被選舉成爲node,默認是true,es是默認集羣中的第一臺機器爲master,如果這臺機掛了就會重新選舉master。
node.data: true
指定該節點是否存儲索引數據,默認爲true。
index.number_of_shards: 5
設置默認索引分片個數,默認爲5片。
index.number_of_replicas: 1
設置默認索引副本個數,默認爲1個副本。
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文件夾
bootstrap.mlockall: true
設置爲true來鎖住內存。因爲當jvm開始swapping時es的效率 會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的內存分配給es。 同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過ulimit -l unlimited命令。
network.bind_host: 192.168.0.1
設置綁定的ip地址,可以是ipv4或ipv6的,默認爲0.0.0.0。
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節點的初始列表,可以通過這些節點來自動發現新加入集羣的節點。
下面是一些查詢時的慢日誌參數設置
index.search.slowlog.level: TRACE
index.search.slowlog.threshold.query.warn: 10s
index.search.slowlog.threshold.query.info: 5s
index.search.slowlog.threshold.query.debug: 2s
index.search.slowlog.threshold.query.trace: 500ms
index.search.slowlog.threshold.fetch.warn: 1s
index.search.slowlog.threshold.fetch.info: 800ms
index.search.slowlog.threshold.fetch.debug:500ms
index.search.slowlog.threshold.fetch.trace: 200ms
六、擴展---插件安裝
1、國際化分詞插件 analysis-icu
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-plugin install analysis-icu
2、瀏覽器查看已安裝插件
http://192.168.11.133:9200/_cat/plugins
3、查看其它可直接安裝的插件
[es@node3 ~]$ /opt/elasticsearch/elasticsearch-7.4.0/bin/elasticsearch-plugin install -h
借鑑地址:
https://blog.csdn.net/u012637358/article/details/80994945
ES 基本操作