官网https://www.elastic.co/cn/
linux上安装:
1.安装jdk
2.安装elasticSearch
上传压缩包解压进入,注意不能用root账户操作elastic
添加分组 groupadd esgroup(组名)
添加用户 useradd esuser(用户名) -g esgrouop(指定用户组) -p 123456(指定密码)
切换为新用户su esuser,同时需要用root用户给当前用户授权可以操作es目录
chown -R esuser:esgroup elasticsearch-6.2.4
后台运行:解压目录下的/bin/下执行./elasticsearch -d
测试连接:curl 127.0.0.1:9200
实现远程访问:
需要对config/elasticsearch.yml进行 配置network.host为es服务器的ip地址和port
会出现3个错误
问题一:max file descriptors [4096] for elasticsearch process is too low,
increase to at least [65536]
原因:普通用户执行问题
解决:切换到root用户,编辑/etc/security/limits.conf
//文件最后加入 esuser就是上面添加的用户名
esuser soft nofile 65536
esuser hard nofile 65536
esuser soft nproc 4096
esuser hard nproc 4096
问题二:max number of threads [1024] for user [elk] is too low, increase to at least [2048]
原因:普通用户执行操作数低
vim /etc/security/limits.d/20-nproc.conf
修改为 esuser soft nproc 4096
问题三:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:操作系统的vm.max_map_count参数设置太小导致的
解决:切换超级用户,编辑/etc/sysctl.conf
添加 vm.max_map_count=655360
保存退出,执行 sysctl -p
再次启动如果还是失败需要重启电脑或者虚拟机再重启
安装Head插件
Head是elasticsearch的集群管理工具,可以用于数据的浏览和查询
(1)elasticsearch-head是一款开源软件,被托管在github上面,所以如果我们要使用它,必须先安装git,通过git获取elasticsearch-head
1.查看系统是否已经安装git
git --version
2.CentOS7 yum 安装git
yum install -y git
(2)运行elasticsearch-head会用到grunt,而grunt需要npm包管理器,所以nodejs是必须要安装的
通过安装包安装,可以使用
先下载安装包到 /usr/local路径下
wget https://npm.taobao.org/mirrors/node/v8.0.0/node-v8.0.0-linux-x64.tar.xz
下载完成后解压
tar -xvf node-v8.0.0-linux-x64.tar.xz
重命名为node
mv node-v8.1.4-linux-x64 node
配置环境变量
vim /etc/profile
在文件的最后添加
#set for nodejs
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
保存退出后执行更新命令
source /etc/profile
如果不生效,重启系统就可以
检测node和npm是否安装成功
node -v
npm -v
(3)elasticsearch5.0之后,elasticsearch-head不做为插件放在其plugins目录下了。
使用git拷贝elasticsearch-head到本地
cd /usr/local/
git clone git://github.com/mobz/elasticsearch-head.git
(4)安装elasticsearch-head依赖包
//安装grunt
[root@localhost local]# npm install -g grunt-cli
[root@localhost _site]# cd /usr/local/elasticsearch-head/
使用淘宝的npm镜像cnpm
因为下载都是国外服务器很慢会掉线,我们需要使用淘宝的npm镜像cnpm。
执行命令:
npm install -g cnpm --registry=https://registry.npm.taobao.org
启用淘宝的npm镜像cnpm,注意:启用后当我们要输入npm命令时,就需要输入cnpm
这个过程很慢,慢慢等吧。
//安装依赖包
[root@localhost elasticsearch-head]# cnpm install
如果有这个报错信息,找到报错的根源:
at Timeout._onTimeout (/nodejs/lib/node_modules/cnpm/node_modules/urllib/lib/urllib.js:849:15)
at ontimeout (timers.js:498:11)
at tryOnTimeout (timers.js:323:5)
at Timer.listOnTimeout (timers.js:290:5)
然后找到报错根源:/nodejs/lib/node_modules/cnpm/node_modules/urllib/lib/urllib.js
修改掉文件里面的常量 TIMEOUT、TIMEOUTS 的 5s 为 10s
(5)修改Gruntfile.js
[root@localhost _site]# cd /usr/local/elasticsearch-head/
[root@localhost elasticsearch-head]# vi Gruntfile.js
在connect-->server-->options下面添加:hostname:’*’,允许所有IP可以访问
(6)修改elasticsearch-head默认连接地址
[root@localhost elasticsearch-head]# cd /usr/local/elasticsearch-head/_site/
[root@localhost _site]# vi app.js
将this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") ||
"http://localhost:9200";中的localhost修改成你es的服务器地址
(7)配置elasticsearch允许跨域访问
打开elasticsearch的配置文件elasticsearch.yml,在文件末尾追加下面两行代码即可:
http.cors.enabled: true
http.cors.allow-origin: "*"
(8)打开9100端口
[root@localhost elasticsearch-head]# firewall-cmd --zone=public --add-port=9100/tcp --permanent
重启防火墙
[root@localhost elasticsearch-head]# firewall-cmd --reload
(9)启动elasticsearch
(10)启动elasticsearch-head
[root@localhost _site]# cd /usr/local/elasticsearch-head/
[root@localhost elasticsearch-head]# node_modules/grunt/bin/grunt server
(11)访问elasticsearch-head
ip地址:9100
安装Kibana ——-比较常用的es客户端
Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据
(1)下载Kibana
https://www.elastic.co/downloads/kibana
(2)解压缩,并把解压后的目录命名为kibana
(3)编辑kibana配置文件kibana下的config下的kibana.yml
将server.host,elasticsearch.url修改成所在服务器的ip地址
(4)开启5601端口
firewall-cmd --permanent --zone=public --add-port=5601/tcp
firewall-cmd –-reload
(5)启动Kibana
[root@localhost /]# /usr/local/kibana/bin/kibana
浏览器访问:http://ip:5601
安装中文分词器
(1)下载中文分词器
https://github.com/medcl/elasticsearch-analysis-ik
下载elasticsearch-analysis-ik-master.zip
(2)解压elasticsearch-analysis-ik-master.zip
unzip elasticsearch-analysis-ik-master.zip
(3)进入elasticsearch-analysis-ik-master,编译源码
mvn clean install -Dmaven.test.skip=true
因为使用maven编译所以要先装maven
centos 7 安装maven
下载地址
http://maven.apache.org/download.cgi
版本 apache-maven-3.3.9 -bin.tar.gz
tar -xvf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 /usr/local/apache-maven
文件存放好之后,设置环境变量,打开etc/profile,在文件中加入下边的代码:
写入环境变量
vi /etc/profile
最后一行加入
这个前提是安装了java1.8
export JAVA_HOME=/usr/local/jdk1.8
export MAVEN_HOME=/usr/local/apache-maven
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH
再执行
source /etc/profile
(4)在es的plugins文件夹下创建目录ik
(5)将编译后生成的elasticsearch-analysis-ik-版本.zip移动到ik下,并解压
(6)解压后的内容移动到ik目录下
多了一层目录所有要把解压后的文件移出到ik下.
单机版es推荐创建索引设置
因为只有一台服务器所以没有备用,挂了数据全部丢失重新导入数据
PUT /lib/
{
“settings”:{
“index”:{
“number_of_shards”: 1,
“number_of_replicas”: 0
}
}
}
集群版es配置需要修改配置文件(最少两台,最好3台)
#集群的名称
cluster.name: my-application
#节点名称,不能重复
node.name: node-1
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂 了就会重新选举master
node.master: true
#本机的es服务地址
network.host: 192.168.88.100
#设置对外服务的http端口,默认为9200
http.port: 9200
设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#Elasticsearch将绑定到可用的环回地址,并将扫描端口9300到9305以尝试连接到运行在同一台服务器上的其他节点。
#这提供了自动集群体验,而无需进行任何配置。数组设置或逗号分隔的设置。每个值的形式应该是host:port或host
#(如果没有设置,port默认设置会transport.profiles.default.port 回落到transport.tcp.port)。
#请注意,IPv6主机必须放在括号内。默认为127.0.0.1, [::1]
discovery.zen.ping.unicast.hosts: [“192.168.88.100:9300”,“192.168.88.111:9300”]
#允许跨域访问
http.cors.enabled: true
http.cors.allow-origin: “*”
#允许该节点存储数据(默认开启)
node.data: true
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap. 什么时候会swapping呢?一般普通硬盘每秒大概90次,实际业务每秒2千多次了就可能出现内存交换到磁盘。这里需要额外设置下系统配置文件 需要切换到root用户:(以下1.2.3.不在此文件内操作
1,修改/etc/security/limits.conf
- soft nofile 65536
- hard nofile 65536
- soft nproc 32000
- hard nproc 32000
- hard memlock unlimited
- soft memlock unlimited
2,修改/etc/systemd/system.conf
修改下面几项
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
3,最后 /bin/systemctl daemon-reload 执行下即可
)
bootstrap.memory_lock: true
#如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 -为了避免脑裂, 集群节点数最少为 半数+1
#意思是当节点1是master的时候如果访问量大可能会出现无反应的情况,集群以为他死了就把节点2升级为master,结果过了一段时间后节点1正常了此时就会出现两个master,所以一般需要3台服务器,设置更换master的时候需要两台以上确定.如果是两台服务器把下面这行注释掉
discovery.zen.minimum_master_nodes: 2
这里再说几点对于小系统应用es的优化和建议:
第一:建议用SSD,提高性能;
第二:新建索引的时候 分片设置成1,备份设置成0,能有效的降低IOPS;(分片多,备份多了,一直在进行磁盘操作,以及内存也紧张,弄不好,服务器配置低的话,直接炸了);