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 - 其他角色及权限分配,对应自己的团队创建