2.Elasticsearch集群管理
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。
1.Elasticsearch集群概念介绍
1.Elasticsearch集群特点
不需要太多java的知识也可以很方便的维护整个集群。
搭建方便:搭建副本非常简单,只需要将新节点加入已有集群即可,会自动同步数据。
自动故障转移:当节点出现故障时,会自动故障转移,将有数据复制到其他正常的节点。
2.分片和副本
主分片: 实际存储的数据,负责读写,粗框的是主分片
副本分片: 主分片的副本,提供读,同步主分片,细框的是副本分片
分片指的是将数据分成几份。主分片和副本分片数量一致
副本
:相当于备份,是主分片的备份,副本数量可以自定义
默认分片和副本规则
7.X版本之前默认规则: 1副本,5分片
7.x版本之后默认规则: 1副本,1分片
3.节点类型
Cluster state:集群相关的数据称为cluster state;会存储在每个节点中,主要有以下信息:
1)节点信息,比如节点名称、节点连接地址等
2)索引信息,比如索引名称、索引配置信息等
Master节点:
1.ES集群中只能有一个master节点,master节点用于控制整个集群的操作;
2.master主要维护Cluster state,当有新数据产生后,Master会将最新的数据同步给其他Node节点,
3.master节点是通过选举产生的,可以通过node.master: true 指定为master选举节点(默认为 true)
Data节点
1.存储数据的节点即为data节点,默认节点都是data类型,相关配置node.data: true (默认为true)
2.当创建索引后,索引创建的数据会存储至某个节点,能够存储数据的节点,称为data节点
Coordinating节点
1.处理请求的节点即为coordinating节点,该节点为所有节点的默认角色,不能取消
2.coordinating节点主要将请求路由到正确的节点处理。比如创建索引的请求会由coordinating路由到master节点处理;当配置node.master: false、node.data:false则为coordinating节点
4.集群健康状态
绿色: 所有数据都完整,且副本数满足
黄色: 所有数据都完整,但是副本数不满足
红色: 一个或多个索引数据不完整
2.Elasticsearch集群部署
1.Elasticsearch集群部署注意事项
最好是使用干净的环境部署集群,如果以前有单节点的数据,最好备份出来,然后再清空集群数据。
7.x版本之后不需要单独的安装JDK,软件包自带了JDK
插入和读取数据在任意节点都可以执行,效果一样
es-head可以连接集群内任一台服务
主节点负责读写 如果主分片所在的节点坏掉了,副本分片会升为主分片
主节点负责调度 如果主节点坏掉了,数据节点会自动升为主节点
通讯端口 默认会有2个通讯端口:9200和9300 9300并没有在配置文件里配置过 如果开启了防火墙并且没有放开9300端口,那么集群通讯就会失败
2.安装Elasticsearch并编辑配置文件
###安装es
yum localinstall elasticsearch -y
###配置内存锁定
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
###node1配置文件:
[root@es-02 ~]# egrep "^[a-z]" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application###集群名称
node.name: es-02###节点名称
path.data: /var/lib/elasticsearch###数据路径
path.logs: /var/log/elasticsearch###es日志路径
bootstrap.memory_lock: true###内存锁定,不使用swap分区
network.host: 0.0.0.0###监听的地址
http.port: 9200###监听的端口
discovery.seed_hosts: ["10.0.0.150","10.0.0.151"]###自动发现的地址
cluster.initial_master_nodes: ["10.0.0.150", "10.0.0.151"]####集群初始化选举节点,只有创建集群的第一次有用,集群创建后参数失效
###node2配置文件:
[root@es-03 ~]# egrep "^[a-z]" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application
node.name: es-03
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.150","10.0.0.151","10.0.0.152"]
cluster.initial_master_nodes: ["10.0.0.150","10.0.0.151","10.0.0.152"]
3.启动并检查集群状态
systemctl daemon-reload
systemctl restart elasticsearch
登录elasticsearch-head查看是否多了两个节点

