一. 版本与java客户端选择
es当前的大版本有7.x,6.x,5.x,2.x, 其中2.x无法向上升级。
7.x太新,不建议上项目。
pg与es之间的数据同步插件amazonriver,对es的版本有要求,只支持5.x版本,所以这里选择了5.5.0版本。
二. Es下载
官网下载
elasticsearch-5.5.0.tar.gz
三. 硬盘与内存的要求
1)建索引需要把业务数据全部导入es,根据数据量估算存储需要的磁盘空间,选择磁盘剩余充足的目录安装es.
2)Es的性能很依赖内存,内存一般设置不超过机器可用内存总数的一半,最大不要超过32G(不然性能反而会下降),未占用的另一半会被lucene文件缓存占用。
3)Linux 的swapping 需要调整到最低,以避免es缓存的数据被交换到磁盘(和windows的虚拟内存机制一样),这会导致es性能大幅下降。
四. 安装
上传压缩包elasticsearch-5.5.0.tar.gz到目录:
/opt/elasticsearch-5.5.0.tar.gz
(已通过命令df -h 与 df /opt检查/opt 所在的挂载磁盘,所剩存储足够大)
解压到/opt目录
cd /opt
tar -xzf /opt/elasticsearch-5.5.0.tar.gz
五. 配置
1)配置/opt/elasticsearch-5.5.0/config/elasticsearch.yml
#集群名称,同局域网下cluster名称相同的节点会自动组成一个集群
cluster.name: es-cluster-qj
#节点名称,同集群下每个es节点名称都需要唯一,不相同
node.name: node-1
#手动先创建/opt/elasticsearch-5.5.0/data ,指定该目录用来存储索引
#可指定多个目录,一般这些目录要位于不同磁盘
path.data: /opt/elasticsearch-5.5.0/data
#指定日志输出路径
path.logs: /opt/elasticsearch-5.5.0/logs
#本机ip
network.host: 10.168.4.91
#es rest api 监听端口
http.port: 9200
#head 插件配置 允许跨域访问(head 插件提供一个简单的交互页面,支持对es rest api 进行简易的访问)(直接添加在文件末端)
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-credentials: true
2)配置/opt/elasticsearch-5.5.0/config/jvm.options
(检查机器内存 多少G可用:
[root@10.168.4.60 ~]# cat /proc/meminfo
MemTotal: 32781624 kB
MemFree: 22576584 kB
MemAvailable: 24901968 kB
总共32G, 剩余24G, 所以准备给es配置内存10G。)
修改配置:
-Xms10g
-Xmx10g
-Xms和-Xmx设置相同时可避免Java堆自动扩展
一般配置为总内存 的一半,不要超过32G。超过32G,JVM优化策略Compressed OOPS会失效,同时对象指针从4位增加到8位,反而加大了无畏的消耗。
3)系统内核配置
a)vim /etc/sysctl.conf 添加如下配置
vm.swappiness=1
vm.max_map_count=262144
保存退出,再执行如下命令,使配置立即生效
sysctl -p
(-p从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载)
解释:
vm.swappiness=1 调低swapping内存交换,和windows上的虚拟内存功能相同,Es内存中的数据被交换到磁盘上后,会导致性能大大降低。
vm.swappiness这个值表示系统进行swapping的倾向度,不建议设置成0,完全关闭也会导致其他问题。设成最小的1即可。
vm.max_map_count=262144 调大进程的虚拟内存区域上限,不然es启动会报错:“max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]”
b)调大进程文件描述符限制,用户线程数限制,否则es启动会报错:
报错内容:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [3818] for user [es] is too low, increase to at least [4096]
通过下面2个命令查看当前进程文件描述符限制数量
ulimit -Hn
ulimit -Sn
通过下面2个命令查看当前用户线程限制数量
ulimit -Hu
ulimit -Su
vim /etc/security/limits.conf文件,增加配置,用户重新登录后生效
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
六. 新建es用户和用户组
Es 禁止在root用户下运行,所以需要创建个新用户
创建组
groupadd elasticsearch
创建用户es 并指定密码
useradd es -g elasticsearch -p 123456
给es用户赋/opt/elasticsearch-5.5.0权限
chown -R es:elasticsearch /opt/elasticsearch-5.5.0
切换到 es用户 执行命令
七. 启动es
切换到es账户,启动
su es
./bin/elasticsearch -d -p pid
关闭es
kill `cat /opt/elasticsearch-5.5.0/pid`
注意 这里 cat前面和 pid后面 不是 点‘ ,按键
lsof -i:9200 检查该端口进程是否存在
查看es运行日志:
tail -300f /opt/elasticsearch-5.5.0/logs/es-cluster-qj.log
启动后通过浏览器验证es rest api 是否正常访问:
为了能在root用户下更方便的启停es,这里写了启停脚本 :
先给脚本加可执行权限:
chmod +x /opt/elasticsearch-5.5.0/start.sh
chmod +x /opt/elasticsearch-5.5.0/stop.sh
启动
/opt/elasticsearch-5.5.0/start.sh
#!/bin/bash
echo "es不能运行在root用户!正在切换到es用户"
home="/opt/elasticsearch-5.5.0"
su es <<EOF
cd $home
$home/bin/elasticsearch -d -p $home/pid
echo "Starting! Please wait..."
sleep 3s
echo "Started!"
EOF
停止
/opt/elasticsearch-5.5.0/stop.sh
#!/bin/bash
echo "es不能运行在root用户!正在切换到es用户"
su es <<EOF
echo "Stopping! Please wait..."
kill -9 `cat /opt/elasticsearch-5.5.0/pid`
echo "Stoped!"
EOF
END