ElasticSearch 7.7.1 集群+Kibana 7.7.1安装

1,823 阅读6分钟

引言

最近接到一个项目,做的是政府的办公系统,前期规划中用到了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.datapath.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集群部署

elasticsearch集群正确关闭、重启方式

[CentOS 下 rpm包与 yum 安装与卸载]

[ElasticSearch 7.7 + Kibana的部署]

ES及相关文件下载

/etc/security/limits.conf的相关说明

/etc/security/limits.conf配置文件详解

结语

虽然之前用过ES,但也仅限于用过,对于ES的安装部署,集群配置还是第一次做,有写的不对的或者不完善的地方,还请大家轻喷━((′д`)爻(′д`))━!!!!