系统配置(使用root权限用户)
1、修改最大可创建文件数和线程数
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
用不是root的用户,使用sodu修改时,需要指定给哪个用户设置,否则设置*不生效
如:给tomcat用户设置
tomcat soft nofile 65536
tomcat hard nofile 131072
2、修改最大虚拟内存
方法一:临时修改执行命令:
sysctl -w vm.max_map_count=262144
方法二 永久修改:
vi /etc/sysctl.conf 文件最后一行添加
vm.max_map_count=262144
加载设置好的参数: sysctl -p
3、开放集群间通讯的9300端口
1、开放端口
firewall-cmd --zone=public --add-port=9300/tcp --permanent
2、重启防火墙:
systemctl reload firewalld
3、查看已经开放的端口:
firewall-cmd --list-ports
创建es用户
如果用的root用户,es禁止使用root用户启动,需要创建一个新用户(已有非root用户也可以不用创建)。
1、创建用户:elasticsearch
[root@iZbp1bb2egi7w0ueys548pZ bin]# adduser elasticsearch
2、创建用户密码,需要输入两次
[root@iZbp1bb2egi7w0ueys548pZ bin]# passwd elasticsearch
3、切换至elasticsearch用户
[root@iZbp1bb2egi7w0ueys548pZ etc]# su elasticsearch
上传安装包
上传7.2.0版本的elasticsearch安装包到服务器/home/elasticsearch/目录下,解压。
备注:es不能用root用户启动,所以上传安装包时不能上传到root目录下。
tar -zxvf elasticsearch-7.2.0-linux-x86_64.tar.gz
Es部署(非root用户)
修改es配置
假设有三台服务器分别是 10.100.88.1,10.100.88.2,10.100.88.3
进入解压的es目录,修改config下的elasticsearch.yml配置文件
cd elasticsearch-7.2.0
vi config/elasticsearch.yml
修改每台服务器配置信息如下,三台服务器的配置只有节点名称node.name不同,其余配置一样。
cluster.name: my-cluster-name #自定义名称,尽量特有,同一个集群用同一个名称
node.name: node-1 #节点名称,三台服务器不能重复
path.data: /var/data/elasticsearch
path.logs: /var/logs/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.100.88.1","10.100.88.2","10.100.88.3"]
cluster.initial_master_nodes: ["node-1"] #首次启动集群时,推荐主节点名称
Jvm参数设置
在config下的jvm.options中,设置堆内存大小默认1g,建议一台主机,启动单个ES实例,最大堆内存不超过主机内存的50%,且最大不要超过32G,根据主机内存自行调整
-Xms4g #初始化堆内存大小
-Xmx4g #堆内存
启动es
在es目录下执行命令启动,如果只有root用户,可参考后面先创建一个新用户:
./bin/elasticsearch -d
查看启动日志:
tail -300f logs/my-cluster-name.log
查看集群状态
curl -X GET http://127.0.0.1:9200/_cluster/health?pretty
返回:
{ "cluster_name" : "my-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
|
这里最重要的就是status这行。很多开源的ES监控脚本,其实就是拿这行数据做报警判断。status 有三个可能的值:
green 绿灯,所有分片都正确运行,集群非常健康。
yellow 黄灯,所有主分片都正确运行,但是有副本分片缺失。这种情况意味着 ES 当前还是正常运行的,但是有一定风险。
red 红灯,有主分片缺失。这部分数据完全不可用。而考虑到 ES 在写入端是简单的取余算法,轮到这个分片上的数据也会持续写入报错。