背景:
根据项目需求,需要将mysql数据库中的数据定时同步到es内,因此选定两台机器搭建es集群环境,搭建环境涉及到elasticsearch,elasticsearch-head插件,logstash,logstash-input-jdbc插件
安装环境:
操作系统: CentOS Linux release 7.3.1611 (Core)
Jdk版本:openJdk1.8(需要提前安装好,jdk版本不能低于1.8)
安装包:
elasticsearch-5.6.3;
nodejs(最新版本即可),elasticsearch-head(最新版本即可);
Logstash-5.6.3(需要和es版本保持一致,该版本已经集成了logstash-input-jdbc插件,因此无需再进行该插件的安装)
Elasticsearch(简称es)安装:
1、在/home目录创建elk目录,并将安装包上传到elk下:
创建目录命令:
mkdir elk
结果如下:
2、解压elasticsearch-5.6.3.tar.gz,得到解压后的文件夹elasticsearch-5.6.3:
解压命令:
tar -zxvf elasticsearch-5.6.3.tar.gz
结果如下:
3、修改es配置文件elasticsearch.yml相关配置项:
#集群名称
cluster.name: es-5.6.3
#节点名称
node.name: node-34
#数据存储目录(多个路径用逗号分隔)
path.data: /var/es/data
#日志目录
path.logs: /var/es/logs
#是否锁定物理内存地址
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#修改一下ES的监听地址,这样别的机器才可以访问
network.host: 0.0.0.0
#监听端口(默认的就好)
http.port: 9200
#配置节点
discovery.zen.ping.unicast.hosts: ["192.168.1.33", "192.168.1.34"]
#配置最大主节点数
discovery.zen.minimum_master_nodes: 1
#增加新的参数,这样head插件才可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"
注:配置中的两个文件目录需要提前创建好
4、启动es
由于es无法用root用户启动,因此必须为es创建普通用户进行启动
(1)创建用户es:
useradd es
(2)为es用户设置密码:
passwd es
(3)为用户赋权
该用户需要相应文件的操作权限:
chown -R es /home/elk
chown -R es /var/es/data
chown -R es /var/es/logs
(4)启动es:
切换到es用户:
su es
进入目录: /home/elk/elasticsearch-5.6.3/bin/,内容如下:
启动es:
./elasticsearch
后台启动命令:
./elasticsearch -d
启动日志如下:
通过启动日志可以看到启动失败,有两个错误:
错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决方案:修改/etc/security/limits.conf配置文件,添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
修改前:
修改后:
错误2:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方案:修改配置:在/etc/sysctl.conf 中加入vm.max_map_count=524288
执行命令:
vi /etc/sysctl.conf
执行命令使修改生效:
sudo sysctl -p
修改后再次启动es,可以看到启动成功了
验证es是否启动成功,可以打开浏览器访问如下地址:http://localhost:9200,结果发现无法访问:
排查是否防火墙问题:CentoOs7通过firewall进行防火墙配置
查看防火墙状态:
systemctl status firewalld
可以看到防火墙开启,我们可以关闭防火墙
关闭防火墙命令:
systemctl stop firewalld
也可以不关闭防火墙,转而开放9200端口,另外由于es一般部署在集群内,集群各节点之间是通过9300端口进行互通的,因此还要开放9300端口
永久打开9200/TCP端口:
firewall-cmd --permanent --add-port=9200/tcp
#重启防火墙,使添加的端口生效:
firewall-cmd --reload
再次访问,结果如下:
至此,es安装成功!
Elasticsearch-head插件安装
Elasticsearch内有海量数据和大规模集群,但是并没有提供管理客户端,所以如果我们想要管理这些数据和集群,那么肯定得借助其他的一些工具进行管理。
而ElasticSearch-head就是一款能连接ElasticSearch搜索引擎,并提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索功能的管理插件,如在head插件页面编写RESTful接口风格的请求,就可以对ElasticSearch中的数据进行增删改查、创建或者删除索引等操作。类似于使用navicat工具连接MySQL这种关系型数据库,对数据库做操作。
下图为head插件的运行页面:
下面介绍如何安装head插件:
安装思路:服务器环境经常为内网环境,不允许连接互联网,这样会让一些服务的安装变得复杂,elasticsearch-head同样如此。因此我们先在一台能联网的服务器(虚拟机即可)上进行在线安装,安装成功后再将其打包,放到内网环境上进行离线安装
第一步:在互联网环境上安装head插件,制作离线包:
1、下载nodejs,head插件
2、创建head-plugin目录
mkdir /usr/inspur/head-plugin
3、将下载好的node、head上传至tools目录,解压node和head
注意,此处要将node和head放到同一个目录下
tar -zxvf node-v12.2.0-linux-x64.tar.gz
unzip elasticsearch-head-master.zip
4、配置node、npm环境
ln -s /opt/tools/node-v12.2.0-linux-x64/bin/node /usr/local/bin/node
ln -s /opt/tools/node-v12.2.0-linux-x64/bin/npm /usr/local/bin/npm
5、使用npm安装grunt
npm install -g grunt-cli
安装成功后会发现/usr/inspur/head-plugin/node-12.14.0/bin目录下多了grunt文件:
参考第二步配置grunt环境变量
ln –s /opt/tools/node-v12.2.0-linux-x64/bin/grunt /usr/local/bin/grunt
6、使用命令验证nodejs、npm、grunt安装是否成功,能够看到版本号说明安装成功
node -v
npm –v
grunt -version
7、进入 elasticsearch-head 文件夹,执行命令,安装依赖的npm包
npm install grunt --save
npm install
注意:npm install 默认使用 http://www.npmjs.org 地址安装依赖,如果网络没有进行翻墙设置有时候现在第三方依赖包会出现卡死,或者安装失败的情况。使用国内镜像站点解决:
执行命令:
npm config set registry https://registry.npm.taobao.org
再次执行npm install命令就会发现安装成功
8、修改 elasticsearch-head 目录下的 Gruntfile.js 文件,在 options 属性内增加 hostname,设置为 0.0.0.0。
connect: {
server: {
options: {
hostname: '0.0.0.0',
port: 9100,
base: '.',
keepalive: true
}
}
}
9、在线安装成功后,制作离线包,打包node、head
tar zcf tools.tar.gz node-v12.14.0 elasticsearch-head
得到离线包:es-head.tar.gz
至此,head插件离线包制作完毕!
第二步: 进行离线包的安装:
将第一步中制作好的离线包(es-head.tar.gz)拷贝到内网环境/home/elk/elasticsearch-head目录下,然后解压压缩包:
进入目录/home/elk/elasticsearch-head/node-12.14.0/bin,内容如下:
制作软连接:
ln -s /home/elk/elasticsearch-head/node-12.14.0/bin/node /usr/local/bin/node
ln -s /home/elk/elasticsearch-head/node-12.14.0/bin/npm /usr/local/bin/npm
ln -s /home/elk/elasticsearch-head/node-12.14.0/bin grunt /usr/local/bin/grunt
进入/home/elk/elasticsearch-head/elasticsearch-head目录,执行命令启动head插件:
grunt server
后台启动命令:
setsid grunt server
看到如下界面说明执行成功:
浏览器中访问:http://localhost:9100 // 服务器ip换成自己的即可
至此,elasticsearch-head离线包安装成功!
Logstash安裝
下载与elasticsearch对应版本的Logstash安装包logstash-5.6.3.tar.gz,上传到已经创建好的目录/home/elk下,然后解压:
测试logstash,执行命令:
./home/elk/logstash-5.6.3/bin/logstash -e 'input { stdin{} } output { stdout{} }'
结果如下:
输入hello,然后回车:
至此,logstash安装成功!
如果想把mysql中的数据同步到elasticsearch内,需要用logstash-input-jdbc插件,该插件的安装方式也是较为复杂,需要现在互联网环境下安装成功,然后再打包成离线包放到内网环境中。
不过我发现在下载好的在logstash-5.6.3.tar.gz内已经集成了logstash-input-jdbc插件,无需再进行安装,因此此处不再讲解logstash-input-jdbc插件的安装方式,感兴趣的可自行上网百度!