Elasticsearch 安装部署 参数调优
环境说明
系统以及java版本
系统版本 | JAVA 版本 |
CentOS 7.6 | 1.7 es自带jdk |
Elasticsearch node 配置
三台服务器都添加host 文件
IP | Elasticsearch node |
10.3.65.14 | node-14 |
10.3.65.18 | node-18 |
10.3.65.37 | node-37 |
安装es7.7
rpm安装
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-x86_64.rpm
yum localinstall -y elasticsearch-7.17.0-x86_64.rpm
添加hosts:
vim /etc/hosts
10.3.65.37 node-37
10.3.65.18 node-18
10.3.65.14 node-14
#rpm安装已经自动创建elasticsearch用户,下面步骤不用执行了
# es启动需要es用户
#useradd es
#chown es:es -R elasticsearch-7.7.0
#su - es
jdk配置
# # es7内置jdk,rpm安装默认用自带的,以下步骤用不到,供参考
# # 解压
# tar -xvf jdk-8u321-linux-x64_.tar.gz
# # 移动到/usr/local
# mv jdk1.8.0_181 /usr/local/
# # 配置环境变量
# # 将下面两行放到/etc/profile 文件最后
# export JAVA_HOME=/usr/local/jdk1.8.0_321
# export PATH=$JAVA_HOME/bin:$PATH
# # 加载使其生效
# source /etc/profile
禁用swap
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
系统调优
vim /etc/sysctl.conf
#fs.file-max主要是配置系统最大打开文件描述符数,建议修改为655360或者更高
fs.file-max=655360
# vm.max_map_count影响Java线程数量,用于限制一个进程可以拥有的VMA(虚拟内存区域)的大小,系统默认是65530,建议修改成262144或者更高
vm.max_map_count = 655300
# 优化脏内存页,es写入削峰
#可以用脏数据填充的绝对最大系统内存量百分比
vm.dirty_ratio=10
#内存可以填充脏数据的百分比
vm.dirty_background_ratio=5
#多长时间 pdflush/flush/kdmflush 这些进程会唤醒一次,然后检查是否有缓存需要清理。
vm.dirty_writeback_centisecs=200
# 优化系统回收inode cache权重
vm.vfs_cache_pressure=200
#脏数据能存活的时间
vm.dirty_expire_centisecs=6000
sysctl -p
vim /etc/security/limits.conf
* soft nproc 20480
* hard nproc 20480
* soft nofile 65536
* hard nofile 65536
* soft memlock unlimited
* hard memlock unlimited
#还需要修改/etc/security/limits.d/20-nproc.conf文件(centos7.x系统)
vim /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
修改为:
* soft nproc 20480
#如果集群中使用的是SSD磁盘,那么可以将默认的io sched由cfq设置为noop
#目前 Linux 上有如下几种 I/O 调度算法
#1.noop(No Operation) - 通常用于内存存储的设备。
#2.cfq(Completely Fair Scheduler ) – 完全公平调度器。进程平均使用IO带宽。
#3.Deadline – 针对延迟的调度器,每一个 I/O,都有一个最晚执行时间。
#4.Anticipatory – 启发式调度,类似 Deadline 算法,但是引入预测机制提高性能。
sudo sh -c 'echo "noop">/sys/block/sda/queue/scheduler'
#查看调度算法
[root@mjq-xiaoneng-jenkins-uat ~]# dmesg | grep -i scheduler
[ 0.581586] io scheduler noop registered
[ 0.581588] io scheduler deadline registered (default)
[ 0.581604] io scheduler cfq registered
[ 0.581607] io scheduler mq-deadline registered
[ 0.581609] io scheduler kyber registered
JVM调优
1. 不能超过最大内存的一半,需要给lucene留内存
2. 官方建议不要超过30G
vim /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g
elasticsearch.yml配置
#/etc/elasticsearch/elasticsearch.yml 配置信息
vim /etc/elasticsearch/elasticsearch.yml
grep -Ev "^#|^$" elasticsearch.yml
cluster.name: elk-test
node.name: node-37
node.master: false
node.data: true
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: true
network.host: 10.3.65.37
http.port: 9200
discovery.seed_hosts: ["node-14", "node-18", "node-37"]
cluster.initial_master_nodes: ["node-14", "node-18"]
http.cors.enabled: true
http.cors.allow-origin: "*"
建好数据目录
mkdir -p /data/es/data
mkdir -p /data/es/logs
chown -R elasticsearch.elasticsearch /data/
针对锁定内存配置增加一下内容
systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
重新加载
systemctl daemon-reload
启动
# 启动
# ./bin/elasticsearch -d
systemctl start elasticsearch
systemctl enable elasticsearch
# 查看日志
# vim ./logs/elasticsearch.log
tail -f /data/es/logs/elk-test.log
验证
# 验证是否成功启动
curl 10.3.65.37:9200
整体脚本
# 安装es7.7
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-x86_64.rpm
yum localinstall -y elasticsearch-7.17.0-x86_64.rpm
# 添加hosts:
vim /etc/hosts
10.3.65.37 node-37
10.3.65.18 node-18
10.3.65.14 node-14
#rpm安装已经自动创建elasticsearch用户,下面步骤不用执行了
# es启动需要es用户
#useradd es
#chown es:es -R elasticsearch-7.7.0
#su - es
# # es7内置jdk,修改启动脚本;rpm安装默认用自带的,一下步骤用不到,供参考
# # 解压
# tar -xvf jdk-8u321-linux-x64_.tar.gz
# # 移动到/usr/local
# mv jdk1.8.0_181 /usr/local/
# # 配置环境变量
# # 将下面两行放到/etc/profile 文件最后
# export JAVA_HOME=/usr/local/jdk1.8.0_321
# export PATH=$JAVA_HOME/bin:$PATH
# # 加载使其生效
# source /etc/profile
# 禁用swap
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
vim /etc/sysctl.conf
#fs.file-max主要是配置系统最大打开文件描述符数,建议修改为655360或者更高
fs.file-max=655360
# vm.max_map_count影响Java线程数量,用于限制一个进程可以拥有的VMA(虚拟内存区域)的大小,系统默认是65530,建议修改成262144或者更高
vm.max_map_count = 655300
# 优化脏内存页,es写入削峰
#可以用脏数据填充的绝对最大系统内存量百分比
vm.dirty_ratio=10
#内存可以填充脏数据的百分比
vm.dirty_background_ratio=5
#多长时间 pdflush/flush/kdmflush 这些进程会唤醒一次,然后检查是否有缓存需要清理。
vm.dirty_writeback_centisecs=200
# 优化系统回收inode cache权重
vm.vfs_cache_pressure=200
#脏数据能存活的时间
vm.dirty_expire_centisecs=6000
sysctl -p
vim /etc/security/limits.conf
* soft nproc 20480
* hard nproc 20480
* soft nofile 65536
* hard nofile 65536
* soft memlock unlimited
* hard memlock unlimited
#还需要修改/etc/security/limits.d/20-nproc.conf文件(centos7.x系统)
vim /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
修改为:
* soft nproc 20480
#如果集群中使用的是SSD磁盘,那么可以将默认的io sched由cfq设置为noop
#目前 Linux 上有如下几种 I/O 调度算法
#1.noop(No Operation) - 通常用于内存存储的设备。
#2.cfq(Completely Fair Scheduler ) – 完全公平调度器。进程平均使用IO带宽。
#3.Deadline – 针对延迟的调度器,每一个 I/O,都有一个最晚执行时间。
#4.Anticipatory – 启发式调度,类似 Deadline 算法,但是引入预测机制提高性能。
sudo sh -c 'echo "noop">/sys/block/sda/queue/scheduler'
#查看调度算法
[root@mjq-xiaoneng-jenkins-uat ~]# dmesg | grep -i scheduler
[ 0.581586] io scheduler noop registered
[ 0.581588] io scheduler deadline registered (default)
[ 0.581604] io scheduler cfq registered
[ 0.581607] io scheduler mq-deadline registered
[ 0.581609] io scheduler kyber registered
#JVM调优
#这里的4g不能超过最大内存的一半,需要给lucene留内存 官方建议不要超过30G
vim /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g
mkdir -p /data/es/data
mkdir -p /data/es/logs
chown -R elasticsearch.elasticsearch /data/
#/etc/elasticsearch/elasticsearch.yml 配置信息
vim /etc/elasticsearch/elasticsearch.yml
grep -Ev "^#|^$" elasticsearch.yml
cluster.name: elk-test
node.name: node-37
node.master: false
node.data: true
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: true
network.host: 10.3.65.37
http.port: 9200
discovery.seed_hosts: ["node-14", "node-18", "node-37"]
cluster.initial_master_nodes: ["node-14", "node-18"]
http.cors.enabled: true
http.cors.allow-origin: "*"
gateway.recover_after_nodes: 2 #elasticsearch集群中的N个节点启动后,才允许进行数据恢复处理,默认是1.通常设置为过半的集群节点数量,例如,集群中总共有3个节点,那么将该值设置为2,如果在集群中总共有5个节点,则将该值设置为3,以此类推。
action.destructive_requires_name: true #设置是否可以通过正则或者_all删除或者关闭索引库,默认true表示必须要显式指定索引库名称,生产环境建议设置为true,删除索引库的时候必须指定,否则可能会导致误删除。
#针对锁定内存配置增加一下内容
systemctl edit elasticsearch
添加:
[Service]
LimitMEMLOCK=infinity
systemctl daemon-reload
# 启动
# ./bin/elasticsearch -d
systemctl start elasticsearch
systemctl enable elasticsearch
# 查看日志
# vim ./logs/elasticsearch.log
tail -f /data/es/logs/elk-test.log
# 验证是否成功启动
curl 10.3.65.37:9200
配置elasticsearch
(1)cluster.name: elkbigdata
配置elasticsearch集群名称,默认是elasticsearch。这里修改为elkbigdata,elasticsearch会自动发现在同一网段下的集群名为elkbigdata的主机。
(2)node.name: server1
节点名,任意指定一个即可,这里是server1,我们这个集群环境中有三个节点,分别是server1、server2和server3,记得根据主机的不同,要修改相应的节点名称。
(3)node.master: true
指定该节点是否有资格被选举成为master,默认是true,elasticsearch集群中默认第一台启动的机器为master角色,如果这台服务器宕机就会重新选举新的master。
(4)node.data: true
指定该节点是否存储索引数据,默认为true,表示数据存储节点,如果节点配置node.master:false并且node.data: false,则该节点就是client node。这个client node类似于一个“路由器”,负责将集群层面的请求转发到主节点,将数据相关的请求转发到数据节点。
(5)path.data:/data1/elasticsearch,/data2/elasticsearch
设置索引数据的存储路径,默认是elasticsearch根目录下的data文件夹,这里自定义了两个路径,可以设置多个存储路径,用逗号隔开。
(6)path.logs: /usr/local/elasticsearch/logs
设置日志文件的存储路径,默认是elasticsearch根目录下的logs文件夹
(7)bootstrap.memory_lock: true
此配置项一般设置为true用来锁住物理内存。 linux下可以通过“ulimit -l” 命令查看最大锁定内存地址空间(memlock)是不是unlimited