系统: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