系統:Centos6
ES版本:6.4.0
服務器三臺
172.16.0.8
172.16.0.6
172.16.0.22java
部署jdk
解壓jdk放在/data目錄,/data/jdk
配置環境變量,/etc/proifle裏面加入以下node
export JAVA_HOME=/data/jdk export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
source /etc/profile生效,查看版本java -versiongit
部署ES集羣,三臺機器一樣的操做
一、添加普通用戶啓動esuseradd elasticsearch
github
二、安裝ESnpm
tar xf elasticsearch-6.4.0.tar.gz -C /data/ mv /data/elasticsearch-6.4.0/ /data/elasticsearch mkdir /data/elasticsearch/startlogs
三、配置elasticsearch.yml文件內容bootstrap
cp /data/elasticsearch/config/elasticsearch.yml /data/elasticsearch/config/elasticsearch.yml.bak cat elasticsearch.yml cluster.name: escluster node.name: es1 node.master: true node.data: true path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs bootstrap.memory_lock: true bootstrap.system_call_filter: false http.port: 9200 network.host: 0.0.0.0 discovery.zen.minimum_master_nodes: 2 discovery.zen.ping_timeout: 3s discovery.zen.ping.unicast.hosts: ["172.16.0.8:9300","172.16.0.6:9300","172.16.0.22:9300"]
三臺機器不同的配置點以下vim
node.name: es1 ===》172.16.0.8 node.name: es2 ===》172.16.0.6 node.name: es3 ===》172.16.0.22
四、配置文件重點參數解析
(1)cluster.name
集羣名字,三臺集羣的集羣名字都必須一致跨域
(2)node.name
節點名字,三臺ES節點字都必須不同bash
(3)discovery.zen.minimum_master_nodes:2
表示集羣最少的master數,若是集羣的最少master數據少於指定的數,將沒法啓動,官方推薦node master數設置爲集羣數/2+1,我這裏三臺ES服務器,配置最少須要兩臺master,整個集羣纔可正常運行,服務器
(4)node.master該節點是否有資格選舉爲master,若是上面設了兩個mater_node 2,也就是最少兩個master節點,則集羣中必須有兩臺es服務器的配置爲node.master: true的配置,配置了2個節點的話,若是主服務器宕機,整個集羣會不可用,因此三臺服務器,須要配置3個node.masdter爲true,這樣三個master,宕了一個主節點的話,他又會選舉新的master,還有兩個節點能夠用,只要配了node master爲true的ES服務器數正在運行的數量很多於master_node的配置數,則整個集羣繼續可用,我這裏則配置三臺es node.master都爲true,也就是三個master,master服務器主要管理集羣狀態,負責元數據處理,好比索引增長刪除分片分配等,數據存儲和查詢都不會走主節點,壓力較小,jvm內存可分配較低一點
(5)node.data
存儲索引數據,三臺都設爲true便可
(6)bootstrap.memory_lock: true
鎖住物理內存,不使用swap內存,有swap內存的能夠開啓此項
(7)discovery.zen.ping_timeout: 3000s
自動發現拼其餘節點超時時間
(8)discovery.zen.ping.unicast.hosts: ["172.16.0.8:9300","172.16.0.6:9300","172.16.0.22:9300"]
設置集羣的初始節點列表,集羣互通端口爲9300
五、jvm調優
vim /data/elasticsearch/config/jvm.options
-Xms1g 修改成 ===> -Xms2g -Xmx1g 修改成 ===> -Xmx2g
設置爲物理內存一半最佳,可根據服務器內存去選擇調
六、設置權限
chown -R elasticsearch: /data/elasticsearch
七、操做系統調優(必須配置,不然ES起不來)
【1】內存優化
在/etc/sysctl.conf添加以下內容
fs.file-max=655360 vm.max_map_count=655360
sysctl -p生效
解釋:
(1)vm.max_map_count=655360
系統最大打開文件描述符數
(2)vm.max_map_count=655360
限制一個進程擁有虛擬內存區域的大小
【2】修改vim /etc/security/limits.conf
* soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 * soft memlock unlimited * hard memlock unlimited
解釋:
(nofile)最大開打開文件描述符
(nproc)最大用戶進程數
(memlock)最大鎖定內存地址空間
【3】修改/etc/security/limits.d/90-nproc.conf
將1024修改成65536
* soft nproc 1024 修改前 * soft nproc 65536 修改後
ctrl +d從進終端
ulimit -a查看
八、編寫es啓動腳本
#!/bin/bash ROOT=/data USER=elasticsearch NAME=elasticsearch DIR=${ROOT}/${NAME} BIN="${DIR}/bin/${NAME}" PID=${DIR}/.${NAME}.pid LOG=${DIR}/startlogs/${NAME}.log start(){ ps -ef |grep ${DIR}|grep -v grep PROC_STAT=$? if [ ${PROC_STAT} != 0 ] then su - ${USER} -c "${BIN} > ${LOG} 2>&1 &" sleep 1 PROC_PID=`ps -ef|grep ${DIR}|grep -v grep|awk '{print $2}'` su - ${USER} -c "echo ${PROC_PID} > ${PID}" else echo "${NAME} start fail,please check it!" fi } stop(){ if [ -f $PID ] then kill $(cat $PID) rm -rf ${PID} else PROC_PID=`ps -ef |grep ${DIR}|grep -v grep|awk '{print $2}'` if [ -n ${PROC_PID} ] then kill ${PROC_PID} echo "${NAME} had close." else echo "${NAME} maybe not run ,please check it!" fi fi } status(){ ps -ef |grep ${DIR}|grep -v grep } case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop sleep 5 start ;; *) echo "Usage: /etc/init.d/${NAME} {start|stop|restart}" exit 1 esac exit 0
查看啓動
netstat -tlnp | egrep '9200|9300' service elasticsearch status
九、監控API
GET /_cat /_cat/health /_cat/nodes /_cat/master /_cat/indices /_cat/allocation /_cat/shards /_cat/shards/{index} /_cat/thread_pool /_cat/segments /_cat/segments/{index}
(1)查看單節點
curl http://172.16.0.8:9200
(2)查看集羣信息和健康狀態
curl http://172.16.0.8:9200/_cluster/health?pretty
(3)查看全部節點
curl -XGET 'http://172.16.0.8:9200/_cat/nodes?pretty'
解釋:
(mdi)表示爲master節點
(*)表示爲主master
(4)只查看集羣健康狀態
curl -XGET 'http://172.16.0.8:9200/_cat/health?pretty'
(5)查看主master機器
curl -XGET 'http://172.16.0.8:9200/_cat/master?pretty'
2、部署HEAD插件(我在ES主機1部署)
一、安裝node.js、npm和git工具
yum -y install nodejs npm git
二、下載head插件到/data目錄
cd /data/
git clone git://github.com/mobz/elasticsearch-head.git
三、修改源地址爲淘寶npm鏡像,加快下載速度
npm config set registry http://registry.npm.taobao.org/
四、進入到head插件程序目錄安裝head所需的庫和第三方框架
cd /data/elasticsearch-head
npm install
五、修改head目錄的配置文件/data/elasticsearch-head/_site/app.js
找到以下內容:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; 將其中的"http://localhost:9200"; 改成"http://公網IP:9200";
解釋:
能夠修改成任意一臺集羣中的地址,這裏我設了master的地址,這裏表示head插件將經過172.16.0.8這臺ES機器的公網IP訪問es集羣中的任意一個節點,上述配置的連ES服務器的公網IP,則必須在該ES服務器設置以下第六步,只有該臺服務器須要設置第六步
六、修改es配置文件,容許head跨域名訪問es,須要重啓
http.cors.enabled: true http.cors.allow-origin: "*"
解釋:
(http.cors.enabled: true)表示開啓head跨域名訪問支持,默認爲false
(http.cors.allow-origin: "") 表示容許跨域名容許的域名地址,表示全部
此部只須要在安裝head插件的es服務器上添加便可
七、重啓es
service elasticsearch restart
八、啓動head插件服務
cd /data/elasticsearch-head/
後臺行運grunt server &
九、訪問head插件
訪問方式:http://公網IP:9100