华为云用户手册

  • 处理步骤 在Kibana的“Dev Tools”页面,执行命令GET _cluster/allocation/explain?pretty查看索引分片未分配的原因。 返回结果中显示索引名称“index” 和未分配解释“explanation” : “primary shard for this replica is not yet active”,表示分片副本未激活。 图1 索引分片未分配 尝试修改该索引的配置,执行命令将其副本数置为0。 PUT /index_name/_settings { "number_of_replicas": 0 } 返回信息“reason”中表示在恢复的数据中存在 CSS 集群不支持的数据类型。 图2 数据不兼容 根据问题根因,将数据中 CS S集群不支持的数据类型删除或选择支持该数据类型的CSS集群版本,再进行备份恢复或数据迁移。
  • 集群一直处于快照中 集群一直处于快照中,有三个比较常见的原因: 集群数据量大或者集群压力大,备份快照耗时长。 单个节点的快照速度默认是40MB/s,同时,快照的性能还受集群情况影响,如果此时集群负载较高,耗时将会更久。可以通过上述章节的查询单个快照信息查询正在执行的快照情况。 执行GET _snapshot/repo_auto/snapshot-name,可以看到剩余还需要完成的shard个数,也可以通过删除快照接口提前终止。 解决方法:等待或者提前终止。 快照信息更新失败。 Elasticsearch将进行中的快照信息保存在cluster state中,快照完成后需要更新快照状态,由于Elasticsearch更新快照状态的接口没有加入重试或者容错机制,比如由于当时集群内存压力大,更新快照动作被熔断,那么这个快照将会一直处于快照中。 解决方法:调用快照删除接口。 临时AK、SK过期。 CSS通过委托将Elasticsearch中的数据写入到用户的OBS中,快照仓库创建的时候,需要去使用委托获取临时的AK 、SK设置到仓库中。由于临时的AK、SK是有时效性的(24小时过期),如果一个快照超过24小时还未完成,那么这个快照将会失败。这种情况会有一个比较大的风险,因为此时仓库的AK、SK过期,无法对这个仓库进行更新、查询、删除操作,这种情况下cluster state信息将会无法清除,只能通过普通重启(滚动重启无法生效)集群来清除cluster state里面残留的快照信息。 解决方法:暂时只能通过普通重启集群来消除,后期CSS会提供终止接口,可以来解决这种无法消除状态的现象。 父主题: 功能使用类
  • 原因分析 在“使用VPN专线访问CSS集群”或“通过VPC的对等连接访问CSS集群”场景下,其所在的客户端与CSS不在同一VPC下。因此,要求CSS集群的子网与其VPC具有不同的网段。 例如,某一CSS集群,选用的VPC为vpc-8e28,其网络配置为192.168.0.0/16。选用了此VPC下的子网subnet-4a81,subnet-4a81子网的网段与vpc-8e28一致,均为192.168.0.0/16。此时,如果使用VPN专线访问CSS集群或通过VPC的对等连接访问CSS集群,会导致此子网创建的机器内没有该VPC对应的网关,从而影响CSS服务的默认路由的设置,最终导致9200端口访问失败。
  • 处理步骤 当出现9200端口访问失败错误时,且CSS集群状态为可用状态。执行步骤如下所示: 进入CSS服务管理控制台,在集群列表中,单击集群名称进入集群详情页面,查看此集群使用的VPC和子网。 进入VPC服务管理控制台,在虚拟私有云列表中,单击CSS集群使用的VPC名称,进入VPC详情页面。查看VPC和子网的网段信息。 如图1所示,VPC的网段信息,与子网的网段信息一致。在使用VPN专线访问或使用VPC对等连接访问时,会导致9200端口访问失败。 图1 查看网段信息 如果出现上述错误,请重新创建集群,并选择一个网段与VPC不同的子网,如不存在这样的子网,请在VPC管理控制台重新创建一个子网。 创建新的CSS集群后,将旧集群的数据迁移至新集群中,然后再通过VPN专线访问或使用VPC对等连接访问使用。 如果需要VPN专线访问或使用VPC对等连接访问CSS集群时,请务必保证,新创建的CSS集群,其VPC与子网,具备不同的网段信息。
  • 数据量很大,如何进行快照备份? 如果快照数据量极大,快照备份要超过一天时,可参考如下方法进行优化。 快照备份的时候指定索引,比如先分批,默认是*,将会备份所有的索引。 使用自定义快照仓库。 创建自定义仓库。 除了使用 云搜索服务 提供的repo_auto之外,客户也可以自己创建一个仓库,接口见如下: PUT _snapshot/my_backup { "type" : "obs", "settings" : { "bucket" : "css-backup-name", //桶名 "base_path" : "css_backup/711/", //备份路径 "chunk_size" : "2g", "endpoint" : "obs.xxx.com:443", //OBS 域名 地址 "region" : "xxx", //Region名称 "compress" : "true", "access_key": "xxxxx", //AK "secret_key": "xxxxxxxxxxxxxxxxx" //SK "max_restore_bytes_per_sec": "100mb", //OBS速度,默认是40MB,可以根据实际性能调大 "max_snapshot_bytes_per_sec": "100mb" } } 使用自定义仓库创建快照。 PUT _snapshot/my_backup/snapshot_name(快照名称) { "indices": "*", //备份的索引,*表示索引,逗号分隔 "ignore_unavailable": true, //是否忽略单个index是否可用,true表示忽略 "include_global_state": false //默认false表示cluster state和其他的一些state不会保存下来 } 查询快照状态。 GET _snapshot/my_backup/snapshot_name/_status 恢复自定义仓库中的索引。 POST /_snapshot/my_backup/snapshot_name/_restore { "indices": "test-00000000000", "ignore_unavailable": true, "include_global_state": false, "rename_pattern": "(.+)", "rename_replacement": "$1" } 父主题: 功能使用类
  • 问题现象 “集群状态”为“不可用”。 单击集群名称进入集群基本信息页面,选择“日志管理”,单击“日志查询”页签,可见日志内容存在警告“master not discovered or elected yet, an election requires at least 2 nodes with ids [xxx, xxx, xxx, ...], have discovered [xxx...] which is not a quorum”。 图1 节点报错日志示例
  • 处理步骤 在集群管理页面,单击不可用的集群名称,进入集群基本信息页面。 单击“配置信息”中的安全组名称,进入当前集群所选安全组的基本信息页面。 分别查看“入方向规则”和“出方向规则”页签下,是否存在“策略”为“允许”,“协议端口”为“TCP : 9300”,“类型”为“IPv4”的安全组规则。 是,联系技术支持定位集群不可用问题。 否,执行下一步。 修改集群当前所选安全组信息,放通9300通信端口。 在当前集群所选安全组基本信息界面,选择“入方向规则”页签。 单击“添加规则”,在添加入方向规则对话框设置“优先级”为“100”,“策略”选择“允许”,“协议端口”选择“基本协议/自定义TCP”,端口填写“9300”,“类型”选择“IPv4”,“源地址”选择“安全组”下的集群当前安全组名称,即同安全组内放通。 图2 添加安全组规则 单击“确定”即可完成放通9300端口的设置。 同样的步骤,在“出方向规则”页签添加放通9300端口的设置。 安全组放通9300端口后,等待集群自动恢复可用状态。
  • 问题现象 ECS服务器部署logstash,然后推送数据到 云搜索 服务CSS,出现错误信息如下: LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError: Got response code '500' contacting Elasticsearch at URL 'https://192.168.xx.xx:9200/_xpack'。
  • 处理步骤 登录云搜索服务管理控制台。 在左侧导航栏,单击“集群管理”。 在集群对应的“操作”列,单击“Kibana”,打开Kibana界面。 如果您开启了安全模式,登录时候需要输入用户名和密码。用户名默认为admin,密码为创建集群时设置的密码。 如果忘记密码,可以在集群详情页面的“配置信息”区域,单击“重置密码”后的“重置”,设置并确认新的管理员密码。 在kibana页面按F12。 单击“Network”,选中“data:image”,右键选择“clear browser cache”,弹出对话弹框,单击确定,关闭Kibana界面。 图1 关闭Kibana界面 在集群对应的“操作”列,单击“Kibana”即可访问。
  • 参考 TCP长连接和短连接 TCP协议中有长连接和短连接之分。短连接在数据包发送完成后会自己断开,长连接在发包完成后, 会在一定的时间内保持连接,即通常所说的Keepalive(存活定时器)功能。 TCP保活机制 保活机制是由一个保活计时器实现的。当计时器被激发,连接一端将发送一个保活探测报文, 另一端接收报文的同时会发送一个ACK作为响应。 如果客户端无响应,服务器将中断连接,否则会重置保活计时器。 服务器端Keepalive设置时间30m,Linux有三个参数可以控制保活时间: tcp_keepalive_time(开启Keepalive的闲置时长)、 tcp_keepalive_intvl(Keepalive探测包的发送间隔)、tcp_keepalive_probes (如果对方不予应答,探测包的发送次数)。 http-keepalive http-keepalive是保证一个TCP连接尽可能传递多的报文,每次交互一个报文后就会更新http-keepalive时间。如果http-keepalive时间超时,意味这个这段时间client和server没有报文交互,本端会主动关闭释放连接。 tcp-keepalive是一种探测TCP连接状态的保活机制,TCP连接建立后如果不主动关闭,client和server没有发生异常,这个连接理论上是一直存在的,http-keepalive是保证一个TCP连接上尽可能传递更多的报文,如果http-keepalive时间内没有报文交互则会主动关闭连接。
  • 问题现象 安装自定义插件后重启集群,“集群状态”变为“不可用”。 单击集群名称进入集群基本信息页面,选择“日志管理”,单击“日志查询”页签,可见日志内容存在明显的关于插件的报错“fatal error in thread [main], exitingjava.lang. NoClassDefFoundError: xxx/xxx/.../xxxPlugin at ...”。 图1 节点报错日志示例 CSS服务已下线自定义插件功能,但历史版本的集群可能还装有自定义插件,只有这类集群可能出现该故障。
  • 排查是否有权限 登录 统一身份认证 服务管理控制台。 查看当前登录所用的账号或 IAM 用户所属的用户组。 具体操作请参见《统一身份认证服务用户指南》中的查看或修改用户信息章节。 查看用户组的权限中是否包含:“全局服务”中“ 对象存储服务 ”项目的“Tenant Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。 具体操作请参见《统一身份认证服务用户指南》中的查看或修改用户组章节。 如果用户组的权限中不包含以上两个权限,请执行4。 如果用户组的权限中包含以上两个权限,请联系人工客服协助解决。 为用户组添加:“全局服务”中“对象存储服务”项目的“Tenant Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。 具体操作请参见《统一身份认证服务用户指南》中的查看或修改用户组章节。
  • 处理步骤 如果集群长期处于高负载状态,则集群会存在写入、查询缓慢等情形,建议根据业务需要升级节点规格或者对集群节点的数量和存储容量进行扩容,使集群更好的满足业务需求。升级节点规格、扩容节点数量和节点存储容量的指导请参见扩容Elasticsearch集群。 查询集群是否存在任务堆积。 方式一:在Kibana的“Dev Tools”页面,分别执行以下命令查询是否存在任务堆积。 GET /_cat/thread_pool/write?v GET /_cat/thread_pool/search?v 如下所示“queue”的值为非0,表示存在任务堆积。 node_name name active queue rejected css-0323-ess-esn-2-1 write 2 200 7662 css-0323-ess-esn-1-1 write 2 188 7660 css-0323-ess-esn-5-1 write 2 200 7350 css-0323-ess-esn-3-1 write 2 196 8000 css-0323-ess-esn-4-1 write 2 189 7753 方式二:在集群管理列表,单击集群操作列的“监控信息”查看监控指标,在集群监控信息页面查看集群的“Search队列中总排队任务数”和“Write队列中总排队任务数”,如果排队任务数值非0表示存在任务堆积。 图2 Write队列中总排队任务数示例 如果集群存在大量的任务堆积,则参考如下步骤优化集群。 在集群的“日志管理”页面查看节点日志,查看节点在OOM前是否存在大量慢查询日志记录,分析查询是否会对节点造成压力导致节点内存不足,如果存在则根据业务实际情况优化查询语句。 在集群的“日志管理”页面查看节点日志,查看节点日志是否有“Inflight circuit break”或“segment can't keep up”的报错信息,如果存在则可能是写入压力过大,对集群造成较大的压力导致熔断。需要查看监控信息,排查近期数据写入量(写入速率)是否存在激增,如果存在则根据业务实际情况合理安排写入高峰时间窗。 如果集群不存在任务堆积或者集群优化完依旧不可用,则执行下一步,查看集群是否压力过大。 查看集群是否压力过大。 在集群管理列表,单击集群操作列的“监控信息”查看监控指标,在监控信息页面查看CPU和堆内存相关指标,如“平均CPU使用率”和“平均JVM堆使用率”。如“平均CPU使用率”超过80%或“平均JVM堆使用率”高于70%,则说明集群当前压力较大。 图3 “平均CPU使用率”示例 如果集群压力过大,请降低客户端的请求发送速率或扩容集群。 如果集群压力正常或降低发送请求速率后集群依旧不可用,则执行下一步,查看集群是否存在大量缓存。 在Kibana的“Dev Tools”页面,执行以下命令查询集群是否存在大量缓存。 GET /_cat/nodes?v&h=name,queryCacheMemory,fielddataMemory,requestCacheMemory 如果返回结果中queryCacheMemory、fielddataMemory或requestCacheMemory的数值超过堆内存的20%,则表示缓存过大,可执行命令POST _cache/clear清除缓存。这些缓存数据是在数据查询时生成的,目的是为了加快查询速度,当缓存清除则可能使查询时延增加。 name queryCacheMemory fielddataMemory requestCacheMemory css-0323-ess-esn-1-1 200mb 1.6gb 200mb 每个节点的最大堆内存可以执行如下命令查询: GET _cat/nodes?v&h=name,ip,heapMax 其中,name为节点名称,ip为节点的IP地址。 如果排查优化后,集群依旧负载过高,则联系技术支持。
  • 为什么集群创建失败 集群创建失败原因有如下4种: 资源配额不足,无法创建集群。建议申请足够的资源配额,详情请参见如何申请扩大配额?。 如果集群配置信息中,“安全组”的“端口范围/ICMP类型”不包含“9200”端口,导致集群创建失败。请修改安全组信息或选择其他可用安全组。 7.6.2以及7.6.2之后的版本,集群内通信端口9300默认开放在用户VPC的子网上面。创建集群时需要确认所选安全组是否放通子网内的9300通信端口,如果未放通,请修改安全组信息或选择其他可用安全组。 权限不足导致集群创建失败。建议参考权限管理获取权限,然后创建集群。 父主题: 访问集群类
  • 处理步骤 针对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 针对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
  • 处理步骤 执行如下命令,查看“open_contexts”的参数值即为当前scroll contexts的数目。 GET /_nodes/stats/indices/search 当数目达到最大值时,可以通过以下两种方式解决。 方式一:删除无用的scroll,释放scroll contexts的存储空间。 DELETE /_search/scroll { "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="} 方式二:调整“search.max_open_scroll_context”的值,增加scroll contexts的存储空间。 PUT /_cluster/settings { "persistent" : { "search.max_open_scroll_context": 2012345678 }, "transient": { "search.max_open_scroll_context": 2012345678 } }
  • 问题现象 云搜索服务的Elasticsearch集群执行命令update-by-query,出现报错“Trying to create too many scroll contexts.” ,具体报错信息如下: {"error":{"root_cause":[{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [100000]. This limit can be set by changing the [search.max_open_scroll_context] setting."},{"type":"exception","reason":"Trying to create too many scroll contexts. Must be less than or equal to: [100000]. ......
  • 处理步骤 步骤一:确认集群不可用原因 通过Kibana接入故障集群,在Kibana的“Dev Tools”页面,执行命令GET /_recovery?active_only=true查看集群是否在进行副本恢复: 返回“{"index_name":{"shards":[{"id":25,"type":"...”,代表集群存在正在进行副本恢复的索引。等待副本恢复完毕,如果集群状态仍为“不可用”,则执行下一步。 返回“{ }”:代表集群未进行副本恢复,则执行下一步。 执行命令GET _cluster/allocation/explain?pretty查看索引分片未分配的原因,根据返回信息进行筛选。 表1 参数说明 参数 描述 index 索引名称 shard 分片标号 current_state 分片当前状态 allocate_explanation 分片分配解释 explanation 解释说明 表2 不同故障说明 现象 原因 处理步骤 “explanation”中存在“no allocations are allowed due to cluster setting [cluster.routing.allocation.enable=none]” 集群当前设置的allocation策略禁止所有分片分配。 参考“shard allocation策略配置错误”之▪cluster.routing.allocat... “explanation”中存在“too many shards [3] allocated to this node for index [write08]index setting [index.routing.allocation.total_shards_per_node=3]” 集群当前设置的单个索引的分片允许分配给每个数据节点的分片数值过小,不满足索引分片的分配要求。 参考“shard allocation策略配置错误”之▪index.routing.allocatio... “explanation”中存在“too many shards [31] allocated to this node, cluster setting [cluster.routing.allocation.total_shards_per_node=30]” 集群当前设置的集群所有索引分片允许分配给每个数据节点的分片数值太小。 参考“shard allocation策略配置错误”之▪cluster.routing.allocat... “explanation”中存在“node does not match index setting [index.routing. allocation. include] filters [box_type:"hot"]” 索引分片需要下发到标记为“hot”的数据节点,而集群中所有数据节点都没有打这个标记时,分片无法下发。 参考“shard allocation策略配置错误”之▪index.routing.allocatio... “explanation”中存在“node does not match index setting [index.routing. allocation. require] filters [box_type:"xl"]” 索引分片需要下发到特定标记的数据节点,而集群中所有节点都没有打这个标记时,分片便无法下发。 参考“shard allocation策略配置错误”之▪index.routing.allocatio... “explanation”中存在“[failed to obtain in-memory shard lock]” 这种情况一般出现在有节点短暂离开集群,然后马上重新加入,并且有线程正在对某个shard做bulk或者scroll等长时间的写入操作,等节点重新加入集群的时候,由于shard lock没有释放,master无法allocate这个shard。 参考•shardlock错误 “explanation”中存在“node does not match index setting [index.routing.allocation.include] filters [_tier_preference:"data_hot OR data_warm OR data_cold"]” 集群的某个索引设置的参数与版本不匹配。 参考•索引参数版本不匹配 “explanation”中存在“cannot allocate because all found copies of the shard are either stale or corrupt” 集群的索引分片数据被损坏。 参考“主分片数据损坏”•主分片数据损坏 “explanation”中存在“the node is above the high watermark cluster setting [cluster.routing. allocation. disk.watermark.high=90%], using more disk space than the maximum allowed [90.0%], actual free: [6.976380997419324%]” 节点的磁盘使用率已超过磁盘空间允许的最大值。 参考“磁盘使用率过高”•磁盘使用率过高 步骤二:根据不同的问题现象处理故障 shard allocation策略配置错误 cluster.routing.allocation.enable参数 返回结果中“explanation”如下,表示集群当前设置的allocation策略禁止所有分片分配导致。 图3 allocation.enable参数配置错误 在Kibana的“Dev Tools”页面,执行命令将“enable”设置为“all”,允许所有分片进行分配。 PUT _cluster/settings { "persistent": { "cluster": { "routing": { "allocation.enable": "all" } } } } index级别会覆盖cluster级别配置,参数设置含义如下: all - (默认) 所有类型均允许allocation。 primaries - 只允许allocation主分片。 new_primaries - 只允许allocation新创建index的主分片。 none - 所有的分片都不允许allocation。 再执行命令POST _cluster/reroute?retry_failed=true手动进行分片分配,等待索引分片分配完成,集群状态变为可用。 index.routing.allocation.total_shards_per_node参数。 返回结果中“explanation”如下,表示设置的“index.routing.allocation.total_shards_per_node”值过小,不满足索引的分片分配要求。 图4 index total_shards_per_node设置错误 在Kibana的“Dev Tools”页面,执行命令修改索引在每个节点允许分配的分片数。 PUT index_name/_settings { "index": { "routing": { "allocation.total_shards_per_node": 3 } } } “index.routing.allocation.total_shards_per_node”的值 = index_name索引分片数 / (数据节点个数 - 1) 参数值应设置稍微大一些,假设集群有10个节点,其中5个数据节点,2个client节点,3个master节点,有个索引的分片数为30,如果将total_shards_per_node值设为4,能分配的shard总数只有4*5=20,分片无法完全分配。5个数据节点,需要分配30个分片,每个节点应最少分配6个分片,防止某数据节点故障脱离,那最少应设置每个节点允许分配8个分片。 再执行命令POST _cluster/reroute?retry_failed=true手动进行分片分配,等待索引分片分配完成,集群状态变为可用。 cluster.routing.allocation.total_shards_per_node参数。 返回结果中“explanation”如下,表示集群允许分配给每个数据节点的分片数设置太小。 图5 cluster total_shards_per_node设置错误 “cluster.routing.allocation.total_shards_per_node”参数为限制集群每个数据节点可分配的分片数量,此参数默认设置为“1000”,在Kibana的“Dev Tools”页面执行如下命令设置“cluster.routing.allocation.total_shards_per_node”参数。 PUT _cluster/settings { "persistent": { "cluster": { "routing": { "allocation.total_shards_per_node": 1000 } } } } 出现此场景大多数是参数使用错误,误将“index.routing.allocation.total_shards_per_node”参数设置为“cluster.routing.allocation.total_shards_per_node”参数。执行如下命令可以设置“index.routing.allocation.total_shards_per_node”参数: PUT index_name/_settings { "index": { "routing": { "allocation.total_shards_per_node": 30 } } } 两个参数都是限制单个数据节点所能分配的最大分片数。 “cluster.routing.allocation.total_shards_per_node”是集群级别的分片限制。 “index.routing.allocation.total_shards_per_node”是索引级别的分片限制。 再执行命令POST _cluster/reroute?retry_failed=true手动进行分片分配,等待索引分片分配完成,集群状态变为可用。 index.routing.allocation.include参数。 返回结果中“explanation”如下,表示是将索引分片下发到标记为“hot”的数据节点,而集群中所有数据节点都没有打这个标记时,分片无法下发。 图6 include参数配置错误 在Kibana的“Dev Tools”页面执行命令取消该配置: PUT index_name/_settings { "index.routing.allocation.include.box_type": null } 再执行命令POST _cluster/reroute?retry_failed=true手动进行分片分配,等待索引分片分配完成,集群状态变为可用。 index.routing.allocation.require参数。 返回结果中“explanation”如下,表示是将分片下发到特定标记的数据节点,而集群中所有节点都没有打这个标记时,分片便无法下发。 图7 require参数配置错误 在Kibana的“Dev Tools”页面执行命令取消该配置: PUT index_name/_settings { "index.routing.allocation.require.box_type": null } 再执行命令POST _cluster/reroute?retry_failed=true手动进行分片分配,等待索引分片分配完成,集群状态变为可用。 shard lock错误 返回结果中“explanation”存在“[failed to obtain in-memory shard lock]”,这种情况一般出现在有节点短暂离开集群,然后马上重新加入,并且有线程正在对某个shard做bulk或者scroll等长时间的写入操作,等节点重新加入集群的时候,由于shard lock没有释放,master无法allocate这个shard。 此现象不会造成分片数据丢失,只需要重新触发一下分配即可。在Kibana的“Dev Tools”页面执行命令POST /_cluster/reroute?retry_failed=true手动对未分配分片进行分配,等待索引分片分配完成,集群状态变为可用。 索引参数版本不匹配 返回信息中的索引名称“index”和索引未分配解释“explanation ”: “node does not match index setting [index.routing.allocation.include] filters [_tier_preference:"data_hot OR data_warm OR data_cold"]”,表示集群的某个索引设置的参数与节点不匹配。 图8 索引参数不匹配 执行命令 GET index_name/_settings查看索引配置,返回结果中是否存在不符合自身版本的索引特性。 图9 索引设置 以index.routing.allocation.include._tier_preference特性为例,当前集群是7.9.3版本,这个索引特性是在7.10版本之后才支持的,低版本集群使用该特性将无法分配索引的分片,导致集群不可用。 确定集群是否必须使用该不匹配的特性。 是,创建与所需索引特性相匹配的版本集群,然后将老集群的数据通过备份恢复至新集群。 否,执行下一步。 执行命令去除索引中不符合集群版本的特性。 PUT /index_name/_settings { "index.routing.allocation.include._tier_preference": null } 执行命令POST /_cluster/reroute?retry_failed=true手动对未分配分片进行分配,等待索引分片分配完成,集群状态变为可用。 主分片数据损坏 返回信息中的索引名称"index"、分片标号"shard"、分配解释"allocate_explanation" 和"store_exception":"type":"corrupt index exception",表示集群的某个索引的某个分片数据被损坏。 图10 索引数据损坏 当索引数据被损坏或者某个分片的主副本都丢失时,为了能使集群恢复green状态,解决方法是划分一个空shard,执行以下命令划分空分片并指定分配的节点。 POST /_cluster/reroute { "commands" : [ { "allocate_empty_primary" : { "index" : "index_name", "shard" : 2, "node" : "node_name", "accept_data_loss":true } } ] } 一定要谨慎该操作,会导致对应分片的数据完全清空。 索引分片重新分配后,集群状态恢复可用。 磁盘使用率过高 返回结果如下,其中“allocate_explanation”表示该索引的分片无法分配给任何数据节点,“explanation”表示节点磁盘使用率已超过磁盘空间允许的最大值。 图11 explain查询结果 磁盘使用率超过85%:会导致新的分片无法分配。 磁盘使用率超过90%:集群会尝试将对应节点中的分片迁移到其他磁盘使用率比较低的数据节点中。无法迁移时系统会对集群每个索引强制设置“read_only_allow_delete”属性,此时索引将无法写入数据,只能读取和删除对应索引。 磁盘使用率过高时可能会发生节点脱离,后续节点自动恢复后也可能会因为集群压力过大,监控调ES接口查询集群状态时无响应,无法及时更新集群状态导致集群状态为不可用。 增加集群可用磁盘容量。 在Kibana的“Dev Tools”页面,执行命令DELETE index_name清理集群的无效数据释放磁盘空间。 临时降低索引副本数,待扩容磁盘容量或扩容节点完成后改回索引副本数。 在Kibana的“Dev Tools”页面,执行命令临时降低索引副本数。 PUT index_name/_settings { "number_of_replicas": 1 } 如果返回结果如下: 图12 索引read-only-allow-delete状态 则是因为磁盘使用率已超过磁盘空间允许的最大值,集群所有索引被强制设置“read_only_allow_delete”属性,先执行命令将该属性值置为“null”,再执行2.a的命令降低索引副本数。 PUT /_settings { "index.blocks.read_only_allow_delete": null } 参考扩容对集群进行节点数量或节点存储容量进行扩容。 待扩容完成后再执行2.a改回索引副本数,待索引分片完全分配后,集群状态变为可用。
  • 问题现象 “集群状态”为“不可用”。 在Kibana的“Dev Tools”页面,执行命令GET _cluster/health查看集群健康状态,结果中“status”为“red”,“unassigned_shards”不为0。或者在“Cerebro”可视化页面,单击“overview”查看索引分片在各数据节点的分配情况,可见集群状态为红色和“unassigned shards”不为0,表示集群存在无法分配的索引分片。 图1 集群健康状态 图2 cerebro可视化界面
  • 解决方案 建议根据实际情况调整客户端的并发写入请求数(调整到一个合适的阈值),另外被rejected的http请求ES-Hadoop是有重试机制的,可修改以下参数: “es.batch.write.retry.count”:默认重试3次。 “es.batch.write.retry.wait”:每次重试等待时间10s。 如果对查询的实时性级别要求不高的话,可以调整下分片刷新的时间(默认是每秒刷新一次),提高写入速度。 PUT /my_logs { "settings": { "refresh_interval": "30s" } }
  • 原因分析及处理方法 如果集群列表的任务状态显示“冻结”,可能是集群冻结状态导致集群不可用。 如果集群列表的任务状态显示“配置错误,重启失败”,可能是X-pack参数配置导致集群不可用。 如果集群节点的日志内容存在警告“master not discovered or elected yet, an election requires at least 2 nodes with ids [xxx, xxx, xxx, ...], have discovered [xxx...] which is not a quorum”,可能是安全组策略设置不合理导致集群不可用。 如果集群节点的日志内容存在明显的关于插件的报错“fatal error in thread [main], exitingjava.lang. NoClassDefFoundError: xxx/xxx/.../xxxPlugin at ...”,可能是插件不兼容导致集群不可用。 如果集群的健康状态为红色和且“unassigned shards”不为0,表示集群存在无法分配的索引分片,是分片未正常分配导致集群不可用。 如果集群进行备份恢复或集群迁移操作后,出现的不可用现象,可能是数据类型不兼容导致集群不可用。 如果集群节点的日志内容存在报错“OutOfMemoryError”和警告“[gc][xxxxx] overhead spent [x.xs] collecting in the last [x.xs]”,可能是集群负载过高导致集群不可用。
  • 排查是否有权限 登录统一身份认证服务管理控制台。 查看当前登录所用的账号或IAM用户所属的用户组。 具体操作请参见《统一身份认证服务用户指南》中的如何查看或修改用户信息章节。 查看用户组的权限中是否包含:“全局服务”中“对象存储服务”项目的“OBS Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。 具体操作请参见《统一身份认证服务用户指南》中的如何查看或修改用户组章节。 如果用户组的权限中不包含以上两个权限,请执行步骤4。 如果用户组的权限中包含以上两个权限,请联系华为云技术支持协助解决。 为用户组添加:“全局服务”中“对象存储服务”项目的“OBS Administrator”权限、当前所属区域的“Elasticsearch Administrator”权限。 具体操作请参见《统一身份认证服务用户指南》中的如何查看或修改用户组章节。
  • 快照仓库找不到 在云搜索服务的“集群管理”页面上,单击集群“操作”列的“Kibana”访问集群。 在Kibana的左侧导航中选择“Dev Tools”,单击“Get to work”,进入Console界面。 Console左侧区域为输入框,右侧为结果输出区域,为执行命令按钮。 执行命令GET _snapshot/_all返回为空,或者执行命令GET _snapshot/repo_auto/_all返回如图1提示错误,这个表示没有设置快照。需要重新修改快照配置信息。 图1 返回信息 单击集群名称,进入集群基本信息页面,选择“集群快照”,进入集群快照页面。 单击“基础配置”后面的,修改基础配置。 修改完成后,单击“确定”。 如果保存后还不能生效,可以尝试修改下备份路径,换一个不一样的值保存然后再修改回来。 父主题: 功能使用类
  • CSS服务中如何配置Elasticsearch双副本? //删除,合入“CSS服务中如何配置Elasticsearch索引副本数量?”章节。 在Kibana里执行GET _cat/indices?v命令确认集群副本的数目。如果rep参数列为1,说明是双副本。 如果不是,可以如下执行命令设置副本数。 PUT /index/_settings { "number_of_replicas" : 1 //表示需要设置的副本数 } index为需要修改的索引名称,需根据实际情况进行修改。 父主题: CSS集群搜索引擎使用
  • 日常需要关注CSS服务的哪些监控指标? 日常需要关注CSS服务的磁盘使用率和集群健康状态。用户可以登录到 云监控服务 ,根据实际应用场景配置告警提示,当收到告警,可采取相应措施消除告警。告警配置方法,请参见配置告警规则。 配置示例: 如果在某段时间内(如5min),磁盘使用率出现多次(如5次)不低于某特定值(如85%)的情况,则发出相应告警。 如果在某段时间内(如5min),集群健康状态出现多次(如5次)大于0的情况,则发出相应告警。 采取措施: 收到与磁盘使用率有关的告警时,可以调查磁盘空间消耗,查看是否可以从集群节点中删除数据或是将数据存档到其他系统以释放空间,或者扩容磁盘。 收到与集群健康状态有关的告警时,可以查看集群的分片分配是否正常以及Shard是否已丢失,在Cerebro上查看进程是否发生重启。 父主题: CSS集群监控与运维
  • 如何选择区域? 选择区域时,您需要考虑以下几个因素: 地理位置 一般情况下,建议就近选择靠近您或者您的目标用户的区域,这样可以减少网络时延,提高访问速度。 在除中国大陆以外的亚太地区有业务的用户,可以选择“中国-香港”、“亚太-曼谷”或“亚太-新加坡”区域。 在非洲地区有业务的用户,可以选择“非洲-约翰内斯堡”区域。 在欧洲地区有业务的用户,可以选择“欧洲-巴黎”区域。 在拉丁美洲地区有业务的用户,可以选择“拉美-圣地亚哥”区域。 “拉美-圣地亚哥”区域位于智利。 资源的价格 不同区域的资源价格可能有差异,请参见华为云服务价格详情。
  • 什么是区域、可用区? 我们用区域和可用区来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。
  • 为子用户分配权限,子用户自行开通FRS服务 使用主账号登录IAM服务控制台。 打开用户组列表,找到子用户所在的用户组,单击该用户组的“授权”操作。 勾选需要授予用户组的权限,单击“确定”,完成用户组授权。FRS全部系统权限请参见权限管理。 当现有策略不满足时,可使用FRS自定义策略。 子账户被赋予相应权限后,可使用子账户登录FRS控制台,开通所需的服务。 开通服务:主账号开通FRS的某个服务时,子账号未开通此服务,则子账号无法调用此服务,需子账号开通此服务后才可调用。 关闭服务:主账号关闭FRS的某个服务时,子账号未关闭此服务,则子账号依然可以调用此服务,并产生相应费用。如果需要暂停此服务,需要对应的子账号也关闭此服务。
  • 操作步骤 登录https://support.sap.com/swdc下载安装包,然后执行安装。 打开“SAP Software Download Center”。 选择“Software Downloads” 选择“INSTALLATIONS & UPGRADES” 选择“By Alphabetical Index (A-Z)” 选择“H” 选择“SAP HANA PLATFORM EDITION” 选择“DOWNLOADS” 在“DOWNLOADS”窗口中,找到要下载的版本并将下载到本地硬盘。 将获取的安装包传至待安装SAP HANA软件的服务器的/hana/shared目录下并解压。例如安装文件为 “51052383_part1.exe”。 cd /hana/shared unrar x 51052383_part1.exe 进入到安装文件所在的目录。 例如,安装文件在“/DATA_UNITS/HDB_SERVER_LINUX_X86_64”下。 cd 51052383 cd DATA_UNITS/HDB_SERVER_LINUX_X86_64 增加文件夹的可执行权限。 chmod -R 777 /hana 执行安装。 ./hdblcm --ignore=check_signature_file 系统提示如下: Choose installation Index | System | Database Properties ------------------------------------------------ 1 | Install new system | | 2 | Extract components | 3 | Exit (do nothing) | Enter selected system index [2]: 输入“1”后,按“Enter”键。 系统提示如下: Select additional components for installation: Index | Components | Description --------------------------------------------- 1 | server | No additional components 2 | all | All components Enter comma-separated list of the selected indices [1]: 输入“1”后,按“Enter”键。 按照界面的提示,输入参数后,按“Enter”键,逐个完成全部参数的设置。 在配置过程中,如果要使用默认值,直接按“Enter”键。 如果输入的参数有误 ,且已按“Enter”键,则可以按“Ctrl+C”键退出,并重新通过“./hdblcm --ignore=check_signature_file”命令进入安装界面。 参数配置要求如表 1 SAP HANA安装参数说明所示。 表1 SAP HANA安装参数说明 参数 说明 Installation Path 默认为“/hana/shared/$SID”,使用默认值。 Local Host Name 使用本机名称。 Do you want to add additional hosts to the system 取值为“n”。 SAP HANA System ID 指定系统ID。系统ID是HANA系统中的一个标识,例如“S00”。 Instance Number 指定SAP HANA系统中的实例编号,例如“00”。 实例编号在安全组规划中被引用,需要与规划保持一致。 Database Mode 数据库的部署模式。使用默认值“single_container” ,安装HANA2.0时,无需设置该参数,默认支持“multiple container”。 System Usage 指定安装的SAP HANA系统的使用类型。请根据实际选择。该参数保存在 “global.ini” 文件中,可用于标识SAP HANA系统的用途。 Location of Data Volumes Specifies 指定系统的Data卷目录,为“/hana/data/$SID”。 Location of Log Volumes 指定系统的Log卷目录,为“/hana/log/$SID”。 Restrict maximum memory allocation? 指定是否限制最大内存分配功能,使用默认值“n”。 Certificate Host Name 指定用于为SAP host agent生成self-signed SSL证书的主机名称。 SAP Host Agent User (sapadm) Password 请根据实际输入。 System Administrator (s00adm) Password 请根据实际输入。 System Administrator Home Directory 使用默认值 。 System Administrator Login Shell 使用默认值 。 System Administrator User ID 使用默认值 。 ID of User Group 使用默认值 。 Database User (SYSTEM) Password 请根据实际输入。 配置完成,在“Restart system after machine reboot?”项处,根据场景进行操作: 单节点无HA场景时,输入“y”。 单节点HA场景下,不配置自动切换主备节点功能时,输入“y”;需配置自动切换主备节点功能(即HAE功能)时,输入“n”。 然后,按“Enter”键,系统弹出安装概要信息。 确认安装信息无误后,在“Do you want to continue ?”项处,输入“y”,按“Enter”,开始进行SAP HANA安装。 安装完成后,系统提示“Installation done”。 检查安装结果。 切换到“/hana/shared/$SID/HDB00/”目录。 例如 cd /hana/shared/S00/HDB00 切换到数据库系统管理员用户。 管理员帐号为安装过程中界面提示的“s00adm”。 su - s00adm 查询数据库的版本。 如果能查询到版本信息,则表示数据库软件安装成功。 HDB -version 数据库安装成功,系统返回的版本信息。示例如图1所示。 图1 SAP HANA版本查询 检查数据库进程是否运行正常。 执行命令,检查进程。 “00”为SAP HANA的实例ID。 sapcontrol -nr 00 -function GetProcessList 系统返回结果示例如下,“dispstatus”为“GREEN”表示进程正常。 13.04.2017 16:04:15 GetProcessList OK name, description, dispstatus, textstatus, starttime, elapsedtime, pid hdbdaemon, HDB Daemon, GREEN, Running, 2017 04 13 11:18:33, 4:45:42, 3013 hdbcompileserver, HDB Compileserver, GREEN, Running, 2017 04 13 11:18:42, 4:45:33, 3154 hdbindexserver, HDB Indexserver, GREEN, Running, 2017 04 13 11:18:47, 4:45:28, 3180 hdbnameserver, HDB Nameserver, GREEN, Running, 2017 04 13 11:18:34, 4:45:41, 3027 hdbpreprocessor, HDB Preprocessor, GREEN, Running, 2017 04 13 11:18:42, 4:45:33, 3156 hdbwebdispatcher, HDB Web Dispatcher, GREEN, Running, 2017 04 13 11:19:09, 4:45:06, 3513 hdbxsengine, HDB XSEngine, GREEN, Running, 2017 04 13 11:18:47, 4:45:28, 3182 退回到“root”用户模式。 exit 检查数据库的启动与关闭。 切换到“/hana/shared/$SID/HDB00/”目录。 例如 cd /hana/shared/S00/HDB00 切换到数据库系统管理员用户。 管理员帐号为安装过程中界面提示的“s00adm”。 su - s00adm 启动SAP HANA数据库。 HDB start 关闭SAP HANA数据库 HDB stop 重新启动SAP HANA数据库。 检查完成后,需要重新启动SAP HANA数据库。 HDB restart 退回到“root”用户模式。 exit
  • 单节点部署(无HA) 单节点部署无HA(High Available)的方案,如图1所示。 图1 单节点部署(无HA)方案 说明如下: VPC网络:为了保证网络的安全,SAP HANA系统中所有节点在一个VPC网络内,且所有节点应属于同一个AZ(Available Zone)。 公网子网区: NAT(Network Address Translation)服务器:租户对SAP HANA节点的SSH访问需要通过NAT服务器跳转。 SAP HANA Studio服务器。运行SAP HANA Studio软件。租户通过RDP(Remote Desktop Protocol)或SSH协议访问该服务器,对SAP HANA系统进行管理。 私有子网区: SAP HANA节点:用于部署SAP HANA软件。服务器上共有以下磁盘,其中: OS盘:操作系统安装目录。 Data卷:用于定时存储SAP HANA内存数据库传过来的数据。SAP HANA的内存数据库(即高性能内存中运行的数据库)会定时(缺省为5分钟)将数据库中的内容写入Data卷。 Log卷:用于在事件触发的时候存储数据。服务器的内存数据库中完成一次事件触发(例如完成一条或一批记录的刷新),会将数据库中最新的内容写入Log卷。 Shared卷:主要用于存放SAP HANA的安装软件,以及SAP HANA数据库的运行日志文件等。 Backup卷:用于存放SAP HANA数据库的备份文件。 usr/sap卷:用于挂载“/usr/sap”目录。 swap卷:Linux交换空间。 部署流程如图2。 图2 单节点部署(无HA)流程 父主题: 方案
共100000条