id: es title: 行为数据存储
author: xulishan@finogeeks.com
行为数据存储
对于用户行为数据,FinClip 采用 ElasticSearc 进行存储、检索和分析。Elasticsearch 是一种分布式 RESTful 搜 索和分析引擎,能够处理越来越多的用例。作为 Elastic Stack 的核心,它集中存储您的数据,以实现闪电般的快 速搜索、微调相关性和可轻松扩展的强大分析。
部署架构
ElasticSearch 的拓扑图如下
服务配置
节点(Node):此中间件默认(最低)交付状态下为三节点集群部署。
索引(Index):此中间件默认(最低)单个索引数据备份数为 1,数据分片数为 5。
数据目录
服务器 | 设计用途 | 路径 |
---|---|---|
节点 1 | 持久化数据目录 | /mnt/var/lib/container/elasticsearch |
docker-compose 文件目录 | /mnt/opt/docker-compose/elasticseaerch | |
节点 2 | 持久化数据目录 | /mnt/var/lib/container/elasticsearch |
docker-compose 文件目录 | /mnt/opt/docker-compose/elasticseaerch | |
节点 3 | 持久化数据目录 | /mnt/var/lib/container/elasticsearch |
docker-compose 文件目录 | /mnt/opt/docker-compose/elasticseaerch |
网络
底层:此中间件基于 docker-compose
启动,docker-compose
基于 docker0 虚拟网卡进行通信,因此本中间件在所有服务器上的所有组件,均通过 docker0 网卡划分出的子网进行通信,并且通过 --network=host
配置运行。
子网网段可以通过
ifconfig docker0
进行确认。
业务层:
服务器 | 设计用途 | 端口 |
---|---|---|
节点 1 | [占用宿主机固定端口] 对外服务 | 9200 |
[占用宿主机固定端口] 集群内部通信 | 9300 | |
[占用宿主机固定端口] Prometheus Metrics 信息提供 | 9114 | |
节点 2 | [占用宿主机固定端口] 对外服务 | 9200 |
[占用宿主机固定端口] 集群内部通信 | 9300 | |
[占用宿主机固定端口] Prometheus Metrics 信息提供 | 9114 | |
节点 3 | [占用宿主机固定端口] 对外服务 | 9200 |
[占用宿主机固定端口] 集群内部通信 | 9300 | |
[占用宿主机固定端口] Prometheus Metrics 信息提供 | 9114 |
状态检查
集群状态:在任意一个节点服务器上,执行 curl http://localhost:9200/_cluster/health?pretty
,应显示以下回显,查询结果字样应符合、或不低于下述要求:
{
……
"status" : "green", # 此项代表集群健康
……
"number_of_nodes" : 3, # 此项代表集群当前节点数,需符合具体部署节点数。
"number_of_data_nodes" : 3, # 此项代表集群当前数据节点数,需符合具体部署节点数。
……
}
节点增、删
节点由 docker-compose
启动时调用的 docker-compose.yaml 文件控制。配置位于于项 services.elasticsearch.environment
中的 discovery.zen.ping.unicast.hosts
。
新增节点:若需要新增节点,请依照下列步骤操作
- 确认新节点已经安装好 Docker 19.03 或更高版本、已经安装好 docker-compose 1.27 或更高版本
- 确认新节点的 IP 地址
- 确认新节点对于当前 ElasticSearch 所在的所有服务器的 9200、9300、9114 均为互相可达状态
- 在 ElasticSearch 所在的所有服务器上,切换至 docker-compose.yaml 文件所在目录
- 在 ElasticSearch 所在的所有服务器上执行
docker-compose down
停止所有 ElasticSearch 服务 - 在 ElasticSearch 所在的所有服务器上,编辑 docker-compose.yaml 文件中上述的值,以逗号
,
分割,并新增一个可达的 IP 地址 - 复制 docker-compose.yaml 文件到新节点上
- 在 ElasticSearch 所在的所有服务器上执行
docker-compose up -d
启动所有 ElasticSearch 服务 - 等待约 2 分钟让集群启动。若 Index 数据较多可能会需要更长的时间以同步数据
- 执行 “状态检查” 中的步骤,确保
number_of_nodes
为正确数量(即原数量 + 新增节点数)、number_of_data_nodes
为正确数量。
删除节点:若要移除任一节点,请依照下列步骤操作
通过 curl 或相应工具发送下列请求到 ElasticSearch
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "<你需要移除的节点 IP>"
}
}
执行 “状态检查” 中的步骤,确保
relocating_shards
大于 0稍等片刻后,再次执行 “状态检查” 中的步骤,确保
relocating_shards
等于 0在 ElasticSearch 所在的所有服务器上,切换至 docker-compose.yaml 文件所在目录
在 ElasticSearch 所在的所有服务器上执行
docker-compose down
停止所有 ElasticSearch 服务在 ElasticSearch 所在的所有服务器上,编辑 docker-compose.yaml 文件中上述的值,删除需要移除的节点的 IP。
删掉需要移除 ElasticSearch 节点的服务器上的 docker-compose.yaml 文件
在 ElasticSearch 剩余所在的所有服务器上执行
docker-compose up -d
启动所有 ElasticSearch 服务等待约 2 分钟让集群启动。
执行 “状态检查” 中的步骤,确保
number_of_nodes
为正确数量(即原数量 - 移除节点数)、number_of_data_nodes
为正确数量。
数据导出、恢复
请参考 ElasticSearch Dump:https://github.com/elasticsearch-dump/elasticsearch-dump
常见灾难场景
Q:节点重启后,集群重建失败,status 无法为 green:
A:此情况先查看日志,通常可能由于配置原因导致。如果出现 Unable to Connect / Elect Master 等字样,可能由于 IP 地址获取失败导致无法通信,此时需要手动切换到 docker-compose.yaml 目录,停止所有集群,然后在 docker-compose.yaml 文件中的
services.elasticsearch.environment
里新增一个环境变量network.publish_host=<本机 IP>
,再启动所有集群。