3.Elasticsearch集群增加节点
1.安装并配置新节点es
##安装es
rpm -ivh elasticsearch-7.9.1-x86_64.rpm
##配置内存锁定
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
##node3集群配置文件
[root@es-03 ~]# egrep "^[a-z]" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-application
node.name: es-03
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["10.0.0.82","10.0.0.81"]
cluster.initial_master_nodes: ["10.0.0.82","10.0.0.81"]
2.添加节点注意
对于新添加的节点来说: 只需要指到集群内任意一个节点的IP和他自己本身的IP即可 discovery.seed_hosts: ["10.0.0.51","10.0.0.53"]
对于以前的节点来说: 什么都不需要更改
3.数据分片颜色解释
紫色: 正在迁移
黄色: 正在复制
绿色: 正常
4.集群故障转移实验
1.停掉主节点,观察集群是否正常
2.停掉主节点,是否还会选举出新的主节点
3.停掉主节点,数据分片的分布会不会发生变化,分片状态会不会发生变化
4.停掉主节点,然后在持续的写入数据,等节点恢复之后,会如何处理落后的数据
5.3个节点的Elasticsearch集群,极限情况下最多允许坏几台?
6.主节点故障,集群健康状态发生什么变化?
结论:
1.如果主节点坏掉了,会从活着的数据节点中选出一台新的主节点
2.如果主分片坏掉了,副本分片会升级为主分片
3.如果副本数不满足,会尝试在其他的节点上重新复制一份数据
4.修复上线只需要正常启动故障的节点即会自动加入到集群里,并且自动同步数据
5.7.x版本之后则必须至少2个节点存活集群才能正常工作
4.Elasticsearch集群副本和分片管理
1.自定义副本数和索引数参数注意事项
索引一旦建立完成,分片数就不可以修改了
但是副本数可以随时修改
2.创建索引的时候就自定义副本和分片
PUT /linux2/
{
"settings": {
"number_of_shards": 3, ###设置分片
"number_of_replicas": 0###设置副本数
}
}
3.修改单个索引的副本数
PUT /linux2/_settings/
{
"settings": {
"number_of_replicas": 2
}
}
4.修改所有的索引的副本数
PUT /_all/_settings/
{
"settings": {
"number_of_replicas": 0
}
}
5.Elasticsearch集群监控
1.监控注意
1.不能只监控集群状态
2.监控节点数
3.监控集群状态
4.两者任意一个发生改变了都报警
2.获取监控项的监控命令
使用curl命令获取 ip:/_cat/
例如curl -s 127.0.0.1:9200/_cat/health|grep "green"|wc -l
3.kibana开启和关闭监控
###kibana开启监控
点击kibana面板的堆栈监测按钮-使用内部收集设置
###kibana关闭监控
GET /_cluster/settings
PUT /_cluster/settings
{
"persistent" : {
"xpack" : {
"monitoring" : {
"collection" : {
"enabled" : "false"
}
}
}
}
}
6.Elasticsearch的中文分词器
1.未分词的情况
1.插入测试数据
POST /news/_doc/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news/_doc/2
{"content":"公安部:各地校车将享最高路权"}
POST /news/_doc/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news/_doc/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
2.查询测试
POST /news/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
2.中文分词配置
1.前提条件
所有的ES节点都需要安装
所有的ES都需要重启才能生效
中文分词器的版本号要和ES版本号对应 https://github.com/medcl/elasticsearch-analysis-ik
2.配置中文分词器
在线安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
离线本地文件安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///opt/elasticsearch-analysis-ik-7.9.1.zip
3.重启所有ES节点并创建索引
systemctl restart elasticsearch.service
PUT /news2
4.创建模板
POST /news2/_doc/_mapping?include_type_name=true
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
5.插入测试数据
POST /news2/_doc/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news2/_doc/2
{"content":"公安部:各地校车将享最高路权"}
POST /news2/_doc/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news2/_doc/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
6.再次查询数据发现已经能识别中文了
POST /news2/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
7.Elasticsearch备份恢复
1.使用官方的快照snap功能备份恢复
1.前提条件
官方地址:
https://www.elastic.co/guide/en/elasticsearch/reference/7.9/snapshot-restore.html
前提条件:
如果是Elasticsearch集群想使用快照功能,则存储快照的目录必须是共享存储,并且所有节点都需要挂载这个目录。
配置NFS:
#服务端配置
yum install nfs-utils -y
cat > /etc/exports << 'EOF'
/data/backup 10.0.0.0/24(rw,sync,all_squash,anonuid=997,anongid=995)
EOF
systemctl restart nfs
showmount -e 10.0.0.51
mkdir /data/backup -p
#客户端配置
yum install nfs-utils -y
mkdir /data/backup -p
mount -t nfs 10.0.0.31:/data/backup /data/backup
df -h
2.所有节点修改Elasticsearch配置文件,添加参数并重启
path.repo: ["/data/backup"]
systemctl restart elasticsearch
3.注册快照
PUT /_snapshot/my_fs_backup
{
"type": "fs",
"settings": {
"location": "/data/backup/my_fs_backup_location",
"compress": true
}
}
4.查看快照并创建快照
GET /_snapshot/my_fs_backup
PUT /_snapshot/my_fs_backup/snapshot_1?wait_for_completion=true
5.创建指定索引的快照
PUT /_snapshot/my_fs_backup/snapshot_2?wait_for_completion=true
{
"indices": "news,news2",
"ignore_unavailable": true,
"include_global_state": false
}
6.查询快照信息
GET /_snapshot/my_fs_backup/snapshot_1
GET /_snapshot/my_fs_backup/snapshot_2
7.查看正在运行的快照
GET /_snapshot/my_fs_backup/_current
8.删除快照
DELETE /_snapshot/my_fs_backup/snapshot_2
9.快照还原
###删除存储库
DELETE /_snapshot/my_fs_backup
###全部还原
POST /_snapshot/my_fs_backup/snapshot_1/_restore
##注意全部还原索引不能冲突
###还原部分
POST /_snapshot/my_fs_backup/snapshot_1/_restore?wait_for_completion=true
{
"indices": "linux,linux76,linux76-lnb",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "index_(.+)",###匹配需要重命名的索引,避免索引冲突
"rename_replacement": "restored_index_$1",##重命名后的名字
"include_aliases": false
}
###恢复的同时更改索引配置
POST /_snapshot/my_fs_backup/snapshot_1/_restore
{
"indices": "index_1",
"index_settings": {
"index.number_of_replicas": 0
},
"ignore_index_settings": [
"index.refresh_interval"
]
}
10.以日期命名快照
PUT /_snapshot/my_fs_backup/%3Csnapshot-%7Bnow%2Fd%7D%3E
GET /_snapshot/my_fs_backup/_all
2.使用第三方工具elasticdump备份恢复
1.前提条件
需要node环境
npm -v
node -v
2.nodejs安装
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
tar xf node-v10.16.3-linux-x64.tar.xz -C /opt/
cd /opt/
ln -s node-v10.16.3-linux-x64 node
echo 'export PATH=/opt/node/bin:$PATH' >> /etc/profile
source /etc/profile
npm -v
node -v
3.指定使用国内淘宝npm源
npm install -g cnpm --registry=https://registry.npm.taobao.org
4.安装es-dump
cnpm install elasticdump -g
5.备份
备份成可读的json格式
elasticdump --input=http://10.0.0.51:9200/news2 --output=/data/news2.json --type=data
备份成压缩格式
Elasticdump --input=http://10.0.0.51:9200/news2 --output=$|gzip > /data/news2.json.gz
备份分词器/mapping/数据一条龙服务
elasticdump --input=http://10.0.0.51:9200/news2 --output=/data/news2_mapping.json --type=mapping
elasticdump --input=http://10.0.0.51:9200/news2 --output=/data/news2.json --type=data
###可以写到定时任务里实时备份
6.恢复
只恢复数据
elasticdump --input=/data/news2.json --output=http://10.0.0.51:9200/news2
恢复所有数据包含分词器/mapping一条龙
elasticdump --input=/data/news2_mapping.json --output=http://10.0.0.51:9200/news2 --type=mapping
elasticdump --input=/data/news2.json --output=http://10.0.0.51:9200/news2 --type=data
7.批量备份
curl -s 10.0.0.52:9200/_cat/indices|awk '{print $3}'|grep -v "^\."
8.注意事项
1.如果恢复的时候数据冲突了,会被覆盖掉
2.如果已经存在备份文件里没有的数据,会保留下来
9.带密码认证的导出
--input=http://name:password@production.es.com:9200/my_index
8.Elasticsearch优化
1.官方参考
https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html
2.优化建议
1.内存系统建议预留一半
2.每个ES节点不要超过32G
3.关闭swap分区
4.配置文件打开内存锁定参数
5.升级SSD硬盘
6.升级大版本
未经允许不得转载:孙某某的运维之路 » 2.Elasticsearch集群管理
评论已关闭