本文已参与「新人创作礼」活动,一起开启掘金创作之路
现在准备一步步教大家如何搭建自己的ES服务,并且条件允许的话搭建自己的ES集群
环境准备
集群介绍
这里我准备搭建两个节点,第一个节点由一台服务器组成一个单节点服务,第二个节点由两台服务器组成一个集群
环境配置
环境采用jdk1.8,es7.13.0,kibana7.13.0
开始安装
安装jdk(需要JDK1.8以上)
1、这里我们选择通过yum命令来安装jdk(无需配置环境变量,安装过程自动配置)
yum -y list java*
执行成功后可以看到下图中的内容
2、选择一个需要安装的jdk的版本
- 这里我选择安装的是java-1.8.0-openjdk-devel.x86_64, 这个根据自己的环境来判断因为我的系统是64位的,还有一个要注意一下,我选择的是带‘-devel’后缀的这个,因为这个安装的是jdk,而那个不带 -devel 的安装完了其实是jre。
- 执行命令,等待日志输出完,就安装成功了
yum install -y java-1.8.0-openjdk-devel.x86_64
3、查看是否安装成功
java -version
显示下图的信息就表示安装成功了
安装ES
1、下载es版本包
这里我选择的是7.13版本,www.elastic.co/cn/download…
2、上传至服务器
下载完成后打开终端进入到文件所在的文件夹,通过scp命令将版本包上传到服务器
scp elasticsearch-7.13.0-linux-x86_64.tar.gz root@124.221.73.149:/var/local
这里提示下最好不要把文件上传到/root目录下,不然启动时候会报错。
3、解压文件
tar -zxvf elasticsearch-7.13.0-linux-x86_64.tar.gz
解压成功后进入到文件夹
这里介绍下ES的目录结构
| 目录名称 | 描述 |
|---|---|
| bin | 可执行脚本文件,包括启动es服务、插件管理、函数命令等 |
| config | 配置文件目录,如es的配置、角色配置、jvm配置等 |
| lib | es所依赖的java库 |
| data | 默认的数据存放目录,包含节点、分片、索引、文档的所有数据,生产环境必须要求修改 |
| logs | 默认的日志文件存储路径,生产环境务必修改 |
| modules | 包含所有的es模块,如cluster、discovery、indices等 |
| plugins | 已经安装的插件的目录 |
| jdk/jdk.app | 7.0以后才有,自带的Java环境 |
4、启动前配置
修改配置文件
这里介绍下配置文件的核心参数
| cluster.name | 集群名称,节点根据集群名称确定是否是同一个集群。 |
|---|---|
| node.name | 节点名称,集群内唯一 |
| node.roles | [ data, master, voting_only ]配置集群的角色,不同的角色有不同的用途,不太明白如何配置的,可以参考下文档,这里我们注释掉不配置,这样默认拥有所有角色 |
| network.host | 节点对外提供服务的地址以及集群内通信的ip地址 |
| http.port | 对外提供服务的端口号 |
| transport.port | 集群内部节点通信端口 |
| discovery.seed_hosts | 集群初始化的种子节点,可配置部分或全部候选节点,大型集群可通过嗅探器发现剩余节点 |
| cluster.initial_master_nodes | 节点初始active master节点, 必须是有master角色的节点,即必须是候选节点,但并不是必须配置所有候选节点。生产模式下启动新集群时,必须明确列出应在第一次选举中计算其选票的候选节点。第一次成功形成集群后,** cluster.initial_master_nodes从每个节点的配置中删除设置。重新启动集群或向现有集群添加新节点时,请勿使用此设置。 |
vim config/elasticsearch.yml
#输入以下配置
# 集群名称
cluster.name: cluster1
# # 初始主节点
cluster.initial_master_nodes: ["node-1"]
# # 节点名
node.name: node-1
#http端口号,默认9200
http.port: 9201
## 集群间通讯端口号
transport.port: 9920
# 节点的角色,这里我们注释掉,默认拥有全部角色
# node.roles: [master,data,remote_cluster_client]
# 对方暴露的公网ip地址
network.publish_host: 124.221.73.149
# 内网地址,使用虚拟机的用这个配置
network.host: 10.0.4.3
#单节点可不配置
discovery.seed_hosts: ['124.221.73.149']
这里记得给端口放开,我这里用的是云服务器,直接在云服务器防火墙上把9200端口放开就好
5、启动es
- 因为es不允许以root账号启动,所以需要提前创建一个其他账号
useradd -m elastic
- 设置密码
passwd elastic
- 给账号设置权限
chown -R elastic:elastic elasticsearch-7.13.0
- 切换账号启动es
# 切换账号
su elastic
#启动es
# 前台启动:
./bin/elasticsearch
# 后台启动:
./bin/elasticsearch -d
# 推荐方式(不占用窗口,并且方便杀进程):
## 启动:
./bin/elasticsearch -d -p pid
## 关闭:
kill `cat pid`
## 查询进程号 指定用户名
ps -ef | grep -e '^elastic' | grep elasticsearch
- 启动成功,使用ip+端口号访问下,出现图上能容就表示启动成功
单机es服务就这样搭建好了
启动时容易遇到的错误
这里列出了一些启动时候可能遇到的问题,遇到相应情况了修改下配置即可
- 文件描述符
问题描述:引导检查报错:未开启内存锁
问题解释:Elasticsearch 使用了很多文件描述符或文件句柄。耗尽文件描述符可能是灾难性的,并且很可能会导致数据丢失。确保将运行 Elasticsearch 的用户的打开文件描述符数量限制增加到 65,536 或更高。
解决办法:
# root执行指令
vim /etc/security/limits.conf
# 文件最后添加
# * 表示所有用户,
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
root soft nproc 65536
root hard nproc 65536
root soft nofile 65536
root hard nofile 65536
# 保存后重启
reboot
# 查看当前值
ulimit -Hn
- 虚拟内存
问题描述:引导检查报错 max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
问题解释:5.0版本以后ES使用mmapfs作为默认的文件系统存储类型。可以通过配置index.store.type来设置ES默认的文件系统存储类型。ES mmapfs默认使用一个目录来存储它的索引。操作系统对 mmap 计数的默认限制可能太低,这可能会导致内存不足异常.
解决办法:
vim /etc/sysctl.conf
# 最后添加
vm.max_map_count=655360
# 保存后查看
sysctl -p
- 线程数
问题描述:max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
问题解释:ES 使用多个线程池来进行不同类型的操作。重要的是它能够在需要时创建新线程。确保 Elasticsearch 用户可以创建的线程数至少为 4096。
解决办法
在启动es服务之前使用root账户执行
ulimit -u 4096
或
vim /etc/security/limits.conf
设置nproc为4096
或
vim /etc/security/limits.d/90-nproc.conf
修改如下内容(注意星号):
* soft nproc 1024 => * soft nproc 4096
- 内存不足
问题描述:error='Cannot allocate memory'
问题解释:ES 5.x+堆内存大小默认配置为2G ES 7.x+默认4G
解决办法:
//JVM一般为物理内存一半
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
或者
vim config/jvm.options
-Xms512m -Xmx512m
安装kibana
1、下载kibana版本包
保持kibana的版本和ES的一致,不然容易出问题,kibana7.13下载地址
2、上传至服务器
和前面ES的操作一样,这里我就不多介绍了
3、解压文件
4、启动前配置
vim config/kibana.yml
# 默认端口为5601
server.port: 5601
# 可有可无,至少我不配置也能启动
server.name: kibana2
elasticsearch.hosts: [ "http://122.112.155.85:9200"]
5、启动kibana
- 同样kibana也是不允许用root账号启动了,用刚才的elastic账号,并且将kibana安装目录的权限赋给他
chown -R elastic:elastic kibana-7.13.0
- 开通5601端口
- 以elastic账户,启动kibana
./bin/kibana
- 测试,访问ip:5601,出现以下页面则部署成功
- 接下来就可以去devtool里面尽情发挥了
搭建ES集群
先按照安装的教程,操作至第四部,启动前配置,主要修改配置文件
1、修改节点1配置文件
vim config/elasticsearch.yml
# 集群名称
cluster.name: cluster1
# # 初始主节点
cluster.initial_master_nodes: ["node-1"]
# # 节点名
node.name: node-1
#http端口号,默认9200
http.port: 9201
## 集群间通讯端口号
transport.port: 9920
# 节点的角色,这里我们注释掉,默认拥有全部角色
# node.roles: [master,data,remote_cluster_client]
# 对方暴露的公网ip地址
network.publish_host: 124.221.73.149
# 内网地址,使用虚拟机的用这个配置
network.host: 10.0.4.3
discovery.seed_hosts: ['124.221.73.149','122.112.155.85']
2、修改节点2配置文件
vim config/elasticsearch.yml
# 集群名称
cluster.name: cluster1
# # # 初始主节点
cluster.initial_master_nodes: ["node-1"]
# # # 节点名
node.name: node-2
#http端口号,默认9200
http.port: 9200
# 集群间通讯端口号
transport.port: 9920
# # 节点的角色,这里我们注释掉,默认拥有全部角色
# # node.roles: [master,data,remote_cluster_client]
# # 对方暴露的公网ip地址
network.publish_host: 122.112.155.85
# # 内网地址,使用虚拟机的用这个配置
network.host: 192.168.0.24
discovery.seed_hosts: ['124.221.73.149','122.112.155.85']
3、分别启动两个节点
启动之后通过 _cat/nodes指令查看集群情况
http://122.112.155.85:9200/_cat/nodes
这时候显示图上的信息,就表示集群搭建好了,如果不指定这些信息代表什么意思,可以使用这个命令,表示使用VIP权限查看,就能看到对应的标题了,*的那个节点是主节点
http://122.112.155.85:9200/_cat/nodes?v
4、配置kibana
kibana的配置和上面的一样,修改下配置文件就好
vim config/kibana.yml
# 默认端口为5601
server.port: 5601
# 可有可无,至少我不配置也能启动
# server.name: kibana2
elasticsearch.hosts: [ "http://122.112.155.85:9200","http://http://124.221.73.149:9201"]
然后启动就好。
这样一个简单的ES单机服务,以及ES集群就搭建好了,后面再教大家怎么对ES集群进行权限配置