引言
最近接到一个项目,做的是政府的办公系统,前期规划中用到了ElasticSearch 做检索和数据统计。然后忙碌了一周写好了ElasticSearch 的API,开发阶段用的是阿里云的ES服务(PS:这里要感谢下阿里云让我白嫖了一个月的ES服务,省去了搭建服务的麻烦),版本是ElasticSearch 7.7.1 和Kibana 7.7.1。开发联调都很顺利,直到上线的前一周悲剧来了,项目经理告诉我,这次的项目要用政府平台的ElasticSearch 服务,不能自己搭建,而且他们平台最高的版本是6.4。我的天哪!真想一口老血啐在项目经理脸上,这是人干事儿?
然后看了下胳膊比我大腿还粗的项目经理,算了算了……
虽然很悲愤,但事情还是要做的,现在的问题是怎么去做。
用脚指头想也知道6到7这样的大版本升级,肯定改了不少东西,但我还是头铁的尝试着在项目中做版本降级兼容,各种maven 依赖,项目配置调整下来,好么,错误比代码还多,真是盖了帽了我的老伙计。
降版本这事儿看来是不靠谱了,最终决定在有限的服务器上搭建3台ES服务器,做个集群。
环境
服务器:Linux version 3.10.0-514.26.2.el7.x86_64 (Red Hat 4.8.5-11)
8C16G ,镜像: CentOS 7.3 64Bit ,系统盘: ssd云盘 40GB, 数据盘: 高效云盘 160GB
ElasticSearch:elasticsearch-7.7.1-x86_64.rpm
Kibana:kibana-7.7.1-linux-x86_64.tar.gz
JDK: 1.8.0_25
文件下载
ElasticSearch 社区里有很全的下载列表,地址:elasticsearch.cn/download/
不过下载速度很感人就是了,远程摇人,让侯总帮忙下载了。链接贴在这里:
度娘链接: pan.baidu.com/s/1Vrc2o5jN… 密码: gls1
想发邮箱的可以留下地址,我转给你们。
ElasticSearch 集群安装
部署前环境配置
# 修改limits.conf 文件,该文件为通过PAM登录的用户设置资源限制,它不影响系统服务的资源限制。
# 这里的 * 标识所有用户
# noproc 是代表最大进程数
# nofile 是代表最大文件打开数
# memlock 最大锁定内存地址空间
# hard limit 严格的设定,必定不能超过这个设定的数值
# soft limit 警告的设定,可以超过这个设定值,但是若超过则有警告信息
# unlimited 无限制
[admin@iZvy205a4yd2mib28zvvrmZ ~] vim /etc/security/limits.conf
* hard nofile 65536 # es要求文件数最小为65536
* soft nproc 2048
* hard nproc 4096
* soft memlock unlimited
* hard memlock unlimited
# 修改sysctl.conf文件,Sysctl是一个允许您改变正在运行中的Linux系统的接口,用sysctl可以读取设置超过五百个系统变量。
[admin@iZvy205a4yd2mib28zvvrmZ ~] vim /etc/sysctl.conf
vm.max_map_count=655360 # 限制一个进程可以拥有的VMA(虚拟内存区域)的数量
fs.file-max=655360 # 系统级打开最大文件句柄的数量永久生效的修改
# 使sysctl.conf 修改生效
[admin@iZvy205a4yd2mib28zvvrmZ ~] sysctl -p
# 修改host 文件做DNS映射,这一步视情况可省略
# 将三台ES 机器的IP映射写进去
[admin@iZvy205a4yd2mib28zvvrmZ ~] vim /etc/hosts
192.168.211.51 node-1
192.168.211.52 node-2
192.168.211.53 node-3
部署ES服务
下面的配置我只写了一套,三台机器的配置基本相同,唯一要修改的只有node.name。node.name 是ES机器的唯一标识。
# 检查Java 环境
[admin@iZvy205a4yd2mib28zvvrmZ ~] java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
# 没有Java 环境的可以用以下命令安装
# [admin@iZvy205a4yd2mib28zvvrmZ ~] yum -y install java-1.8.0-openjdk.x86_64
# SCP 将文件传到服务器
[admin@iZvy205a4yd2mib28zvvrmZ ~] scp elasticsearch-7.7.1-x86_64.rpm admin@192.168.211.51:/home/admin/download
[admin@iZvy205a4yd2mib28zvvrmZ ~] scp kibana-7.7.1-linux-x86_64.tar.gz admin@192.168.211.51:/home/admin/download
# 也可以用下面的命令直接下载
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-x86_64.rpm
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-linux-x86_64.tar.gz
# 使用RPM 安装ElasticSearch
[admin@iZvy205a4yd2mib28zvvrmZ ~] rpm -ivh elasticsearch-7.6.2-x86_64.rpm
# 修改ES 配置文件elasticsearch.yml
[admin@iZvy205a4yd2mib28zvvrmZ ~] vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es-cluster # 集群名称
node.name: node-1 # 节点名称,每个机器的节点名称不能相同
path.data: /var/lib/elasticsearch # 索引和数据存储目录,支持配置多个
path.logs: /var/log/elasticsearch # 日志存储目录,我这里默认注释
network.host: 0.0.0.0 # 监听地址
http.port: 9200 # 配置es绑定主机的ip地址,可以设置为当前实际的ip,如果有多个网卡都想绑定的话,可以设置为:0.0.0.0
transport.port: 9300 # tcp的端口号,默认是9300
discovery.seed_hosts: ["192.168.211.51:9300", "192.168.211.52:9300","192.168.211.53:9300"] # 配置集群中的主机列表,通信使用的端口为transport.port 配置的tcp 端口
cluster.initial_master_nodes: ["node-1", "node-2"] # 配置启动全新的集群时,那些节点可以作为master节点进行选票
http.cors.enabled: true #是否开启跨域访问
http.cors.allow-origin: "*" #开启跨域访问后的地址限制,*表示无限制
# 启动ES
[admin@iZvy205a4yd2mib28zvvrmZ ~] systemctl enable elasticsearch
[admin@iZvy205a4yd2mib28zvvrmZ ~] systemctl start elasticsearch
# 检查集群,三台机器部署完成之后,会显示像下面那样的三条记录
[admin@iZvy205a4yd2mib28zvvrmZ ~] curl -XGET http://192.168.211.51:9200/_cat/nodes\?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.211.51 51 25 0 0.01 0.03 0.05 dilmrt - elasticsearch-1
192.168.211.52 18 26 0 0.00 0.01 0.05 dilmrt - elasticsearch-2
192.168.211.53 63 50 0 0.01 0.02 0.05 dilmrt * elasticsearch-3
# 还有一些别的命令
# [admin@iZvy205a4yd2mib28zvvrmZ ~] systemctl stop elasticsearch #停止
# [admin@iZvy205a4yd2mib28zvvrmZ ~] systemctl restart elasticsearch #重启
# [admin@iZvy205a4yd2mib28zvvrmZ ~] sudo systemctl status elasticsearch.service #检查服务器状态
# curl -X GET "localhost:9200/_cat/health?pretty" #健康检查
# http://192.168.211.51:9200/ 网页端查询ES信息
ES部署踩坑
谨慎修改 elasticsearch.yml 的 path.data、path.logs 地址
下面是他们的默认地址:
path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch
我修改之后报了异常:
[admin@iZvy205a4yd2mib28zvvrmZ ~] Job for elasticsearch.service failed because the control process exited with error code. See "systemctl status elasticsearch.service" and "journalctl -xe" for details.即使详细信息里也没有很明确的告诉你什么原因,排查起来比较麻烦。
初次部署,建议使用默认值
不要使用已安装过的RPM 文件再次部署
你是不是在一台机器上用RPM文件安装完,又将这个RPM文件SCP到其他服务器上安?那么你大概率会发现,你的集群无法互相发现。
具体原因还未查明,但解决方案是有的:
# 将ES服务停止 [admin@iZvy205a4yd2mib28zvvrmZ ~] systemctl stop elasticsearch # 删除ES 服务 [admin@iZvy205a4yd2mib28zvvrmZ ~] RPM -e elasticsearch # 上传一个未被安装过的RMP,然后正常安装 [admin@iZvy205a4yd2mib28zvvrmZ ~] scp elasticsearch-7.7.1-x86_64.rpm admin@192.168.211.51:/home/admin/download
至此ES 集群就算是安装完成了,总体来说ES 集群的配置还是很简单的,不过Kibana 的部署更简单。
Kibana 安装
# 解压
[admin@iZvy205a4yd2mib28zvvrmZ ~] tar -zxvf kibana-7.7.1-linux-x86_64.tar.gz
# 修改配置
[admin@iZvy205a4yd2mib28zvvrmZ ~] cd kibana-7.7.1-linux-x86_64/config/
[admin@iZvy205a4yd2mib28zvvrmZ ~] vi kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.name: "Kibana"
elasticsearch.hosts: ["http://192.168.211.51:9200", "http://192.168.211.52:9200","http://192.168.211.53:9200"]
kibana.index: ".kibana"
kibana.defaultAppId: "home"
# 后台运行Kibana
nohup ./bin/kibana &
#或者
# mkdir logs
# nohup ./bin/kibana >logs/kibana.log 2>&1 &
#访问
http://192.168.211.51:5601
就这样,Kibana安装完成,可以使用啦。
收集到的一些资料
[ElasticSearch 7.7 + Kibana的部署]
结语
虽然之前用过ES,但也仅限于用过,对于ES的安装部署,集群配置还是第一次做,有写的不对的或者不完善的地方,还请大家轻喷━((′д`)爻(′д`))━!!!!