Elasticsearch 集群搭建

IT知识
418
0
0
2022-05-05
标签   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
  • 其他角色及权限分配,对应自己的团队创建