elasticsearch 部署手册
下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gztar -zxvf elasticsearch-6.6.2.tar.gz
安装
- Java1.8.0_131 或更高版本, 仅支持Oracle的Java和OpenJDK
配置
1. ES 重要配置
- conf/elasticsearch.yml ES 集群配置
# ---------------------------------- Cluster -----------------------------------# 集群名称cluster.name: data-center# ------------------------------------ Node ------------------------------------# 节点名称## 默认情况下,Elasticsearch 将使用随机生成的 UUID 的前七个字符作为节点id。请注意,节点 id 是持久化的,在节点重启时不会更改,因此默认的节点名称也不会更改。# node.name: node-1# 使用主机名node.name: ${HOSTNAME}# ----------------------------------- Paths ------------------------------------# 路径配置## 指定路径path:logs: /opt/logs/elasticsearchdata: /opt/data/elasticsearch## 多路径path:data:- /mnt/elasticsearch_1- /mnt/elasticsearch_2- /mnt/elasticsearch_3# ----------------------------------- Memory -----------------------------------# 锁住内存,不使用 swapbootstrap.memory_lock: true# ---------------------------------- Network -----------------------------------# 网络设置, 绑定到哪个网络接口以便侦听传入请求,## 默认情况下,Elasticsearch 仅绑定到环回地址 - 例如 127.0.0.1 和[::1]。这是在服务器上运行单个开发节点。#network.host ${HOSTNAME}## 将绑定地址设置为特定的IP (IPv4或IPv6), 如果自定义设置了 network.host 的 Ip, Elasticsearch 就会假定从开发模式转移到生产模式network.host 192.168.1.10["127.0.0.1", "[::1]"]._[networkInterface]_ 例如,网络接口的地址 _en0_ 。_local_ 例如,系统上的任何环回地址127.0.0.1。_site_ 例如,系统上的任何站点本地地址192.168.0.1。_global_ 例如,系统上的任何全局范围的地址8.8.8.8。# network.host 同时设置 bind_host 和 publish_host 两个参数## network.bind_host## network.publish_hosthttp.host: 0.0.0.0# 外服务的 http端口,默认为9200http.port: 9200# 进行节点之间的通信 tcp 端口transport.tcp.port:# --------------------------------- Discovery ----------------------------------# 发现设置, Elasticsearch使用名为“Zen Discovery”的自定义发现实现进行节点到节点的群集和主选举。在投入生产之前,应该配置两个重要的发现设置。## 第一种配置格式discovery.zen.ping.unicast.hosts:- 192.168.1.10:9300- 192.168.1.11- seeds.mydomain.com## 第二种配置格式discovery.zen.ping.unicast.hosts: ["host1", "host2"]
- conf/jvm.options 配置 Elasticsearch JVM 设置
# JVM 内存设置, Xmx 为不超过物理 RAM 的 50%, 以确保有足够的物理RAM用于内核文件系统缓存。## 表示总堆空间的初始大小-Xms8g## 表示总堆空间的最大大小-Xmx8g# JVM 堆转储路径## 默认情况下,Elasticsearch 将 JVM 配置为将内存异常转储到默认数据目录.(RPM 和 Debian 软件包发行版,/var/lib/elasticsearch, tar 和 zip 安装, 放在安装目录的 data 文件夹下)## mkdir -p /opt/logs/elasticsearch/heap_dump## mkdir -p /opt/logs/elasticsearch/gc-XX:HeapDumpPath=/opt/logs/elasticsearch/heap_dump# specify an alternative path for JVM fatal error logs-XX:ErrorFile=/opt/logs/elasticsearch/gc/hs_err_pid%p.log# JDK 8 GC logging8:-Xloggc:/opt/logs/elasticsearch/gc/gc.log# JDK 9+ GC logging9-:-Xlog:gc*,gc+age=trace,safepoint:file=/opt/logs/elasticsearch/gc/gc.log:utctime,pid,tags:filecount=32,filesize=64m
- conf/log4j2.properties 用于配置 Elasticsearch 日志记录
待定
2. 系统重要配置
- Disable swapping 禁止使用交换区(https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration-memory.html)
大多数操作系统尝试使用尽可能多的内存来存储文件系统缓存,并急切地交换掉未使用的应用程序内存。这可能导致部分JVM堆甚至其可执行页面被换出到磁盘。交换对性能,节点稳定性非常不利,应该不惜一切代价避免。它可能导致垃圾收集持续数分钟而不是毫秒,并且可能导致节点响应缓慢甚至断开与群集的连接。在弹性分布式系统中,让操作系统终止节点更有效。有三种禁用交换的方法。首选选项是完全禁用交换。如果这不是一个选项,是否更喜欢最小化swappiness与内存锁定取决于您的环境。1. Disable all swap filessudo swapoff -a2. 永久禁用需要编辑 /etc/fstab 文件并注释掉包含该单词的任何行 swap3. 启用 bootstrap.memory_lock另一种选择是在 Linux / Unix系统上使用mlockall,或 在Windows 上 使用 VirtualLock,以尝试将进程地址空间锁定到RAM中,从而防止任何 Elasticsearch 内存被换出。这可以通过将此行添加到config/elasticsearch.yml 文件来完成:
- File Descriptors 文件描述符 ``` sh
ulimit 方式 ulimit -n 65536 (这个只要比 /etc/security/limits.conf 设置的小, 否则无效)
/etc/security/limits.conf 永久生效 elasticsearch - nofile 65536 ```
Elasticsearch mmapfs 默认使用目录来存储其索引。map 计数的默认操作系统限制可能太低,这可能导致内存不足异常。1. 在 Linux 上,可以通过运行以下命令来增加限制 root:sysctl -w vm.max_map_count=2621442. /etc/sysctl.conf 永久生效vm.max_map_count = 262144
Elasticsearch 为不同类型的操作使用许多线程池。重要的是它能够在需要时创建新线程。确保 Elasticsearch 用户可以创建的线程数至少为 4096。1. ulimitulimit -u 655362. /etc/security/limits.conf 生效elasticsearch - nofile 65536
# 缓存ttl(以秒为单位),以便进行积极的DNS查找, JDK安全属性networkaddress.cache.ttl;设置为-1以永久缓存-Des.networkaddress.cache.ttl=60# 为负DNS查找缓存ttl(以秒为单位),注意这将覆盖JDK安全属性networkaddress.cache。- ttl;设置为-1以缓存永远-Des.networkaddress.cache.negative.ttl=10
集群部署
# --------------------------------- 启动 ----------------------------------1. 启动# 直接读取配置启动./bin/elasticsearch# 命令行启动./bin/elasticsearch \-E cluster.name=es-datacenter \-E node.name=es-datacenter-node1 \-E network.host=es-datacenter-node1 \-E discovery.zen.ping.unicast.hosts=es-datacenter-node1,es-datacenter-node2,es-datacenter-node3 \-d# 守护启动./bin/elasticsearch -d -p pid# 指定 pid 启动./bin/elasticsearch -p /tmp/elasticsearch-pid -d# 通过 pid 删除cat /tmp/elasticsearch-pid && echokill -SIGTERM PIDnetstat -tunlp | grep 9200# --------------------------------- 停止 ----------------------------------jps | grep Elasticsearch14542 Elasticsearch# 删除进程pkill -F pid# --------------------------------- 问题 ----------------------------------max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]1. ulimit 方式ulimit -n 65536 (这个只要比 /etc/security/limits.conf 设置的小, 否则无效)2. /etc/security/limits.conf 永久生效你的启动账号 - nofile 65536max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]1. 临时修改sudo sysctl -w vm.max_map_count=2621442. 永久生效sudo vim /etc/sysctl.conf 永久生效vm.max_map_count=262144
