Elasticsearch、Kibana版本
- Elasticsearch:7.2.0
- Kibana:7.2.0
集群结构及服务器配置
- 集群共3个节点,分别对应3台服务器
- 每台服务器配置:2核16G,数据盘100G固态硬盘,系统盘40G机械盘
Elasticsearch 安装
一、下载安装
新建/data
目录,并挂载SSD磁盘
mkdir /data | |
fdisk -u /dev/vdb | |
mkfs.ext4 /dev/vdb1 | |
cp /etc/fstab /etc/fstab.bak | |
echo "/dev/vdb1 /data/ ext4 defaults 0 0" >> /etc/fstab | |
mount /dev/vdb1 /data |
创建Elasticsearch数据目录
和日志目录
mkdir -p /data/elasticsearch/data | |
mkdir -p /data/elasticsearch/logs |
新建/elastic
目录
mkdir /elastic
官网迅雷下载,上传到服务器,解压ES压缩包,并复制到/elastic
目录下
tar -vxzf elasticsearch-7.2.0-linux-x86_64.tar.gz | |
cp -r elasticsearch-7.2.0 /elastic/elasticsearch |
创建elastic用户,并修改/elastic
、/data/elasticsearch
目录及子目录文件拥有者
useradd elastic | |
chown -R elastic:elastic /elastic | |
chown -R elastic:elastic /data/elasticsearch |
稳定性调优
一、Linux参数调优
1. 修改系统资源限制
单用户可以打开的最大文件数量,可以设置为官方推荐的65536或更大些
echo "* - nofile 655360" >>/etc/security/limits.conf
单用户内存地址空间
echo "* - as unlimited" >>/etc/security/limits.conf
单用户线程数
echo "* - nproc 2056474" >>/etc/security/limits.conf
单用户文件大小
echo "* - fsize unlimited" >>/etc/security/limits.conf
单用户锁定内存
echo "* - memlock unlimited" >>/etc/security/limits.conf
单进程可以使用的最大map内存区域数量
echo "vm.max_map_count = 655300" >>/etc/sysctl.conf
TCP全连接队列参数设置, 这样设置的目的是防止节点数较多(比如超过100)的ES集群中,节点异常重启时全连接队列在启动瞬间打满,造成节点hang住,整个集群响应迟滞的情况
echo "net.ipv4.tcp_abort_on_overflow = 1" >>/etc/sysctl.conf | |
echo "net.core.somaxconn = 2048" >>/etc/sysctl.conf |
降低tcp alive time,防止无效链接占用链接数
echo 300 >/proc/sys/net/ipv4/tcp_keepalive_time
2. 使配置生效
使/etc/sysctl.conf
立即生效
sysctl -p
重新登录账号,使/etc/security/limits.conf
生效
二、ES节点配置
1. jvm.options
-Xms和-Xmx设置为相同的值,推荐设置为机器内存的一半左右,剩余一半留给系统cache使用。
- jvm内存建议不要低于2G,否则有可能因为内存不足导致ES无法正常启动或OOM
- jvm建议不要超过32G,否则jvm会禁用内存对象指针压缩技术,造成内存浪费
2. elasticsearch.yml
# 集群名称 | |
cluster.name: bl-els | |
# 节点名称,3个节点对应名称["node-1","node-2","node-3"] | |
node.name: node-1 | |
# ES数据存储路径 | |
path.data: /data/elasticsearch/data | |
# ES日志存储路径 | |
path.logs: /data/elasticsearch/logs | |
# 锁定内存 | |
bootstrap.memory_lock: true | |
# HTTP访问IP,内网IP、外网IP都可以访问 | |
network.host: 0.0.0.0 | |
# HTTP访问端口 | |
http.port: 9200 | |
# 种子节点的地址列表 | |
discovery.seed_hosts: ["172.18.112.10", "172.18.112.11", "172.18.112.12"] | |
# 可以成为主节点的名称列表 | |
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] |
Elasticsearch 集群、管理、安全
一、节点部署,并形成集群
1. 单节点部署完成后,第一次测试运行
# 切换到 elastic 账号 | |
su elastic | |
# 跳转到 ES 目录 | |
cd /elastic/elasticsearch | |
# 前台启动 | |
./bin/elasticsearch |
2. 多节点部署,形成集群
查看节点信息
ip:9200
curl常用命令
# curl查看ES集群支持的选项 | |
ip:9200/_cat | |
# 查看ES节点信息 | |
ip:9200/_cat/nodes?v | |
# 查看ES集群的健康状态 | |
ip:9200/_cat/health?v |
3. 开机启动
新建/etc/init.d/elasticsearch
脚本
vim /etc/init.d/elasticsearch | |
#!/bin/sh | |
#chkconfig: 2345 80 05 | |
#description: elasticsearch | |
els_user=elastic | |
els_menu=/elastic/elasticsearch | |
case "$1" in | |
start) | |
su $els_user<<! | |
cd $els_menu | |
./bin/elasticsearch -d | |
exit | |
! | |
echo "elasticsearch startup" | |
;; | |
stop) | |
els_pid=`ps aux | grep org.elasticsearch.bootstrap.Elasticsearch | grep -v grep | awk '{print $2}'` | |
kill $els_pid | |
echo "elasticsearch stopped" | |
;; | |
restart) | |
els_pid=`ps aux | grep org.elasticsearch.bootstrap.Elasticsearch | grep -v grep | awk '{print $2}'` | |
kill $els_pid | |
echo "elasticsearch stopped" | |
su $els_user<<! | |
cd $els_menu | |
./bin/elasticsearch -d | |
exit | |
! | |
echo "elasticsearch startup" | |
;; | |
*) | |
echo "start|stop|restart" | |
;; | |
esac | |
exit $? |
为启动脚本增加执行权限
chmod +x /etc/init.d/elasticsearch
配置开机启动Elasticsearch
chkconfig --add elasticsearch
4. 如何正确的关闭Elasticsearch集群
关闭Elasticsearch集群
# 禁止分片自动分布 | |
PUT _cluster/settings | |
{ | |
"persistent": { | |
"cluster.routing.allocation.enable": "primaries" | |
} | |
} | |
# 执行同步刷新 | |
POST _flush/synced | |
# 逐个关闭节点 | |
/etc/init.d/elasticsearch stop | |
# 或者手动kill | |
ps aux|grep elasticsearch | |
kill pid |
启动Elasticsearch集群
# 逐个启动节点 | |
/etc/init.d/elasticsearch start | |
# 等待所有节点加入集群,查看集群状态是否为[yellow] | |
GET _cat/health | |
GET _cat/nodes | |
# 或者直接查看Elasticsearch-head工具[集群健康值][yellow] | |
# 启用分片自动分布 | |
PUT _cluster/settings | |
{ | |
"persistent": { | |
"cluster.routing.allocation.enable": null | |
} | |
} | |
# 等待集群可用,通过集群的状态和恢复进程监控集群是否可用[green] | |
GET _cat/health | |
GET _cat/recovery | |
# 或者直接查看Elasticsearch-head工具[集群健康值][green] |
二、集群管理
1. elasticsearch-head管理工具
github地址:github.com/mobz/elasticsearch-head
推荐使用Chrome插件方式安装
chrome.google.com/webstore/detail/...
2. Kibana安装管理
官网迅雷下载,上传到服务器,解压kibana压缩包,并复制到/elastic
目录下
tar -vxzf kibana-7.2.0-linux-x86_64.tar.gz | |
cp -r kibana-7.2.0 /elastic/kibana |
修改/elastic/kibana
目录及子目录文件拥有者
chown -R elastic:elastic /elastic/kibana
第一次测试运行
# 切换到 elastic 账号 | |
su elastic | |
# 跳转到 ES 目录 | |
cd /elastic/kibana | |
# 前台启动 | |
./bin/kibana |
查看 Kibana 网站
ip:5601
Kibana 后台启动及关闭
# 切换到 elastic 账号 | |
su elastic | |
# 跳转到 ES 目录 | |
cd /elastic/kibana | |
# 后台启动,并在当前目录产生一个nohup.out文件,记录kibana输出日志,kibana参数[-p]表示只记录【错误日志】和【启动日志】 | |
nohup ./bin/kibana -q & | |
# 查看kibana进程pid | |
# 方法一 | |
tail -n 10 nohup.out | |
# 方法二 | |
netstat -tunlp | grep 5601 | |
#关闭kibana | |
kill pid |
三、通信加密
1. master节点生成秘钥
生成证书和私钥
./bin/elasticsearch-certutil ca | |
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 |
删除CA证书颁发机构
rm -f /elastic/elasticsearch/elastic-stack-ca.p12
新建certs
目录存放证书
mkdir /elastic/elasticsearch/config/certs
证书存放到certs
目录
mv elastic-certificates.p12 /elastic/elasticsearch/config/certs
修改certs
目录及文件拥有者
chown -R elastic:elastic /elastic/elasticsearch/config/certs
2. 其他节点部署秘钥
从master节点下载证书
...步骤省略...
新建certs
目录存放证书
mkdir /elastic/elasticsearch/config/certs
上传证书文件,并存放到certs
目录
mv elastic-certificates.p12 /elastic/elasticsearch/config/certs
修改certs
目录及文件拥有者
chown -R elastic:elastic /elastic/elasticsearch/config/certs
3. 加密群集中节点之间的通信
vim config/elasticsearch.yml | |
xpack.security.transport.ssl.enabled: true | |
xpack.security.transport.ssl.verification_mode: certificate | |
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12 | |
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12 |
4. 加密HTTP客户端通信 [可选]
vim config/elasticsearch.yml | |
xpack.security.http.ssl.enabled: true | |
xpack.security.http.ssl.keystore.path: certs/elastic-certificates.p12 | |
xpack.security.http.ssl.truststore.path: certs/elastic-certificates.p12 |
5.重启Elasticsearch
依次关闭所有节点
/etc/init.d/elasticsearch stop
依次启动所有节点
/etc/init.d/elasticsearch start
四、安全设置
1. 初始化内置账号
开启Elasticsearch安全验证
vim config/elasticsearch.yml | |
xpack.security.enabled: true |
为节点间通信配置传输层安全性(TLS/SSL)
加密群集中节点之间的通信
如果Elasticsearch尚未运行,请启动所有节点
/etc/init.d/elasticsearch start
设置所有内置用户的密码
# 以下方式二选一 | |
# 自动随机生成密码,并输出到控制台 | |
./bin/elasticsearch-setup-passwords auto | |
# 提示手动输入密码,按步骤填写密码 | |
./bin/elasticsearch-setup-passwords interactive |
2. 使用内置超级账号elastic
第一次登陆
elasticsearch-head使用账号elastic
第一次登陆
刷新elasticsearch-head页面自动弹出登陆框,输入账号elastic
及密码即可登陆
Kibana使用账号elastic
第一次登陆
vim config/kibana.yml | |
elasticsearch.username: "elastic" | |
elasticsearch.password: "elasticpassword" | |
# Ctrl-C 停止服务,并重启kibana | |
./bin/kibana |
刷新Kibana页面自动跳转到登录页面,输入账号elastic
及密码即可登陆
3. 使用Kibana自定义角色权限、自建账号、及账号授权
- 使用超级账号
elastic
登录Kibana,进入安全设置 - 参照超级账号的角色,新建
自定义超级角色
- 新增
自定义超级账号
,并授权自定义超级角色
- 退出超级账号
elastic
,使用自定义超级账号
重新登录Kibana - 其他角色及权限分配,对应自己的团队创建