1、簡介:html
Elasticsearch是一個基於Apache Lucene的開源搜索引擎。不管在開源仍是專有領域,Lucene能夠被認爲是迄今爲止最早進、性能最好的、功能最全的搜索引擎庫。html5
Elasticsearch不只僅是Lucene和全文搜索,咱們還能這樣去描述它:java
· 分佈式的實時文件存儲,每一個字段都被索引並可被搜索node
· 分佈式的實時分析搜索引擎python
· 能夠擴展到上百臺服務器,處理PB級結構化或非結構化數據linux
2、環境準備c++
主機 | 系統 | 配置 | IP |
node1 | Centos7.4 | CPU*2-MEM*4G | 172.16.10.172 |
node2 | Centos7.4 | CPU*2-MEM*4G | 172.16.10.190 |
node3 | Centos7.4 | CPU*2-MEM*4G | 172.16.10.193 |
系統前期優化:(三臺服務器分別按如下調試)git
1.安裝經常使用軟件github
yum install -y ntpdate net-tools vim lrzsz unzip gcc gcc-c++web
2.關閉Firewalld、NetworkManager、Selinux
systemctl stop firewalld
systemctl disable firewalld
systemctl disable NetworkManager
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
3.時間同步
echo "0 */3 * * * /usr/sbin/ntpdate ntp5.aliyum.com >/dev/null 2>&1; /sbin/hwclock -w">>/etc/crontab
4.PAM認證
vim/etc/security/limit.conf #追加到配置文件
* soft nofile 102400
* hard nofile 102400
* soft nproc 102400
* hard nproc 102400
5.增長虛擬內存
Vim /etc/sysctl.conf #追加到配置文件
使用sysctl –p刷新配置
6.配置免密碼登錄:
[root@node1 ~]# ssh-keygen
[root@node1 ~]# ssh-copy-id 172.16.10.190
[root@node1 ~]# ssh-copy-id 172.16.10.193
7.配置hosts
172.16.10.172 node1
172.16.10.190 node2
172.16.10.193 node3
8.注意:
es(elasticsearch)版本2.x以上須要JDK 1.8以上
運行es不能使用root用來來運行
es目錄必須指定一個普通用戶和組(受權)
es對內存和CPU的消耗比較高
es使用的端口看開放iptables:9200,9300等
es配置其餘插件實現資源等可視化監控
es的版本和插件之間版本要匹配
3、Jdk安裝:
軟件包:jdk-8u171-linux-x64.tar.gz
tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_171/ jdk1.8
cat /etc/profile.d/jdk8.sh
export JAVA_HOME=/usr/local/jdk1.8
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jar/tools.jar:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
source /etc/profile.d/jdk8.sh
驗證:java –version
4、ElasticSearch集羣安裝
軟件包:elasticsearch-5.6.5.tar.gz
注意:ElasticSearch安裝不能用root用戶安裝,三臺服務器分別按如下調試
1.新建用戶、組
groupadd es
useradd es -g es
2.解壓、建立目錄、受權
tar xf elasticsearch-5.6.5.tar.gz -C /usr/local/
cd /usr/local/
mv elasticsearch-5.6.5 elasticsearch
mkdir /usr/local/elasticsearch/data/
mkdir /usr/local/elasticsearch/logs/
chown -R es.es /usr/local/elasticsearch
3.elasticsearch目錄介紹
目錄 |
做用 |
/bin |
運行es實例和管理插件的一些腳本 |
/config |
配置文件路徑,包含elasticsearch.yml |
/data |
在節點上每一個索引/碎片的數據文件的位置,能夠多個目錄 |
/lib |
Es使用的庫 |
/logs |
日誌存放目錄 |
/plugins |
已經安裝的插件存放位置 |
/modules |
模塊目錄 |
4.修改配置文件elasticsearch.yml(內置調優)
#node1配置文件
cd /usr/local/elasticsearch/config
[root@node1 config]# cat elasticsearch.yml |egrep -v "^#|^$"
cluster.name: es-cluster
node.name: node-1
path.data: /usr/local/elasticsearch/data/
path.logs: /usr/local/elasticsearch/logs/
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 172.16.10.172
http.port: 9200
http.compression: true
discovery.zen.ping.unicast.hosts: ["172.16.10.172:9300", "172.16.10.190:9300","172.16.10.193:9300"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
#node2配置文件
[root@node2 config]# egrep -v "^#|^$" elasticsearch.yml
cluster.name: es-cluster
node.name: node-2
path.data: /usr/local/elasticsearch/data/
path.logs: /usr/local/elasticsearch/logs/
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 172.16.10.190
http.port: 9200
http.compression: true
discovery.zen.ping.unicast.hosts: ["172.16.10.172:9300", "172.16.10.190:9300","172.16.10.193:9300"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*"
#node3配置文件
[root@node3 config]# egrep -v "^#|^$" elasticsearch.yml
cluster.name: es-cluster
node.name: node-3
path.data: /usr/local/elasticsearch/data/
path.logs: /usr/local/elasticsearch/logs/
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 172.16.10.193
http.port: 9200
http.compression: true
discovery.zen.ping.unicast.hosts: ["172.16.10.172:9300", "172.16.10.190:9300","172.16.10.193:9300"]
discovery.zen.minimum_master_nodes: 2
http.cors.enabled: true
http.cors.allow-origin: "*
解釋說明:
cluster.name 集羣名字,同一個集羣中使用相同名字,單機就隨意
node.name: node-1 節點名字
path.data:分配給當前節點的索引數據所在的位置:
path.logs:日誌文件所在位置
bootstrap.memory_lock: true:設置爲true,memory_lock來鎖定物理內存,避免使用內存交換(SWAP)來提升性能(elasticsearch 2.4版本後)
(bootstrap.mlockall: true:這個是坑,若是加入配置,服務將沒法啓動,緣由沒法找到這個參數,這個參數是在elasticsearch 2.4以前版本纔有)
bootstrap.system_call_filter:系統環境檢測,設置關閉防止致使es沒法啓動
network.host:ES節點網絡地址
http.port:Http傳輸監聽定製端口:默認是9200
http.compression:web服務器和瀏覽器客戶端傳送數據時,將網頁數據/客戶端響應數據在發送給對方前先進行壓縮再傳輸
discovery.zen.ping.unicast.hosts:設置集羣中master節點的初始列表
discovery.zen.minimum_master_nodes:設置參數來保證集羣中的節點能夠通知其餘N個有master資格節點,默認 1
http.cors.enabled和http.cors.allow-origin:容許head插件經過web訪問
注:
node.master: true:指定該節點是否有資格被選舉成爲node,默認是true,es是默認集羣中的第一臺機器爲master,若是這臺機掛了就會從新選舉master。
node.data: true:指定該節點是否存儲索引數據,默認爲true。
#3種配置高性能集羣拓撲結構的模式,以下:
a.若是你想讓節點從不選舉爲主節點,只用來存儲數據,可做爲負載器
node.master: false
node.data: true
b.若是想讓節點成爲主節點,且不存儲任何數據,並保有空閒資源,可做爲協調器
node.master: true
node.data: false
c. 若是想讓節點既不稱爲主節點,又不成爲數據節點,那麼可將他做爲搜索器,從節點中獲取數據,生成搜索結果等
node.master: false
node.data: false
5.啓動elasticsearch
su - eselasticsearch
nohup /usr/local/elasticsearch/bin/elasticsearch &
tail -f nohup.out
集羣效果圖:
6.訪問:http://172.16.10.172:9200/
{
"name" : "node-1",
"cluster_name" : "es-cluster",
"cluster_uuid" : "y1PDOlDvQ5eRDRl0TANUsQ",
"version" : {
"number" : "5.6.5",
"build_hash" : "1a2f265",
"build_date" : "2017-10-06T20:33:39.012Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
Head插件介紹:
head插件是一個elasticsearch的集羣管理工具,相交互的Web前臺,它是徹底由html5編寫的獨立網頁程序。
#ES-Head主要做用
a.它展示ES集羣的拓撲結構,而且能夠經過它來進行索引(Index)和節點(Node)級別的操做
b.它提供一組針對集羣的查詢API,並將結果以json和表格形式返回
c.它提供一些快捷菜單,用以展示集羣的各類狀態
head插件的安裝(head 插件不能放在elasticsearch-5.6.5文件夾裏,head 插件須要單獨放,單獨去執行)
yum -y install unzip zip openssl-devel wget
1.解壓head
unzip elasticsearch-head-master.zip -d /usr/local/
2.安裝node
tar xf node-v10.8.0-linux-x64.tar.gz
mv node-v10.8.0-linux-x64 /usr/local/node
ln -s /usr/local/node/bin/* /usr/local/bin
3.驗證是否安裝配置成功:
node -v
4.安裝grunt
cd elasticsearch-head-master/
npm install -g grunt-cli //執行後會生成node_modules文件夾
npm install --ignore-scripts
5.修改vim Gruntfile.js文件:增長hostname屬性,設置爲*
connect: {
server: {
options: {
port: 9100,
hostname: '*',
base: '.',
keepalive: true
}
}
}
6.修改 vim _site/app.js 文件:修改head的鏈接地址:
this.base_uri = this.config.base_uri || this.prefs.get(「app-base_uri」) || 「http://localhost:9200「;
修改爲ElasticSearch的機器地址
this.base_uri = this.config.base_uri || this.prefs.get(「app-base_uri」) || 「http://172.16.10.172:9200「;
7.執行命令啓動 head
cd /usr/local/elasticsearch-head-master/node_modules/grunt/bin
grunt server
後臺啓動命令(建議後臺啓動,查看out.log啓動狀況)
nohup grunt server &
8.訪問http://172.16.10.172:9100/
Bigdesk介紹
bigdesk是elasticsearch的一個集羣監控工具,能夠經過它來查看集羣的各類狀態,如:cpu、內存使用狀況,索引數據、搜索狀況,http鏈接數等。
注:至少兩臺這個工具纔可用
1.下載軟件包
[root@node1 elasticsearch]# cd plugins/
[root@node1 plugins]# git clone https://github.com/hlstudio/bigdesk
[root@node1 plugins]#cd /usr/local/elasticsearch/plugins/bigdesk/_site
2.啓動bigdesk
[root@node1 _site]# python -m SimpleHTTPServe
3.訪問:http://172.16.10.172:8000
鏈接以前:
鏈接以後:
七、結尾
通過幾天閱讀相關資料,部署過程踩了不少坑,本文實踐屢次測試整理具備參考價值,以上過程內置調優參數,調優建議根據生產需求和官方文檔進行調整相關參數,建議按照本文步驟流程實施部署,少走彎路少採坑。後續繼續建立數據模擬、調優和模擬ES腦裂等等。本文純屬我的筆記,歡迎各位大佬指點指導。推薦架構:Elasticsearch + Logstash + Kibana(ELK)。