无法连接到集群如何处理?
遇到该问题,请按照如下操作步骤排查解决。
1.先确认ECS实例和集群是否在同一个VPC。
- 如果在,执行步骤2。
- 如果不在,需要重新创建ECS实例,使之和集群在同一个VPC下。
2.查看集群的安全组的出方向和入方向是否已允许9200端口(TCP协议),或者允许的端口范围已包含9200端口(TCP协议)。
- 如果是,执行步骤3。
- 如果不是,请前往VPC页面,设置“安全组”的出方向和入方向已允许9200端口或允许的端口范围已包含9200端口。
3.查看ECS实例是否添加安全组。
- 如果有,检查安全组的配置规则是否满足要求,请参见“集群管理”中集群信息表格中“安全组”的描述,然后执行步骤4。
- 如果没有,从ECS的实例详情页面,进入VPC页面,选择“安全组”,添加安全组。
4.在ECS实例上,测试是否可以正常连接到集群。
ssh <节点的内网访问地址和端口号>
说明当集群包含多个节点时,需要逐个节点测试是否可以正常连接到该集群中的每个节点。
如果可以通信,说明网络是正常的。
如果端口不通,请联系技术支持协助排查。
为什么集群创建失败?
集群创建失败原因有如下3种:
- 资源配额不足,无法创建集群。建议申请足够的资源配额。
- 如果集群配置信息中,“安全组”的“端口范围/ICMP类型”不包含“9200”端口,导致集群创建失败。请修改安全组信息或选择其他可用安全组。
- 7.6.2以及7.6.2之后的版本,集群内通信端口9300默认开放在用户VPC的子网上面。创建集群时需要确认所选安全组是否放通子网内的9300通信端口,如果未放通,请修改安全组信息或选择其他可用安全组。
无法备份索引?
索引的备份是通过创建集群快照实现的。
遇到无法备份索引问题,请按照如下操作步骤排查解决。
排查集群的创建时间
1.登录云搜索服务管理控制台。
2.在左侧导航栏,单击“集群管理”。
3.在“集群管理”页面上集群列表中的“创建时间”列,查看待备份索引的集群的创建时间。
- 如果创建时间早于2018年3月10日,则创建该集群时备份与恢复索引功能尚未上线,当前无法为该集群备份索引。
- 如果创建时间晚于2018年3月10日,则需要排查当前登录所用的账号或IAM用户是否具有备份索引的权限,具体操作请参见下方 排查是否有权限。
排查是否有权限
1.登录统一身份认证服务管理控制台。
2.查看当前登录所用的账号或IAM用户所属的用户组。
具体操作请参见统一身份认证用户指南中有关查看和编辑用户信息的相关章节。
3.查看用户组的权限中是否包含:“全局服务”中“对象存储服务”项目的“OBS Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。
具体操作请参见统一身份认证用户指南中有关查看或修改用户组的相关章节。
- 如果用户组的权限中不包含以上两个权限,请执行步骤4。
- 如果用户组的权限中包含以上两个权限,请联系技术支持协助解决。
4.为用户组添加:“全局服务”中“对象存储服务”项目的“OBS Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。
具体操作请参见统一身份认证用户指南中有关查看或修改用户组的相关章节。
云搜索服务支持哪些访问方式?
云搜索服务支持以下访问方式:
- Restful API
- Transport Client
- Rest Client
使用Transport Client访问云服务时,需要确保客户端与服务端的版本一致,否则可能出现无法访问的情况。
Transport Client不推荐使用,建议使用High Level Rest Client。
云搜索服务中是否支持开源Elasticsearch的API或功能?
兼容开源 Elasticsearch 和 OpenSearch 软件原生接口,并支持 Logstash、Beats、 Kibana 等周边生态。
云搜索服务是否支持Logstash对接?
支持Logstash对接,用户需要申请一台ECS来安装Logstash并进行配置。
云搜索服务支持哪些搜索功能?
云搜索服务支持的搜索功能包括强大的全文检索,高亮显示,切面搜索,近实时索引,动态聚类,丰富的文档(如Word、PDF等格式)处理和地理信息搜索等。
为什么集群创建失败?
集群创建失败原因有如下3种:
- 资源配额不足,无法创建集群。建议申请足够的资源配额。
- 如果集群配置信息中,“安全组”的“端口范围/ICMP类型”不包含“9200”端口,导致集群创建失败。请修改安全组信息或选择其他可用安全组。
- 7.6.2以及7.6.2之后的版本,集群内通信端口9300默认开放在用户VPC的子网上面。创建集群时需要确认所选安全组是否放通子网内的9300通信端口,如果未放通,请修改安全组信息或选择其他可用安全组。
无法备份索引?
索引的备份是通过创建集群快照实现的。遇到无法备份索引问题,请按照如下操作步骤排查解决。
排查集群的创建时间
1.登录云搜索服务管理控制台。
2.在左侧导航栏,单击“集群管理”。
3.在“集群管理”页面上集群列表中的“创建时间”列,查看待备份索引的集群的创建时间。
−如果创建时间早于2018年3月10日,则创建该集群时备份与恢复索引功能尚未上线,当前无法为该集群备份索引。
−如果创建时间晚于2018年3月10日,则需要排查当前登录所用的账号或IAM用户是否具有备份索引的权限,具体操作请参见下方“排查是否有权限”。
排查是否有权限
1.登录统一身份认证服务管理控制台。
2.查看当前登录所用的账号或IAM用户所属的用户组。
具体操作请参见统一身份认证用户指南中有关查看或编辑用户信息的相关章节。
3.查看用户组的权限中是否包含:“全局服务”中“对象存储服务”项目的“OBS Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。
具体操作请参见统一身份认证用户指南中有关查看或修改用户信息的相关章节。
−如果用户组的权限中不包含以上两个权限,请执行步骤4。
−如果用户组的权限中包含以上两个权限,请联系技术支持协助解决。
4.为用户组添加:“全局服务”中“对象存储服务”项目的“OBS Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。
具体操作请参见统一身份认证用户指南中有关查看或修改用户信息的相关章节。
如何使用Elasticsearch自定义评分查询
通过Elasticsearch可以对匹配的文档进行评分。本节介绍如何使用Elasticsearch自定义评分查询。
操作步骤
1.登录云搜索服务管理控制台。
2.在左侧导航栏中,选择“集群管理”,进入集群列表页面。
3.在集群列表页面中,单击集群“操作”列的“Kibana”。
4.在Kibana的左侧导航中选择“Dev Tools”,单击“Get to work”,进入Kibana的Console界面。
- 在Kibana的Console界面中,执行命令创建索引,并指定自定义映射来定义数据类型。
例如:现在有“tv.json”数据文件,数据如下所示。
{
"tv":[
{ "name": "tv1", "description": "USB, DisplayPort", "vote": 0.98 }
{ "name": "tv2", "description": "USB, HDMI", "vote": 0.99 }
{ "name": "tv3", "description": "USB", "vote": 0.5 }
{ "name": "tv4", "description": "USB, HDMI, DisplayPort", "vote": 0.7 }
]
}
可以执行如下命令,创建索引“mall”,并指定自定义映射来定义数据类型。
PUT /mall?pretty
{
"mappings": {
"tv": {
"properties": {
"description": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"vote": {
"type": "float"
}
}
}
}
}
6.执行如下命令,将“tv.json”文件中的数据导入到“mall”索引中。
POST /mall/tv/_bulk?pretty
{ "index": {"_id": "1"}}
{ "name": "tv1", "description": "USB, DisplayPort", "vote": 0.98 }
{ "index": {"_id": "2"}}
{ "name": "tv2", "description": "USB, HDMI", "vote": 0.99 }
{ "index": {"_id": "3"}}
{ "name": "tv3", "description": "USB", "vote": 0.5 }
{ "index": {"_id": "4"}}
{ "name": "tv4", "description": "USB, HDMI, DisplayPort", "vote": 0.7 }
7.自定义评分查询数据。
−用绝对好评率计算总分,按照总分由高到低的顺序排列搜索结果。
假设用户想要查询有USB接口、HDMI接口、DisplayPort接口的电视机,接口出现,则记 1 分,不出现,则记 0 分,在前面的得分上乘以绝对好评率为总分。可以执行如下命令按照总分由高到低的顺序排列搜索结果。
GET /mall/tv/_search?pretty
{
"query":{
"function_score":{
"query":{
"bool":{
"should":[
{"constant_score":{
"query":{"match":{"description":"USB"}}
}},
{"constant_score":{
"query":{"match":{"description":"HDMI"}}
}},
{"constant_score":{
"query":{"match":{"description":"DisplayPort"}}
}}
]
}
},
"field_value_factor":{
"field":"vote",
"factor":1
},
"boost_mode":"multiply",
"max_boost":10
}
}
}
上面示例中总分计算公式:new_score = query_score * (factor * vote)
返回结果如下所示。
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 2.1,
"hits": [
{
"_index": "mall",
"_type": "tv",
"_id": "4",
"_score": 2.1,
"_source": {
"name": "tv4",
"description": "USB, HDMI, DisplayPort",
"vote": 0.7
}
},
{
"_index": "mall",
"_type": "tv",
"_id": "2",
"_score": 1.98,
"_source": {
"name": "tv2",
"description": "USB, HDMI",
"vote": 0.99
}
},
{
"_index": "mall",
"_type": "tv",
"_id": "1",
"_score": 1.96,
"_source": {
"name": "tv1",
"description": "USB, DisplayPort",
"vote": 0.98
}
},
{
"_index": "mall",
"_type": "tv",
"_id": "3",
"_score": 0.5,
"_source": {
"name": "tv3",
"description": "USB",
"vote": 0.5
}
}
]
}
}
从上面返回结果可以看出Elasticsearch搜索引擎使用绝对好评率计算电视机的总分,并将电视机按照总分由高到低的顺序排列显示。
−用相对好评率计算总分,按照总分由高到低的顺序排列搜索结果。
假设用户想要查询有USB接口、HDMI接口、DisplayPort接口的电视机,接口出现,则记 1 分,不出现,则记 0 分,在前面的得分上乘以相对好评率为总分。为了避免不正常的好评率对查询结果的影响,不用绝对好评率作为评分因素,设定好评率的门限值为0.8,高于门限值时,好评率按1计算,低于或等于门限值时,好评率按0.5计算。可以执行如下命令按照总分由高到低的顺序排列搜索结果。
GET /mall/tv/_search?pretty
{
"query":{
"function_score":{
"query":{
"bool":{
"should":[
{"constant_score":{
"query":{"match":{"description":"USB"}}
}},
{"constant_score":{
"query":{"match":{"description":"HDMI"}}
}},
{"constant_score":{
"query":{"match":{"description":"DisplayPort"}}
}}
]
}
},
"script_score":{
"script":{
"params":{"threshold":0.8},
"inline":"if (doc[\"vote\"].value > params.threshold) {return 1;} return 0.5;"
}
},
"boost_mode":"multiply",
"max_boost":10
}
}
}
上面示例中总分计算公式:new_score = query_score * vote(当vote > 0.8时,取值为1;当vote ≤ 0.8时,取值为0.5。)
返回结果如下所示。
{
"took": 634,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 2,
"hits": [
{
"_index": "mall",
"_type": "tv",
"_id": "2",
"_score": 2,
"_source": {
"name": "tv2",
"description": "USB, HDMI",
"vote": 0.99
}
},
{
"_index": "mall",
"_type": "tv",
"_id": "1",
"_score": 2,
"_source": {
"name": "tv1",
"description": "USB, DisplayPort",
"vote": 0.98
}
},
{
"_index": "mall",
"_type": "tv",
"_id": "4",
"_score": 1.5,
"_source": {
"name": "tv4",
"description": "USB, HDMI, DisplayPort",
"vote": 0.7
}
},
{
"_index": "mall",
"_type": "tv",
"_id": "3",
"_score": 0.5,
"_source": {
"name": "tv3",
"description": "USB",
"vote": 0.5
}
}
]
}
}
从上面返回结果可以看出Elasticsearch搜索引擎使用相对好评率计算电视机的总分,并将电视机按照总分由高到低的顺序排列显示。
9200端口访问失败
问题现象
通过VPN专线或VPC的对等连接访问ES集群的场景下,使用curl命令接入ES集群时,无返回结果。
例如,执行如下命令接入集群,无返回结果。
curl -s 'http://<节点内网访问地址>:9200'
原因分析
在“使用VPN专线访问ES集群”或“通过VPC的对等连接访问ES集群”场景下,其所在的客户端与ES不在同一VPC下。因此,要求ES集群的子网与其VPC具有不同的网段。
例如,某一ES集群,选用的VPC为vpc-8e28,其网络配置为192.168.0.0/16。选用了此VPC下的子网subnet-4a81,subnet-4a81子网的网段与vpc-8e28一致,均为192.168.0.0/16。此时,如果使用VPN专线访问ES集群或通过VPC的对等连接访问ES集群,会导致此子网创建的机器内没有该VPC对应的网关,从而影响ES服务的默认路由的设置,最终导致9200端口访问失败。
处理步骤
当出现9200端口访问失败错误时,且ES集群状态为可用状态。执行步骤如下所示:
1.进入ES服务管理控制台,在集群列表中,单击集群名称进入集群详情页面,查看此集群使用的VPC和子网。
2.进入VPC服务管理控制台,在虚拟私有云列表中,单击ES集群使用的VPC名称,进入VPC详情页面。查看VPC和子网的网段信息。
如下图所示,VPC的网段信息,与子网的网段信息一致。在使用VPN专线访问或使用VPC对等连接访问时,会导致9200端口访问失败。
查看网段信息
3.如果出现上述错误,请重新创建集群,并选择一个网段与VPC不同的子网,如不存在这样的子网,请在VPC管理控制台重新创建一个子网。
创建新的ES集群后,将旧集群的数据迁移至新集群中,然后再通过VPN专线访问或使用VPC对等连接访问使用。
说明如果需要VPN专线访问或使用VPC对等连接访问ES集群时,请务必保证,新创建的ES集群,其VPC与子网,具备不同的网段信息。
Elasticsearch针对filebeat配置调优
问题现象
filebeat是性能非常出色的文件采集工具,绝大多数的业务日志可以很容易的在1秒内收集至elasticsearch内,但是个别日志量大的业务日志无法及时收集,按照官方的默认配置通常1核CPU分配给filebeat时,写ES的速率低于1M/S,这里可以针对filebeat.yml配置文件做优化,提高写入ES的性能。
原因分析
filebeat.yml的默认配置比较保守,在日志量很大的业务场景,需要修改filebeat.yml参数进行调优。
处理步骤
1.针对filebeat.yml配置文件做参数优化,调整input端配置:
#根据实际情况调大harvester_buffer_size参数(该参数是指每个harvester监控文件时,使用的buffer大小)。
harvester_buffer_size:40960000
#根据实际情况调大filebeat.spool_size参数(该参数是指spooler的大小,一次Publish,上传多少行的日志量)。
filebeat.spool_size:250000
#根据实际情况调整 filebeat.idle_timeout参数(该参数是指spooler的超时时间,如果到了超时时间,不论是否到达容量阈值,spooler会清空发送出去)。
filebeat.idle_timeout:1s
2.针对filebeat.yml配置文件做参数优化,调整output.elasticsearch端配置:
#根据实际情况将worker参数调整为跟ES个数一致(该参数是指对应ES的个数,默认1)。
worker:1
#根据实际情况调大bulk_max_size参数(该参数是指单个elasticsearch批量API索引请求的最大事件数,默认是50)。
bulk_max_size:15000
#根据实际情况调整flush_interval参数(该参数是指新事件两个批量API索引请求之间需要等待的秒数,如果bulk_max_size在该值之前到达,额外的批量索引请求生效)。
flush_interval:1s
集群使用故障
问题现象
Es-event 集群单击进入kibana后,会出现一直卡在加载页面中,不能进入kibana控制台。
原因分析
浏览器缓存导致,清理缓存。
处理步骤
1.登录云搜索服务管理控制台。
2.在左侧导航栏,单击“集群管理”。
3.在集群对应的“操作”列,单击“Kibana”,打开Kibana界面。
4.在kibana页面按F12。
5.单击“Network”,选中“data:image”,右键选择“clear browser cache”,弹出对话弹框,单击确定,关闭Kibana界面。
6.在集群对应的“操作”列,单击“Kibana”即可访问。
如何使用NAT网关实现云搜索服务公网访问
开通公网访问云搜索服务操作视图:
1.获取云搜索服务信息
2.配置NAT网关
3.修改云搜索服务安全组规则
4.通过公网访问云搜索服务
注意如果非安全模式集群使用此功能,则会把集群数据直接暴露到公网,请禁用此功能。
获取云搜索服务信息
1.获取云搜索服务内网访问地址。
登录云搜索服务的Console控制台,在集群创建成功后,可在集群管理页面获取集群访问的“内网访问地址”。
2.获取VPC和子网信息。
单击集群“名称/ID”,进入集群“基本信息”页面,获取VPC和子网信息。
配置NAT网关
1.创建NAT网关。
a. 登录Console控制台,选择“服务列表”>“网络”>“NAT网关”,进入网络控制台页面。
b. 单击“购买NAT网关”,配置NAT网关的相关信息。详细请参考《NAT网关 用户指南》购买****NAT 网关 。
说明“虚拟私有云”和“子网”配置为步骤2获取的信息。
c. 配置完成后,单击“立即购买”。
2.添加DNAT规则。
a.NAT网关购买成功后,在NAT控制台,单击购买成功的NAT网关“名称”,进入NAT网关详情页面。
b. 选择“DNAT规则”页签,单击“添加DNAT规则”。详细请参考NAT网关用户指南添加NAT规则。
说明l 弹性公网IP:可以根据自己业务在弹性公网IP页面创建。
l 公网端口:可以自定义。
l 私网IP:云搜索服务的内网访问IP,即步骤1获取的“内网访问地址”。
l 私网端口:9200
l 如果创建的集群包含多个“内网访问地址”,则需要添加多个DNAT规则。
c.添加完成后,单击“确定”。
修改云搜索服务安全组规则
1.登录云搜索服务的Console控制台,选择对应的集群,单击集群“名称/ID”,进入集群“基本信息”页面。
2.在“基本信息”页面,单击“安全组”。
3.在“安全组”页面,选择“入方向规则”。
4.单击“添加规则”,添加9200端口入方向规则。
5.配置完成后,单击“确定”。
通过公网访问云搜索服务
1.在浏览器中输入https://IP:port或者http://IP:port,访问云搜索服务。
- IP:port:弹性公网IP:端口号,即创建DNAT规则设置的弹性公网IP和公网端口。
- 如果集群开启了 安全模式 ,请输入https://IP:port,并且输入安全模式的用户名和密码。
- 如果集群未开启 安全模式 ,请输入https://IP:port。
9200和9300端口是否都开放?
都开放。9200端口为外部访问es集群端口,9300为节点之间通讯端口。
访问9300端口有以下几种方式:
- 如果是同VPC同子网内可直接访问。
- 如果是同VPC下跨子网访问,需要单独申请路由配置。
- 如果是不同的VPC不同的子网访问,需要先通过对等连接,打通两个VPC网络,然后单独申请路由配置,联通两个子网。
如何使用Elasticsearch清理过期数据,释放磁盘存储空间?
- 删除单条索引数据命令。
curl -XDELETE http://IP:9200/ 索引名
说明IP:任意一个集群节点的IP地址。
- 删除某一天logstash的所有数据命令,例如删除19号所有数据。
非安全模式集群: curl -XDELETE 'http://IP:9200/logstash-2017.06.19' *
安全模式集群:curl -XDELETE -u username:password 'https://IP:9200/logstash-2017.06.19' -k
说明l username:管理员帐户名默认为admin。
l password:创建集群时设置的密码。
l IP:任意一个集群节点的IP地址。
如何配置ES集群双副本?
1.在kibana里执行 GET _cat/indices?v 命令确认集群副本的数目。如果rep参数列为1,说明是双副本。
2.如果不是,可以如下执行命令设置副本数。
PUT /index/_settings
{
"number_of_replicas" : 1 //表示需要设置的副本数
}
说明index为需要修改的索引名称,需根据实际情况进行修改。
如何清理索引数据?
- 手动清理:在kibana里执行 DELETE /my_index 命令。
- 自动化定期清理:可以写定时任务调用清理索引的请求,定期执行。ES支持Opendistro Index State Management。详见:https://opendistro.github.io/for-elasticsearch-docs/docs/im/ism/
json里设置了1个分片,是否可以通过修改配置,达到4分片,2副本的效果
索引一旦创建成功,主shards数量不可变。
修改副本数,可通过在kibana中执行以下命令:
PUT /indexname/_settings
{
"number_of_replicas" : 1 //表示需要设置的副本数
}
说明index为需要修改的索引名称,需根据实际情况进行修改。
Elasticsearch集群分片过多会有哪些影响
1.集群创建分片的速度随着集群分片数量增多而逐渐减低。
2.触发Elasticsearch自动创建index时,创建速度变慢会导致大量写入请求堆积在内存中,严重时可导致集群崩溃。
3.分片过多时,如果不能及时掌控业务的变化,可能经常遇到单分片记录超限、写入拒绝等问题。
Elasticsearch集群设置默认分页返回最大条数
解决方案
- 方法1:
打开kibana,在devtools界面执行如下命令:
PUT _all/_settings?preserve_existing=true
{
"index.max_result_window" : "10000000"
}
- 方法2:
后台执行如下命令进行设置:
curl –XPUT ‘http://localhost:9200/_all/_setting?preserve_existing=true’-d
{
"index.max_result_window":"1000000"
}
注意该配置会相应的消耗内存与CPU,请谨慎设置。
使用delete_by_query命令删除数据后,为什么磁盘使用率反而增加?
使用delete_by_query命令删除数据并不是真正意义上的物理删除,它仅仅是对数据增加了删除标记。当再次搜索的时,会搜索全部数据后再过滤掉带有删除标记的数据。
因此,该索引所占的空间并不会因为执行磁盘删除命令后马上释放掉,只有等到下一次段合并时才真正的被物理删除,这个时候磁盘空间才会释放。
相反,在查询带有删除数据时需要占用磁盘空间,这时执行磁盘删除命令不但没有被释放磁盘空间,反而磁盘使用率上升了。
ES集群如何清理缓存?
清理fielddata
进行聚合和排序时,会使用fielddata数据结构,会占用较大内存。
1.在Kibana执行如下命令,查看索引的fielddata占用情况。
DELETE /_search/scroll
{
"scroll_id" :
"DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}
2.当fielddata占用内存过高时,可以执行如下命令清理 fielddata 。
POST /test/_cache/clear?fielddata=true
“test”为fielddata占用内存较高的索引名称。
清理segment
每个segment的FST结构都会被加载到内存中,并且这些内存是不会被垃圾回收的。因此如果索引的segment数量过大,会导致内存使用率较高,建议定期进行清理。
1.在Kibana执行如下命令,查看各节点的segment数量和占用内存大小。
GET /_cat/nodes?v&h=segments.count,segments.memory&s=segments.memory:desc
2.若segment占用内存过高时,可以通过删除部分不用的索引、关闭索引或定期合并不再更新的索引等方式释放内存。
清理cache
在Kibana执行如下命令清理cache。
POST _cache/clear
Elasticsearch集群平均已用内存比例达到98%
问题现象
查看集群监控发现,ES集群“平均已用内存比例”一直处于98%,用户担心内存比例过高是否对集群有影响。
问题原因
在ES集群中,Elasticsearch会占用50%内存,另外50%内存会被Lucene用于缓存文件,因此节点内存占用会一直很高,平均已用内存比例达到98%是正常现象,请您放心使用。
解决方案
您可以关注“最大JVM堆使用率”和“平均JVM堆使用率”这两个指标来监控集群内存使用情况。