Elasticsearch 集群搭建
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- 其他角色及权限分配,对应自己的团队创建
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: