ES 优化
import BrowserWindow from '@site/src/components/BrowserWindow';
配置优化
系统配置
- ES使用root用户启动,之后不能再启动的原因之ERROR Unable to locate appender “rolling“ for logger config “root“
es 默认不能使用
root用户启动。当你使用root用户启动时 es 初始化相关目录。而这些目录是由root用户创建,elasticsearch 用户没有权限访问或修改。
</BrowserWindow>
> 使用 .zip 或 .tar.gz 软件包安装时,可以通过以下方式配置系统设置:
> - 通过 ulimit 命令进行临时配置
> - 在 /etc/security/limits.conf 中永久配置
> 使用 RPM 或 Debian 软件包安装时,大多数系统设置将在系统配置文件中设置。但是,使用 systemd 的系统需要在 systemd 配置文件中指定系统限制
在Linux系统中,可以使用 `ulimit` 命令临时更改资源限制。通常在切换到运行Elasticsearch的用户之前,需要以root身份设置限制。
例如,要将打开的文件句柄数量(ulimit -n)设置为65,536,可以执行以下操作:
<BrowserWindow>
```shell
# 切换 root 用户
sudo su
# 修改打开最大文件数字
ulimit -n 65535
ulimit -u 4096
# 切换回 elasticsearch 用户
su elasticsearch
新配置仅适用于当前会话。 您可以使用
ulimit -a查看所有当前应用的限制。
在Linux系统中,可以通过编辑
/etc/security/limits.conf文件为特定用户设置持久限制。 例如,要将elasticsearch用户的最大打开文件数设置为65535,可以将以下行添加到limits.conf文件中:
此更改只有在下一次
elasticsearch用户打开新会话时才会生效。
Ubuntu 忽略由init.d启动的进程的limits.conf文件。
要启用limits.conf文件,请编辑 /etc/pam.d/su 文件并取消注释以下行:
# session required pam_limits.so
使用RPM或Debian软件包安装时,可以在系统配置文件中指定系统设置和环境变量。该文件 位于以下位置:
- RPM :
/etc/sysconfig/elasticsearch- Debian :
/etc/default/elasticsearch
然而,在使用systemd的系统中,系统限制需要通过systemd来指定。
systemd服务文件(/usr/lib/systemd/system/elasticsearch.service)包含默认应用的限制。
要覆盖它们,请添加一个名为
/etc/systemd/system/elasticsearch.service.d/override.conf的文件(或者您可以运行sudo systemctl edit elasticsearch,它会自动在默认编辑器中打开该文件)。 在此文件中设置任何更改,例如:
完成后,请运行以下命令重新加载配置:
永久禁用交换,您需要编辑 /etc/fstab 文件并注释掉任何包含单词 swap 的行。
$ vi /etc/fstab ... #/dev/mapper/centos-swap swap swap defaults 0 0
配置 swappiness max_map_count
$ vi /etc/sysctl.conf ... vm.swappiness=1 vm.max_map_count=262144
</BrowserWindow>
<BrowserWindow>
```bash
ulimit -a
ulimit -n 65535
ulimit -u 4096
vi /etc/security/limits.conf
elasticsearch - nofile 65535
elasticsearch - nproc 4096
swapoff -a
sysctl -w vm.max_map_count=262144
vi /etc/sysctl.conf
vm.swappiness=1
vm.max_map_count=262144
vi elasticsearch.yml
bootstrap.memory_lock: true
cluster.routing.allocation.same_shard.host: true
es 配置
thread_pool
thread_pool: write: size: 100 queue_size: 1000 search: size: 50 queue_size: 1000
</BrowserWindow>
## 索引优化
### 导出数据
<BrowserWindow>
```shell
#!/bin/sh
ES_INDEX=xxxxxx
START_YEAR=2019
END_YEAR=$((${START_YEAR}+1))
START_TIME="${START_YEAR}-01-01T00:00:00.000+08"
END_TIME="${END_YEAR}-01-01T12:00:00.000+08"
LIMIT_SIZE=3000
echo "${ES_INDEX} ${START_TIME} ${END_TIME}"
search_body='{"query": { "bool": { "must": [{ "range": { "collect_time": { "gte": "'${START_TIME}'", "lt": "'${END_TIME}'" } } }] } }, "sort": [{ "collect_time": { "order": "asc" } }] }'
echo ${search_body}
echo "EXPORT ${ES_INDEX}-${START_YEAR}: START time ================= [ `date` ] " >> logs/time.txt;
elasticdump --input=http://10.8.40.11:9200/${ES_INDEX} \
--searchBody='{"query": { "bool": { "must": [{ "range": { "collect_time": { "gte": "'${START_TIME}'", "lt": "'${END_TIME}'" } } }] } }, "sort": [{ "collect_time": { "order": "asc" } }] }' \
--limit=${LIMIT_SIZE} --output=/tmp/${ES_INDEX}-${START_YEAR}.json --type=data ;
echo "EXPORT ${ES_INDEX}-${START_YEAR}: END time ================= [ `date` ] " >> logs/time.txt;
导入数据
echo "IMPORT {DATA_YEAR} TO {DATA_YEAR} : START time ================= [ date ] " >> logs/time.txt;
elasticdump --input="/tmp/{DATA_YEAR}.json"
--limit=5000
--output="http://10.8.40.12:9200/${ES_OUTPUT_INDEX}-${DATA_YEAR}"
--type=data ;
echo "IMPORT {DATA_YEAR} TO {DATA_YEAR} : END time ================= [ date ] " >> logs/time.txt;
</BrowserWindow>
<BrowserWindow>
```bash
nohup bin/import-2019.sh > logs/import-2019.log 2>&1 &