Elasticsearch cluster install
Elasticsearch是一个基于Lucene的实时的分布式搜索和分析引擎。
设计用于云计算中,能够达到实时搜索,稳定,可靠, 快速,安装使用方便。基于RESTful接口。
step 1 download JDK and elasticsearch
jdk1.8.0_131 download
elasticsearch5.6.5 download
声明:系统版本:主机windows10,虚拟机服务器centos6.9,elasticsearch-5.6.5,Vmware10.7
不能使用root用户,需要新建一个用户
step 2 install JDK
解压配置环境变量即可使用
export JAVA_HOME=/opt/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
#自JDK1.7之后 CLASSPATH 可以不配置
step 3 system configuration
配置静态IP
sudo cd /etc/sysconfig/network-scripts/ifcfg-ens33
sudo vi ifcfg-ens33 # 这个文件的名称有时可能不相同 ifcfg-eth0 | ifcfg-ens???
修改如下参数
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.174.113
NETMASK=255.255.255.0
GATEWAY=192.168.174.2
sudo service network start/stop/restart
修改HOSTNAME
Centos6
sudo vi /etc/sysconfig/network
HOSTNAME=YOURNEWNAME
sudo hostname YOURNEWNAME
Centos7
sudo hostnamectl set-hostname YOURNEWNAME
sudo hostname YOURNEWNAME
主机名中不能使用下划线(_)。
主机名不能保护大写字符
配置本地域名
sudo vi /etc/hosts
ip HOST1 HOST2 …
192.168.186.113 es1 hdfs1 hadoop1 spark1
192.168.186.114 es2 hdfs2 hadoop2 spark2
192.168.186.115 es3 hdfs3 hadoop3 spark3
关闭防火墙
Centos6
sudo service iptables start/stop/status
sudo chkconfig iptables off/--list –永久关闭防火墙
Centos7
sudo systemctl stop/start/status firewalld.service
sudo systemctl disable firewalld.service –永久关闭防火墙
关闭SELinux
查看Selinux的状态
/usr/sbin/sestatus –v
SELinux status: enabled
如果SELinux status参数为enabled即为开启状态,需要进行下面的关闭操作。
关闭SElinux
sudo vim /etc/selinux/config
在文档中找到SELINUX,将SELINUX的值设置为disabled,即:
SELINUX=disabled
在内存中关闭SElinux
setenforce 0
检查内存中状态
getenforce
如果日志显示结果为disabled或者permissive,说明操作已经成功。
创建用户
[root@es1 ~]# adduser es
为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略:
[root@es1 ~]# passwd es
更改用户 es 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
为用户赋于sudo权限
在root用户
vi /etc/sudoers
添加 : USERNAME ALL=(ALL) ALL
以下配置可以给sudo权限免密
添加 : USERNAME ALL=(ALL) NOPASSWD:ALL
step 4 install elasticsearch
解压缩
$ mkdir -p /opt/elasticsearch
$ tar –zxvf elasticsearch-5.6.5.tar.gz –C /opt/elasticsearch
修改elasticsearch.yml配置文件
$ vim /opt/elasticsearch/elasticsearch5.6.5/config/elasticsearch.yml
cluster.name: hy2u-elasticsearch (集群名称,同一集群要一样)
node.name: hy2u-node-1 (节点名称,同一集群要不一样)
http.port: 9200 #连接端口
network.host: 192.168.174.113 #默认网络连接地址,写当前主机的静态IP,这里不能写127.0.0.1
path.data: /opt/elasticsearch-5.6.5/data #数据文件存储路径
path.logs: /opt/elasticsearch-5.6.5/logs #log文件存储路径
discovery.zen.ping.unicast.hosts: ["192.168.174.113","192.168.174.114", "192.168.184.115"]#集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
bootstrap.system_call_filter: false # 因centos6不支持SecComp而默认bootstrap.system_call_filter为true进行检测,所以,要设置为 false。注:SecComp为secure computing mode简写
http.cors.enabled: true #是否支持跨域,默认为false
http.cors.allow-origin: "*" #当设置允许跨域,默认为*,表示支持所有域名
discovery.zen.minimum_master_nodes: 2 #这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)
elasticsearch备份位置,路径要手动创建
path.repo: ["/opt/elasticsearch/elasticseaarch-5.6.3/data/backups"]
如果安装elasticsearch-head插件,需要添加以下选项
http.cors.enabled: true
http.cors.allow-origin: "*"
如果安装x-pack插件,我们取消他的basic认证,需要添加以下选项
xpack.security.enabled: false
修改jvm内存[这个配置项很重要,在现实生产中要配的大一些,但是最大不能超过32g]
vim config/jvm.options
-Xms2g ---> -Xms512m
-Xmx2g ---> -Xms512m
分发
将配置好的Elasticsearch安装介质分发到其他的服务器上
只需要将elasticsearch.yml配置文件中的相关参数修改一下即可
cluster.name: hy2u-elasticsearch (集群名称,同一集群要一样)
node.name: hy2u-node-1 (节点名称,同一集群要不一样)
http.port: 9200 #连接端口 (集群连接端口,同一集群要一样)
network.host: 192.168.174.113 #默认网络连接地址,写当前主机的静态IP,这里不能写127.0.0.1
启动与关闭
每一台设备都要单独启动
前台启动
$ ./elasticsearch
后台启动 -d为守护进程运行
$ ./elasticsearch –d
$ ./elasticsearch & # 使用这种方式他会打印日志在前台
查看elasticsearch 进程
$ jps
2369 Elasticsearch
使用kill 命令杀死进程
kill -9 2369(pid)
浏览器访问
访问单节点:http://192.168.174.113:9200/
step 4 install plugins
install elasticsearch-head
由于5.x版本开始,_site被禁用了,所以head等有页面展示的插件无法像2.x一样以嵌入形式运行,必须以一个单独的服务来运行。
去GitHub下载elasticsearch-head源码 下载node并安装: head插件本质上是一个NodeJS工程,需要使用npm来下载依赖包并打包(npm可以理解为maven),下载node的地址:https://nodejs.org/en/download/。 解压安装包
xz -d node*.tar.xz
tar -xvf node*.tar
配置环境变量
sudo vi /etc/profile
export NODE_HOME=/opt/node-*-linux-x64
export PATH=$PATH:$NODE_HOME/bin
刷新环境变量
source /etc/profile
验证node是否安装成功
echo $NODE_HOME
node -v
npm -v
编译head 修改head插件的配置文件
$HEAD_HOME/Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: '*',
base: '.',
keepalive: true
}
}
}
$HEAD_HOME/_site/app.js
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.186.30:9200";
添加ES配置项
vi $ES_HOME/config/elasticsearch.yml
添加以下配置
http.cors.enabled: true
http.cors.allow-origin: "*"
运行head插件
cd $HEAD_HOME
npm install
cd head目录/node_modules/grunt/bin/
./grunt server &
访问head插件
http:/192.168.174.113:9100
默认端口是9100,可以通过编辑head/Gruntfile.js进行修改。
关闭 netstat -apn|grep 9100
install kibana
解压kibana到相应的目录
tar -zxvf /opt/elasticsearch/kibana-5.6.3-linux-x86_64.tar.gz -C /opt/elasticsearch
修改配置文件kibana.yml
vi /opt/elasticsearch/kibana-5.6.3/config/kibana.yml (修改以下参数)
server.port: 5601
server.host: "192.168.174.113"
elasticsearch.url: "http://192.168.174.113:9200"
启动kibana
前台:./opt/elasticsearch/kibana-5.6.3/bin/kibana
后台:nohup /opt/elasticsearch/kibana-5.6.3/bin/kibana </dev/null &>/dev/null &
install x-pack
下载x-pack安装包 安装x-pack之前一定要先安装kibana
在每一台elasticsearch节点的$ES_HOME下执行
在线版:bin/elasticsearch-plugin install x-pack
离线版:bin/elasticsearch-plugin install file:///home/admin/x-pack.zip #file:后边一定是三个/少一个都不行
在安装kibana的服务器上的kibana的$KIBANA_HOME下执行
在线版:bin/kibana-plugin install x-pack
离线版:bin/kibana-plugin install file:///home/admin/x-pack.zip
在每一台elasticsearch节点的$ES_HOME/config/elasticsearch.yml文件中添加以下配置
xpack.security.enabled: false
卸载
$ES_HOME/bin/elasticsearch-plugin remove x-pack
$KIBANA_HOME/bin/kibana-plugin remove x-pack
install IK
install elasticsearch-sql
5.x版本sql插件的安装和使用(目前支持最高的版本为5.1.2)
参考网址:https://github.com/NLPchina/elasticsearch-sql
1、es的sql插件分为两部分,一部分是需要放在es目录/plugins下的,用来支持sql查询;另外一部分类似于head插件,是一个NodeJS工程,提供页面服务。
2、安装sql插件及web ui
(1)在es集群中的每个节点上执行如下操作,(在每个节点上安装sql插件?)
es ./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.1.2.0/elasticsearch-sql-5.1.2.0.zip
此命令会在es目录/plugins下创建一个sql目录,此时重启节点以便加载sql插件。重启并使得sql插件成功加载之后,便可以通过浏览器利用如:
http://localhost:9200/_sql?sql=select * from indexName limit 10
的方式进行查询。同时,sql的API也可以使用了。
(2)在任意一台节点上安装sql的web应用
①下载es-sql-standalone,地址:https://github.com/NLPchina/elasticsearch-sql/releases/download/5.0.1/es-sql-site-standalone.zip
②安装并启动web应用
es unzip es-sql-site-standalone.zip
es cd es-sql-site-standalone/site-server
es npm install express --save
将es目录/plugins/sql目录下的_site目录覆盖es-sql-site-standalone目录下的_site
es node node-server.js &
此时sql的web应用已经启动了,默认端口是8080,可以通过编辑es目录/plugins/sql/es-sql-site/site-server/site_configuration.json进行修改。
3、访问web界面
最新版的sql界面访问时候有认证问题存在,2.x版直接使用的方式行不通。所以在访问页面时需要传入一个参数,如:
http://192.168.186.30:8080/?base_uri=192.168.186.30:9200
之所以要加这个参数是由于2.x升级到5.x的一个bug,2.x的访问方式是esIP:9200/_plugin/sql。在页面执行sql查询的时候,IP和端口引用地址栏的。而现在5.x版本的web页面是一个独立的应用,端口不能绑定成9200,但是与es交互的端口依然是访问web页面的端口,这就导致无法与es集群正常通信。在这里加这个参数的目的就是告诉sql的web界面与es通信的IP和端口。
常见的安装问题
can not run elasticsearch as root
解决方法:创建其他非root账户,修改文件夹 文件 所属用户 组
ERROR: bootstrap checks failed
解决方法:修改系统limits.conf文件
# vi /etc/security/limits.conf
添加如下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
备注:* 代表Linux所有用户名称(比如 hadoop)
启动后,只有本地可以访问
解决方法:在elasticsearch.yml文件中增加:network.bind_host: 0.0.0.0
ERROR:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(...) failed; error='Cannot allocate memory' (errno=12)
解决方法:修改jvm内存
vim config/jvm.options
-Xms2g ---> -Xms512m
-Xmx2g ---> -Xms512m
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方法:设置最大打开文件数
修改最大文件数为65536
# ulimit -n 65536
查看是否修改成功
# ulimit -a
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:修改sysctl.conf
# vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
# sysctl -p
max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决方法:修改90-nproc.conf
# vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048